标题: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
随机梯度下降法(SGD)是训练深度网络的首选,利用momentum 和Adagrad等来达到最佳的性能。尽管随机梯度下降法对于训练深度网络简单高效,但是需要我们人为的去选择参数,比如学习速率、初始化参数、权重衰减系数、Dropout比例,等等。这些参数的选择对训练结果至关重要,以至于我们很多时间都浪费在这些的调参上。
神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低。
输入层的数据,已经人为的的归一化,后面网络每一层的输入数据分布是一直在发生变化的,前面层训练参数的更新将导致后面层输入数据分布的变化,因此必然会引起后面每一层输入数据分布的改变。而且,网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。我们把网络中间层在训练过程中,数据分布的改变称之为:“Internal Covariate Shift”。BN的提出,就是要解决在训练过程中,中间层数据分布发生改变的情况。
BN步骤:
- 求每一个小批量训练数据的均值;
- 求每一个小批量训练数据的方差;
- 使用求得的均值和方差对该批次的训练数据做归一化,获得0-1分布。其中ε 是为了避免除数为0时所使用的微小正数;
- 尺度变换和偏移:将xi乘以γ调整数值大小,再加上β 增加偏移后得到yi,这里的γ 是尺度因子,β是平移因子。这一步是BN的精髓,由于归一化后的xi 基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:γ , β 。γ和β是在训练时网络自己学习得到的。
Batch Normalization允许训练使用更高的学习率
Batch Gradient Descent(批处理的随机梯度下降)使用多个梯度的均值来更新权重,用相对少的训练次数遍历完整个训练集,也正是因为平均了多个样本的梯度,许多样本对神经网络的贡献就被其他样本平均掉了,相当于在每个epoch中,训练集的样本数被缩小了。batch中每个样本的差异性越大,这种弊端就越严重。
而BN首先是把所有的samples的统计分布标准化,降低了batch内不同样本的差异性,然后又允许batch内的各个samples有各自的统计分布。所以,BN的优点自然也就是允许网络使用较大的学习速率进行训练,加快网络的训练速度(减少epoch次数),提升效果。
Batch Normalization防止过拟合
批归一化可帮助我们避免 x 的值在经过非线性激活函数之后陷入饱和的现象。也就是说,批归一化能够确保激活都不会过高或过低,确保不会梯度爆炸或者梯度消失。这有助于权重学习——如果不使用这一方案,某些权重可能永远不会学习。这还能帮助我们降低对参数的初始值的依赖。
批归一化也可用作正则化(regularization)的一种形式,有助于实现过拟合的最小化。使用批归一化时,我们无需再使用过多的 dropout;这是很有助益的,因为我们无需担心再执行 dropout 时丢失太多信息。但是,仍然建议组合使用这两种技术。
实验与结果
本文在MNIST手写数字识别的数据集上进行实验,结果显示没有用BN的原始网络的分布随着时间的变化都有显著变化,这使得后续隐藏层的训练复杂化。
而进行了批归一化(BN)的网络随着训练的进行中的分布更加稳定,使得训练速度更快,精度更高。
本文在Inception单网络上进行BN实验,结果如图2和图3所示,结果显示在BN-基线和BN-x5中加大学习率可以显著提高训练速度,而进一步提高学习率(BN-x30)会导致模型最初的训练有点慢,但达到了更高的精度。
通过将多个训练过的模型与批归一化(BN)相结合进行实验,结果比图像网络上最著名的系统表现得更好。
参考文献
[1] Ioffe, S. , and C. Szegedy . “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.” JMLR.org (2015).
[2] https://baijiahao.baidu.com/s?id=1612936475591914473&wfr=spider&for=pc
[3] https://www.cnblogs.com/shona/p/12181061.html
[4]https://blog.csdn.net/vict_wang/article/details/88075861