批量归一化Batch Norm
标准化输入特征,使其平均值为0,方差为1,这种标准化可以很好地与我们的优化器配合使用,因为它可以将参数的量级进行统一,使网络快速收敛。
批量规范化(batch normalization)这是一种流行且有效的技术,可持续加速深层网络的收敛速度。
在未添加BN层之前,网络的每一层要做的事就是得到z=wx+b,再使用激活函数激活z,得到输出g(z),也就是下一层的输入
添加BN层之后,一般在卷积层或全连接层之后,激活函数之前增加BN层,BN层首先计算前面的卷积或全连接层的输出的均值和标准差,再将输出按 (元素-均值)/标准差 ,得到均匀的数据分布,再将处理后的数据利用学习到的两个参数进行拉伸和平移,经过这种处理后的数据再送入激活函数
添加了BN层的网络,每层要学习的参数变成了4个,卷积或全连接层的w和b,BN层的拉伸和偏移参数。由于在BN层每个元素会减去均值,所以b实际上无需在意。
这些参数都可以反向求梯度,采用SGD进行参数更新
BatchNorm的用处
1.通过将隐藏层的值进行归一化,使网络加速收敛
2.BN减少后续层对前面层的依赖
训练模型对猫的识别,采用左侧数据集得到的模型不能应用于右侧数据集,因为两数据集数据分布不同。
协变量:当数据分布发生变化,就必须重新训练学习算法
对于第三层隐藏层来说,要不断地学习更新参数将作为输入的a1,a2,a3,a4映射到一个正确的y_hat,但是在网络学习中,前面的层的参数也在变化,导致第三层隐藏的输入的数据一直也在变化,这涉及到协变量问题,通过引入BN层,可减少这些隐藏单元值的分布的不稳定性,使数据分布一直保持相同的均值和方差,减少了后面层对前面层的依赖,允许网络每一层独立学习
3.BN有轻微正则化效果
使用的batch_size越小,噪声越大,正则化效果越大
-
在模型训练过程中,批量规范化利用小批量的均值和标准差,不断调整神经网络的中间输出,使整个神经网络各层的中间输出值更加稳定。
-
批量规范化在全连接层和卷积层的使用略有不同。
-
批量规范化层和暂退层一样,在训练模式和预测模式下计算不同。
-
批量规范化有许多有益的副作用,主要是正则化。另一方面,”减少内部协变量偏移“的原始动机似乎不是一个有效的解释