批归一化(Batch Normalization)

2020.10.30 学习总结

批 归 一 化 论 文 的 学 习 批归一化论文的学习
  Batch Normalization是Google在2015年提出来的,现在已经成为了深度学习中比较常用的方法了。批归一化就是对每个mini-batch进行归一化处理,原文应用了一个叫做内部协变量偏移的名词,在神经网络训练的过程中从每一层输出的值之间分布的变化,而这种变化又受到前一层输入到这一层值之间分布的影响,我们称之为内部协变量偏移。
  这种处理方法能够能够允许我们使用更大的学习率,也不用太在意权值得初始化。同时它还具有正则化的作用,还能减少某些情况下dropout的使用。在当时,把这种方法应用到最好的图像分类模型,只用了不到原来1/10的训练次数,就能达到和原来相同的准确率。这就是批归一化的作用,通过减少内部协变量偏移来加速网络的训练。
  对于d维输入的x={x1,x2,…,xd},作如下处理
批归一化(Batch Normalization)
也就是对它做一个去均值除方差的操作。
  这种操作后得到的数据都服从均值为0,方差为1的分布,但是这种分布也不一定是最好的。于是就有了下面的方法
批归一化(Batch Normalization)
主要分为四个步骤
1.求每一个训练批次数据的均值
2.求每一个训练批次数据的方差
3.使用求得的均值和方差对该批次的训练数据做归一化,使其服从0~1分布。其中ε是一个非常小的常数。
4.乘以γ调整数值大小,再加上β增加偏移后得到yi,这里的γ是尺度因子,β是平移因子。这一步是BN的精髓,由于归一化后的xi基本会被限制在正态分布下,使得网络的表达能力下降。而加上这个线性操作是为了让神经网路自己学习出什么样的分布才是最好的。
  下面是训练和测试阶段
批归一化(Batch Normalization)
训练过程中对每一层的输入先做一个归一化处理再做一个线性变换,再去优化每一层的权值,γ和β,而在测试阶段我们用到的均值和方差是对训练过程中的均值和方差求平均得到的。

最后总结一下批归一化的作用

1.改善流经网络的梯度
2.允许更大的学习率,大幅提高训练速度: 你可以选择比较大的初始学习率,让你的训练速度飙涨。以前还需要慢慢调整学习率,甚至在网络训练到一半的时候,还需要想着学习率进一步调小的比例选择多少比较合适,现在我们可以采用初始很大的学习率,然后学习率的衰减速度也很大,因为这个算法收敛很快。当然这个算法即使你选择了较小的学习率,也比以前的收敛速度快,因为它具有快速训练收敛的特性;
3.减少对初始化的强烈依赖
4.改善正则化策略:作为正则化的一种形式,轻微减少了对dropout的需求
,也不用去理会过拟合中drop out、L2正则项参数的选择问题,采用BN算法后,你可以移除这两项了参数,或者可以选择更小的L2正则约束参数了,因为BN具有提高网络泛化能力的特性;
5.再也不需要使用使用局部响应归一化层了(局部响应归一化是Alexnet网络用到的方法,搞视觉的估计比较熟悉),因为BN本身就是一个归一化网络层;
6.可以把训练数据彻底打乱(防止每批训练的时候,某一个样本都经常被挑选到,文献说这个可以提高1%的精度)。