李宏毅深度学习笔记:Batch Normalization
Batch Normalization的paper:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
Feature Scaling
Feature Scaling指特征缩放,是将不同的feature缩放到相同的scale上。这里scale指的是取值范围。
-
Feature Scaling的对training的影响
下图是一个简单的例子:
在上图中,和是模型输入的不同feature,和是weight,是bias,是模型的输出,即 。那么最终会影响到Loss。模型的输入和的scale差别很大,的各个元素的取值都远大于,容易理解,这会导致和有相同变化时,对的影响远大于,并最终导致对Loss的影响远大于,error surface如下图:
上图说明了和对Loss的影响,可以看出,Loss在方向的梯度gradient即斜率大于在方向上的,说明对Loss的影响大于 。
如果现在对和做Feature Scaling,如下图:
现在和有了相同的scale,所以和对的影响也就是对最终Loss的影响就相同了,error surface如下图:
可以看出error surface比较接近正圆形。
那么椭圆形和正圆形有什么不同呢?在做梯度下降的时候,如果是椭圆形,gradient在不同方向上差别比较大,这会让training变得不容易。为了让gradient能到达尽快到达0,也就是Loss局部最优,需要让gradient 尽量“走直线”,如下图红线所示:
为了让gradient尽量“走直线”,需要在横向和纵向上设置不同的learning rate,并且learning rate的比例应该和对应feature的比例相同,如果有很多feature(远多于两个)的话,这是一件非常麻烦的事情。而error surface为正圆形的话,在所有方向上设置一个learning rate就可以让gradient“走直线”,会让training容易得多。 - 如何做Feature Scaling
从上面我们知道了Feature Scaling带来的好处,接下来我们介绍经典的Feature Scaling的做法。先给出一组training data,如下图:
现在给定个维的training data,分别为 , , , … , 。 表示第个training data()的第维元素,如下图:
对第 维 ,先求所有training data这一维(即绿色框圈住的部分,绿色框从上向下平移求每一维)的平均值 和标准差 ,即,,这样就求出了个平均值和标准差。
求出每一维的平均值和标准差后,对所有training data的所有元素按公式 进行更新,更新之后所有维度的平均值均为,标准差均为。 - 总结,做了Feature Scaling之后梯度下降会比不做会收敛地更快。