其实关于BN层,我在之前的文章“梯度爆炸”那一篇中已经涉及到了,但是鉴于面试经历中多次问到这个,这里再做一个更加全面的讲解。
Internal Covariate Shift(ICS)
BN解决的问题
【ICS带来的收敛速度慢】
因为每一层的参数不断发生变化,从而每一层的计算结果的分布发生变化,后层网络不断地适应这种分布变化,这个时候会让整个网络的学习速度过慢。
【梯度饱和问题】
因为神经网络中经常会采用sigmoid,tanh这样的饱和激活函数(saturated actication function),因此模型训练有陷入梯度饱和区的风险。解决这样的梯度饱和问题有两个思路:第一种就是更为非饱和性激活函数,例如线性整流函数ReLU可以在一定程度上解决训练进入梯度饱和区的问题。另一种思路是,我们可以让激活函数的输入分布保持在一个稳定状态来尽可能避免它们陷入梯度饱和区,这也就是Normalization的思路。
Batch Normalization
测试阶段的BN
BN层的好处有哪些
BN与其他normalizaiton的比较
【weight normalization】Weight Normalization是对网络权值进行normalization,也就是L2 norm。
相对于BN有下面的优势:
- WN通过重写神经网络的权重的方式来加速网络参数的收敛,不依赖于mini-batch。BN因为依赖minibatch所以BN不能用于RNN网路,而WN可以。而且BN要保存每一个batch的均值方差,所以WN节省内存;
- BN的优点中有正则化效果,但是添加噪音不适合对噪声敏感的强化学习、GAN等网络。WN可以引入更小的噪音。
但是WN要特别注意参数初始化的选择。
【Layer normalization】更常见的比较是BN与LN的比较。BN层有两个缺点:
- 无法进行在线学习,因为在线学习的mini-batch为1;LN可以
- 之前提到的BN不能用在RNN中;LN可以
- 消耗一定的内存来记录均值和方差;LN不用
但是,在CNN中LN并没有取得比BN更好的效果。
参考链接:
- https://zhuanlan.zhihu.com/p/34879333
- https://www.zhihu.com/question/59728870
- https://zhuanlan.zhihu.com/p/113233908
- https://www.zhihu.com/question/55890057/answer/267872896