Training Deep Neural Networks is complicated by the fact that the distribution os each layer’s inputs changes during training, as the parameters of the previous layers change
作者指出,深度网络的一直都非常困难,主要是由于在训练的过程中,每一层的输入数据的分布发生了变化。在训练的时候,网络结构需要不断的去适应由于输入数据分布带来的变化。
随着网络的深度加深,训练会越来越困难,改善方法
- 激活函数:sigmoid,tanh函数会存在左右饱和问题,从而Hiton推出了ReLU函数可以有效的解决反向传播过程中的梯度消失
- Batch Normalization: 归一化(本文内容)
- Residual Network:通过增加一个skip connection(Identity mapping),使得底层的信息和高层的信息能够建立起更加直接的联系
出发点
论文首先指出了mini-batch SGD的好处:
- batch越大,效果越好
- m个样本并行计算,要比m个样本单独计算,效率要高很多
然后指出了SGD的缺点:
- 模型的超参数,非常难调优:需要对初始值和学习率非常细致的tune,难度比较大
进一步分析,得出造成调优困难的原因:
- 每层结构的数据输入,都会受到前面所有层的参数的影响,从而会导致数据的分布总是发生变化(称为’Internal Covariate shift’)。很小的参数变换,都会对后面的数据输入造成很大的扰动,层越深,这种扰动越大(类似于混沌)。
Q: 如果数据的分布不发生改变,真的会是的网络的训练变得更简单吗?
A: 首先,考虑机器学习领域中的一个很重要的假设:
IID独立同分布假设:如果训练数据与测试数据满足相同的分布,那么通过神经网络训练出来的模型,能够在测试集上同样取得很好的效果。
同样,在训练的过程中,如果每一层的数据输入保持稳定的数据分布,那么对于网络的训练肯定是有帮助的。
在机器学习中,常用的数据处理的方法“白化操作”(whiten),例如PCA降维等方法,可以有效的提升机器学习的效果。而“白化操作”本质上,就是对输入数据的分布进行改变,使其变为均值为0,单位方差的正态分布。
从而,作者认为如果对每一层的数据输入,固定其分布,可定能够加快深度模型的训练。
BN思想
在训练的过程中,由于模型的参数不断在变化,导致每一层结构的数据输入的分布都会发生变化(Internal Covariate Shift),作者提出了一种改善该问题的机制(Batch Normalization):
归一化(固定每一层数据输入的均值和方差)
Q:Batch Normalization带来了哪些好处?
A:
- 加快训练速度
- 对网络中信息的流动带来好处,使得网络参数的依赖相关性减弱
- 可以使用更大的学习率
- BN相当于正则化,从而可以减弱Dropout的作用,或者去掉dropout操作
- BN使得使用哪些带有饱和性质的激活函数构建网络,如sigmoid,tanh等
Q:Batch Normalization为什么使得带有饱和性质的激活函数,可以应用到很深的网络结构中?
A: 首先对于正太分布来说:
范围 | 占比 |
---|---|