其实关于BN层,我在之前的文章“梯度爆炸”那一篇中已经涉及到了,但是鉴于面试经历中多次问到这个,这里再做一个更加全面的讲解。
【ICS带来的收敛速度慢】
因为每一层的参数不断发生变化,从而每一层的计算结果的分布发生变化,后层网络不断地适应这种分布变化,这个时候会让整个网络的学习速度过慢。
【梯度饱和问题】
因为神经网络中经常会采用sigmoid,tanh这样的饱和激活函数(saturated actication function),因此模型训练有陷入梯度饱和区的风险。解决这样的梯度饱和问题有两个思路:第一种就是更为非饱和性激活函数,例如线性整流函数ReLU可以在一定程度上解决训练进入梯度饱和区的问题。另一种思路是,我们可以让激活函数的输入分布保持在一个稳定状态来尽可能避免它们陷入梯度饱和区,这也就是Normalization的思路。
【weight normalization】Weight Normalization是对网络权值进行normalization,也就是L2 norm。
相对于BN有下面的优势:
但是WN要特别注意参数初始化的选择。
【Layer normalization】更常见的比较是BN与LN的比较。BN层有两个缺点:
但是,在CNN中LN并没有取得比BN更好的效果。
参考链接: