Note2.4 机器学习:Batch Normalization Introduction
Batch Normalization(批标准化,BN)通过标准化数据的操作,使得损失函数的优化地形(optimization landscape)更加平滑,从而达到更好地训练效果。BN常用于卷积神经网络(CNN)等。
1.原理
一般的gradient descend局限很大,RMSProp、small Batch、momentum等方法都是通过改变参数更新的策略实现优化,而Batch Normalization直接改变error surface。
使各个feature处于同一范围的方法有很多,统称Feature Normalization,以下呈现的只是其中一种。
2.实现
术语
standard deviation:标准差,variance:方差,tilde:波浪符号,converge:收敛
不仅是feature要标准化,中间的每层都需要标准化。标准化放在激活函数之前和之后效果相差不大。但是如果选择sigmoid,最好在sigmoid前标准化,因为sigmoid为s型,标准化后数据都在0附近,计算的gradient会更大,收敛会更快;否则收敛非常慢。
注意:下面标准化涉及的运算都是element-wise,对每个元素分别操作,而不是对向量处理。(比如求μ和σ)
一个有趣的事情是标准化后,Z1和后面所有的中间值关联起来了(图中标注了三角形的量)。但实际上不会选择full batch,把所有data一起丢进去训练,而是采用mini batch,所以这个方法叫做Batch Normalization。注意:batch size必须较大,因为只有batch里面的data足以表示整个训练集的分布时,才能用batch的Normalization近似代替训练集的Normalization。
这一步表示γ和
作element-wise的乘法再加上β,目的:标准化强制数据均值为0、方差为1,但这种分布可能不符合实际任务的需求(例如,某些特征可能需要非线性的分布),通过 γγ 和 ββ 重新缩放和平移,模型能够自适应地学习适合当前任务的分布,避免标准化对特征的过度约束。
开始时一般γ设为全1的向量,而β设为零向量。
3.实际运行的处理
上述方法中都是对batch标准化,但在inference(即testing)阶段,很可能没有batch,而是一个个单独的数据,所以必须调整策略。
事实上在testing时并不需要自己处理,pytorch内部已经处理好了:使用moving average代替average。moving average即移动平均:一种通过使用过去若干时间段的平均值计算得出的平均值。移动平均值会定期变化,最早的数值会被基于最新数据的数值所替代。
4.实验结果
蓝色的点表示相同的错误率,从图中可以看出Batch Normalization确实加快了训练速度。
粉色的线表示先进行Batch Normalization后sigmoid的结果,至于为什么没有先sigmoid,后Batch Normalization,作者说收敛速度太慢,训练不起来。
5. 有效性的解释
6.拓展:其他Normalization方法
BN不是唯一的Feature Normalization的方法,方法非常多: