标准化-normalization

本文希望回答下面的问题

对输入数据标准化为什么能加快训练速度?

所有过程代码见 juputer notebook.


线性回归

给定数据集$\{x^i,y^i\}_{i=1}^N$, 其中$x^i=(x^i_1,x^i_2) \in \mathbb{R}^2$,$y^i \in \mathbb{R}$。

回归模型 $y = w^Tx=w_1x_1+w_2 x_2$ (设模型中的b为0)

损失函数取为均方误差

为了简洁,$L$也表示$L(w_1,w_2) $

损失函数在$w_1 = c$的截面记为 $L(w_1=c,w_2) $或者$L(w_2)$

损失函数在$w_2 = c$的截面记为 $L(w_1,w_2=c) $或者$L(w_1) $


数据模拟

数据点$\{x^i,y^i\}_{i=1}^{200}$由线性回归 $y=0.1 x_1+0.2 x_2+\epsilon$模拟得到。

其中($x_2$的取值范围是$x_1$的10倍)

  • $x_1 \sim 1*N(0,1)$
  • $x_2 \sim 10*N(0,1)$
  • $\epsilon$为噪音, 分布为 $\epsilon \sim N(0,1)$


损失函数

将200个数据点代入公式(1), 得到$L, L(w_1,w_2=0.1), L(w_1=0.2,w_2)$的几何图形:

左图:损失函数在参数平面($w_1,w_2$)上具有椭圆形水平集。

中图:损失函数沿着$w_2$的截面图

右图:损失函数沿着$w_1$的截面图

可以观察到损失函数$L$在不同参数方向上的下降速度(梯度)差别很大,这会导致什么问题呢?

  • 在$w_1$的方向上选择最佳学习率${\eta_{w_1}}$更新参数 $w_1\leftarrow w_1-\eta_{w_1} \nabla_{w_1} L$,

    在$w_2$的方向上使用$\eta_{w_1}$更新参数 $w_2\leftarrow w_2-\eta_{w_1} \nabla_{w_2} L$.

    结果是在$w_2$方向上由于学习率太大,会发散。

  • 在$w_2$的方向上选择最佳学习率$\eta_{w_2}$更新参数 $w_2\leftarrow w_2-\eta_{w_2} \nabla_{w_2} L$,

    在$w_1$的方向上使用$\eta_{w_2}$更新参数$w_1\leftarrow w_1-\eta_{w_2} \nabla_{w_1} L$.

    结果是在$w_1$方向上由于学习率太小,收敛速度太慢。

所以,为了避免在其中一个方向上发散,只能选择较小的学习率$\eta_{w_2}$.

$L$在$w_1$和$w_2$下降速度不一样,具体表现在$\nabla_{w_2} L$比$\nabla_{w_1} L$大很多,从而在整个损失函数上产生如下锯齿形的更新过程, 从而收敛速度较慢。

下图是梯度下降算法最小化损失函数的参数更新过程:


标准化

为了解决这个问题,加快收敛速度:

  1. 一种办法是自动调整不同方向的学习率,在$w_1$方向上把学习率调大,在$w_2$方向上把学习率调小。从而诞生了许多自适应学习率算法Adagrad, RMSprop, Adam等等。

  2. 另一种解决方法就是调整输入的尺度(scaling), 使其归一化到同一个范围featureScaling,比如[-1,1]; 或者是通过标准化normalization,转化为0均值,单位方差的输入。

采用2的方法。对输入特征$\{x^i\}_{i=1}^N$做标准化$\tilde{x}^i = \frac{x^i-\mu}{\sigma}$ ,其中

  • $\mu = [\mu_1,\mu_2]^T $, $\mu_j = \frac{1}{N} \sum_{i=1}^N x_j^i\quad j=1,2$

  • $\sigma = [\sigma_1, \sigma_2]^T$, $\sigma_j= \frac{1}{N} \sum_{i=1}^N (x^i_j-\mu_j)^2 \quad j=1,2$

    然后重新计算损失函数,可得下图:

    下图是梯度下降算法最小化损失函数(输入标准化)的参数更新过程::

观察图形,可以得到下面重要的结论:

  • 使用标准化(normalization)后,损失函数从椭圆形改进到接近圆形

  • $L$在$w_1$和$w_2$下降速度差的不多, 所以$\nabla_{w_2} L$和$\nabla_{w_1} L$也差不多, 在$w_1,w_2$方向上的学习率也差不多, 从而可以使用较大的学习率。这样就避免了锯齿形的更新方式, 加快了收敛速度。

    下图是训练误差图:

    (1). 没有标准化,学习率lr为0.011时收敛,0.0111时发散

    (2). 标准化后,学习率lr可以取得更大(比如,为未标准化的10倍左右)

    (3). 标准化后迭代到20步基本收敛到最优值,未标准化迭代到100步仍未收敛到最优




featureScaling. $\frac{x-x_{min}}{x_{max}-x_{min}}$
normalization. $\frac{x-\mu}{\sigma}$