李宏毅深度学习笔记:Batch Normalization

Batch Normalization的paper:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

Feature Scaling

Feature Scaling指特征缩放,是将不同的feature缩放到相同的scale上。这里scale指的是取值范围。

  1. Feature Scaling的对training的影响
    下图是一个简单的例子:
    李宏毅深度学习笔记:Batch Normalization
    在上图中,x1x_1x2x_2是模型输入的不同feature,w1w_1w2w_2是weight,bb是bias,aa是模型的输出,即 a=w1x1+w2x2+ba = w_1 * x_1 + w_2 * x_2 + b 。那么aa最终会影响到Loss。模型的输入x1x_1x2x_2的scale差别很大,x2x_2的各个元素的取值都远大于x1x_1,容易理解,这会导致w1w_1w2w_2有相同变化时,w2w_2aa的影响远大于w1w_1,并最终导致w2w_2Loss的影响远大于w1w_1,error surface如下图:
    李宏毅深度学习笔记:Batch Normalization
    上图说明了w1w_1w2w_2Loss的影响,可以看出,Lossw2w_2方向的梯度gradient即斜率大于在w1w_1方向上的,说明w2w_2Loss的影响大于w1w_1
    如果现在对x1x_1x2x_2Feature Scaling,如下图:
    李宏毅深度学习笔记:Batch Normalization
    现在x1x_1x2x_2有了相同的scale,所以w1w_1w2w_2aa的影响也就是对最终Loss的影响就相同了,error surface如下图:
    李宏毅深度学习笔记:Batch Normalization
    可以看出error surface比较接近正圆形。
    那么椭圆形和正圆形有什么不同呢?在做梯度下降的时候,如果是椭圆形,gradient在不同方向上差别比较大,这会让training变得不容易。为了让gradient能到达尽快到达0,也就是Loss局部最优,需要让gradient 尽量“走直线”,如下图红线所示:
    李宏毅深度学习笔记:Batch Normalization
    为了让gradient尽量“走直线”,需要在横向和纵向上设置不同的learning rate,并且learning rate的比例应该和对应feature的比例相同,如果有很多feature(远多于两个)的话,这是一件非常麻烦的事情。而error surface为正圆形的话,在所有方向上设置一个learning rate就可以让gradient“走直线”,会让training容易得多。
  2. 如何做Feature Scaling
    从上面我们知道了Feature Scaling带来的好处,接下来我们介绍经典的Feature Scaling的做法。先给出一组training data,如下图:
    李宏毅深度学习笔记:Batch Normalization
    现在给定RRNN维的training data,分别为 x1x^1, x2x^2, x3x^3, … , xRx^Rxijx_i^j 表示第jj个training data(xjx^j)的第ii维元素(i=1,...,N,j=1,...,R)(i = 1, ..., N , j = 1, ... ,R),如下图:
    李宏毅深度学习笔记:Batch Normalization
    对第 ii(i=1,...,N)( i = 1, ... , N ),先求所有training data这一维(即绿色框圈住的部分,绿色框从上向下平移求每一维)的平均值 mim_i 和标准差 σi\sigma_i,即mi=j=1Rxijm_i =\sum_{j=1}^R x_i^jσi=j=1N(xijmi)2R\sigma_i = \sqrt{\frac{\sum_{j=1}^N(x_i^j - m_i)^2}{R}},这样就求出了NN个平均值和标准差。
    求出每一维的平均值和标准差后,对所有training data的所有元素按公式 xij=xijmiσi,(i=1,...,N,j=1,...,R)x_i^j = \frac{x_i^j - m_i}{\sigma_i}, (i = 1, ..., N , j = 1, ... ,R)进行更新,更新之后所有维度的平均值均为00,标准差均为11
  3. 总结,做了Feature Scaling之后梯度下降会比不做会收敛地更快。

相关文章: