在学习 Machine Learning 的过程中遇到了三个有点模糊的概念——归一化、标准化和正则化,经过收集资料和咨询培神之后,最终理解了这三者的区别,特此小记。

0x01 归一化 Normalization

归一化一般是将数据映射到指定的范围,用于去除不同维度数据的量纲以及量纲单位。

常见的映射范围有 [0, 1][-1, 1] ,常见的归一化方式有以下三种:

Min-Max 归一化

$$x_{new}=\frac{x-x_{min}}{x_{max}-x_{min}}$$

Log 转换

$$x_{new}=\frac{\log_{10}x}{\log_{10}x_{max}}$$

反余切函数转换

$$x_{new}=\frac{2*\arctan x}{\pi }$$

举个例子,我们判断一个人的身体状况是否健康,那么我们会采集人体的很多指标,比如说:身高、体重、红细胞数量、白细胞数量等。

一个人身高 180cm,体重 70kg,白细胞计数 $7.50×10^{9}/L$,etc.

衡量两个人的状况时,白细胞计数就会起到主导作用从而遮盖住其他的特征,归一化后就不会有这样的问题。

0x02 标准化 Normalization

在这里我们需要强调一下英文翻译的问题,在 Udacity 字幕组中对此进行了探讨:

归一化和标准化的英文翻译是一致的,但是根据其用途(或公式)的不同去理解(或翻译)

下面我们将探讨最常见的标准化方法: Z-Score 标准化

Z-Score 标准化

$$x_{new}=\frac{x-\mu }{\sigma }$$

其中 $\mu$ 是样本数据的均值(mean),$\sigma$ 是样本数据的标准差(std)

散点图标准化

上图则是一个散点序列的标准化过程:原图->减去均值->除以标准差。

显而易见,变成了一个均值为 0 ,方差为 1 的分布,下图通过 Cost 函数让我们更好的理解标准化的作用。

三维图标准化

机器学习的目标无非就是不断优化损失函数,使其值最小。在上图中,$J(w,b)$ 就是我们要优化的目标函数

我们不难看出,标准化后可以更加容易地得出最优参数 $w$ 和 $b$ 以及计算出 $J(w,b)$ 的最小值,从而达到加速收敛的效果。$^{[1]}$

注:上图来源于 Andrew Ng 的课程讲义

Batch Normalization

在机器学习中,最常用标准化的地方莫过于神经网络的 BN 层(Batch Normalization),因此我们简单的谈谈 BN 层的原理和作用,想要更深入的了解可以查看论文

我们知道数据预处理做标准化可以加速收敛,同理,在神经网络使用标准化也可以加速收敛,而且还有如下好处:

  • 具有正则化的效果(Batch Normalization reglarizes the model)$^{[2]}$
  • 提高模型的泛化能力(Be advantageous to the generalization of network)$^{[2]}$
  • 允许更高的学习速率从而加速收敛(Batch Normalization enables higher learning rates)$^{[2]}$

其原理是利用正则化减少内部相关变量分布的偏移(Reducing Internal Covariate Shift),从而提高了算法的鲁棒性。$^{[2]}$

Batch Normalization 由两部分组成,第一部分是缩放与平移(scale and shift),第二部分是训练缩放尺度和平移的参数(train a BN Network),算法步骤如下:

BN Alg #1

接下来训练 BN 层参数 $\gamma$ 和 $\beta$,限于篇幅的原因按下不表,有兴趣的读者可以拜读这篇论文。

0x03 正则化 Regularization

正则化主要用于避免过拟合的产生和减少网络误差

正则化一般具有如下形式:

$$J(w,b)= \frac{1}{m} \sum_{i=1}^{m}L(f(x),y)+\lambda R(f)$$

其中,第 1 项是经验风险(俗称 loss ,下同),第 2 项是正则项,$\lambda \geq 0$ 为调整两者之间关系的系数。

第 1 项的经验风险较小的模型可能较复杂(有多个非零参数),这时第 2 项的模型复杂度会较大。

常见的有正则项有 L1 正则L2 正则 ,其中 L2 正则 的控制过拟合的效果比 L1 正则 的好。

正则化的作用是选择经验风险与模型复杂度同时较小的模型。$^{[3]}$

常见的有正则项有 L1 正则L2 正则 以及 Dropout ,其中 L2 正则 的控制过拟合的效果比 L1 正则 的好。

$L_p$ 范数

为什么叫 L1 正则,有 L1、L2 正则 那么有没有 L3、L4 之类的呢?

首先我们补一补课,$L_p$ 正则的 L 是指 $L_p$ 范数,其定义为:

$L_0$ 范数:$\left \| w \right \|_{0} = \#(i)\ with \ x_{i} \neq 0$ (非零元素的个数)

$L_1$ 范数:$\left \| w \right \|_{1} = \sum_{i = 1}^{d}\lvert x_i\rvert$ (每个元素绝对值之和)

$L_2$ 范数:$\left \| w \right \|_{2} = \Bigl(\sum_{i = 1}^{d} x_i^2\Bigr)^{1/2}$ (欧氏距离)

$L_p$ 范数:$\left \| w \right \|_{p} = \Bigl(\sum_{i = 1}^{d} x_i^p\Bigr)^{1/p}$

在机器学习中,若使用了 $\lVert w\rVert_p$ 作为正则项,我们则说该机器学习任务引入了 $L_p$ 正则项

Regular Lp


上图来自周志华老师的《机器学习》插图

L1 正则 Lasso regularizer

$$J(w,b)=\frac{1}{m} \sum_{i=1}^{m}L(\hat{y},y)+\frac{\lambda }{m}\left \| w \right \|_{1}$$

  • 凸函数,不是处处可微分
  • 得到的是稀疏解(最优解常出现在顶点上,且顶点上的 w 只有很少的元素是非零的)

L2 正则 Ridge Regularizer / Weight Decay

$$J(w,b)=\frac{1}{m} \sum_{i=1}^{m}L(\hat{y},y)+\frac{\lambda }{2m}\left \| w \right \|^{2}_{2}$$

  • 凸函数,处处可微分
  • 易于优化

Dropout

Dropout 主要用于神经网络,其原理是使神经网络中的某些神经元随机失活,达到降低网络结构的复杂度的效果。相关论文

Dropout

0x04 Reference

[1] LeCun, Y., Bottou, L., Orr, G., and Muller, K. Efficient backprop. In Orr, G. and K., Muller (eds.), Neural Net-works: Tricks of the trade. Springer, 1998b.

[2] Sergey Ioffe, Christian Szegedy, “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift”, arXiv preprint arXiv:1502.03167, 2015.

[3] 李航. 统计方法学 P13-14

[4] 聊聊机器学习中的损失函数 http://kubicode.me/2016/04/11/Machine%20Learning/Say-About-Loss-Function/

[5] 谈谈 L1 与 L2-正则项 https://liam0205.me/2017/03/30/L1-and-L2-regularizer/