由于近期在看论文代码的时候看到,在有无BN之后的初始化参数的方式不同 。怎么都想不通原因于是想在重新学习一下Batch Normalization标准化的用法
参考论文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
我之前对归一化的想法就是:将数据变成均值为0方差为1。
机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。而BatchNorm是干啥的呢?BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。
它的作用就相当于将不同的范围的特征值,按照一定的比例(可以是理解为某种映射关系)整合到同一个范围。
BN算法的优点:
(1)你可以选择比较大的初始学习率,让你的训练速度飙涨。以前还需要慢慢调整学习率,甚至在网络训练到一半的时候,还需要想着学习率进一步调小的比例选择多少比较合适,现在我们可以采用初始很大的学习率,然后学习率的衰减速度也很大,因为这个算法收敛很快。当然这个算法即使你选择了较小的学习率,也比以前的收敛速度快,因为它具有快速训练收敛的特性;
(2)你再也不用去理会过拟合中drop out、L2正则项参数的选择问题,采用BN算法后,你可以移除这两项了参数,或者可以选择更小的L2正则约束参数了,因为BN具有提高网络泛化能力的特性;
(3)再也不需要使用使用局部响应归一化层了(局部响应归一化是Alexnet网络用到的方法,搞视觉的估计比较熟悉),因为BN本身就是一个归一化网络层;
(4)可以把训练数据彻底打乱。
那么深度学习的网络框架中归一化是如何一步一步实现的呢?
先上一张图来总体的看一下,他是如何操作的:
先是计算平均值,然后计算方差,再是减掉平均值比上方差,此时就得到了归一化之后的Xi。
也参照了NG说的教程。
所以通过对?和 ?合理设定,规范化过程,即这四个等式,从根本来说,只是计算恒等函数,所以这里的均值和方差可以是0和1,也可以是其他值。知道通过改变?和 ?的值就行了。