在学习Layer Normalization之前建议大家先自行学习Batch Normalization.
鉴于BN存在一些问题,LayerNormalzation才得以提出,并且LayerNormalization可以直接应用于recurrent neural networks,并且也解决了BN当batch size=1不能进行在线学习,在线预测的问题。
layer normalization和BN的整个思想是相近的,不同的是应用场景和计算均值、方差的方法是不同,但是总体而言都是通过归一化来加快训练速度,找到更佳的优化点来提升效果的。
无论是BN还是LN都是基于“covariate shift”的问题而设计的。不同于BN,LN进行normalization的数据,均值和方差的计算集合是同一层所有隐节点,公式如下:
其中,H为隐层l的节点数量,
为均值,
为方差,
为隐层l的节点i的未经过激活函数的初始值,在RNN中,
可以表示如下:
其中,
为当前时刻的输入,
为上一时刻的隐层输出。
在RNN中随着t的增长,通常会出现梯度消失和梯度爆炸的问题,这是由于时间维展开,梯度不稳定,或者出现小于1的情况,或者出现大于1的情况,在链式法则的作用下而导致的。而如果采用layer normalized RNN,归一化项会re-scaling inputs to a layer, 使得隐层和隐层之间的梯度计算更稳定。