为什么LN?layer normalization的原理及特点

1 BN(batch normalization) 存在的问题

BN针对单个神经元进行,利用网络训练时一个 mini-batch 的数据来计算该神经元的均值和方差, 因而称为 Batch Normalization。

  • BN是按照样本数计算归一化统计量的,当样本数很少时,比如说只有4个。这四个样本的均值和方差不能反映全局的统计分布息,所以基于少量样本的BN的效果会变得很差。
  • 对于RNN来说,RNN可以展开成一个隐藏层共享参数的MLP,随着时间片的增多,展开后的MLP的层数也在增多,最终层数由输入数据的时间片的数量决定。在一个batch中,通常各个样本的长度都是不同的,测试时当我们遇到长度大于任何一个训练样本的测试样本,无法找到保存的归一化统计量,所以BN无法运行。

LN 针对单个训练样本进行,不依赖于其他数据,因此可以避免 BN 中受 mini-batch 数据分布影响的问题,可以用于 小 mini-batch 场景、动态网络场景和 RNN,特别是自然语言处理领域。此外,LN 不需要保存 mini-batch 的均值和方差,节省了额外的存储空间。

但是,BN 的转换是针对单个神经元可训练的——不同神经元的输入经过再平移和再缩放后分布在不同的区间,而 LN 对于一整层的神经元训练得到同一个转换——所有的输入都在同一个区间范围内。如果不同输入特征不属于相似的类别(比如颜色和大小),那么 LN 的处理可能会降低模型的表达能力。

2 LN (layer notmalization)

LN是一个独立于batch size的算法,所以无论样本数多少都不会影响参与LN计算的数据量,从而解决BN的两个问题。

隐层节点数量 H H H,网络层数 l l l,LN的归一化统计量 μ \mu μ σ \sigma σ

μ l = 1 H ∑ i = 1 H a i l \mu^l = \frac{1}{H}\sum_{i=1}^{H}{a_i^l} μl=H1i=1Hail

σ l = 1 H ∑ i = 1 H ( a i l − μ l ) 2 \sigma^l = \sqrt{\frac{1}{H}{\sum_{i=1}{H}{(a_i^l-\mu^l)}^2}} σl=H1i=1H(ailμl)2

上面统计量的计算是和样本数量没有关系的,它的数量只取决于隐层节点的数量,所以只要隐层节点的数量足够多,我们就能保证LN的归一化统计量足够具有代表性。归一化后的值

a ^ l = a l − μ l ( σ l ) 2 + ϵ \hat{a}^l = \frac{a^l-\mu^l}{\sqrt{(\sigma^l)^2 + \epsilon}} a^l=(σl)2+ϵ alμl

类似BN,LN同样需要一组参数来保证归一化操作不会破坏之前的信息,在LN中这组参数叫做增益(gain) g g g和偏置(bias) b b b。假设激活函数为 f f f,最终LN的输出为:

h l = f ( g l ⋅ a ^ l + b l ) h^l = f(g^l · \hat{a}^l+ b^l) hl=f(gla^l+bl)

欢迎关注微信公众号(算法工程师面试那些事儿),本公众号聚焦于算法工程师面试,期待和大家一起刷leecode,刷机器学习、深度学习面试题等,共勉~

算法工程师面试那些事儿

猜你喜欢

转载自blog.csdn.net/qq_40006058/article/details/121620252