【NLP】Layer-Normalization

最近深入batch normalization的研究,发现了一系列Normalization方法的富矿,深有收获。

从2015年的BN开始,2016年出了LN(layer normalization)和IN(Instance Normalization),2018年也就是今年,Kaiming提出了GN(Group normalization),成为了ECCV2018最佳论文提名。

论文标题:Layer Normalization

论文链接:https://arxiv.org/abs/1607.06450v1

code : https://github.com/ryankiros/layer-norm

从BN -> LN -> IN ->GN,一系列发展,容我慢慢道来。此文主要讨论Layer-Normalization

Layer-Normalization
对于Normalization不了解的同学请移步《batch normalization》

LN是Hinton及其学生提出来的,所以这个分量足以我们好好讨论。

BN虽然带来了很多好处,不过BN的缺点还是有一些的:

    1,BN特别依赖Batch Size;当Batch size很小的适合,BN的效果就非常不理想了。在很多情况下,Batch size大不了,因为你GPU的显存不够。所以,通常会有其他比较麻烦的手段去解决这个问题,比如MegDet的CGBN等;

    2,BN对处理序列化数据的网络比如RNN是不太适用的;So,BN的应用领域减少了一半。

    3,BN只在训练的时候用,inference的时候不会用到,因为inference的输入不是批量输入。这也不一定是BN的缺点,但这是BN的特点。

在前面谈到,标准化的作用就是改良数据分布。

BN的操作是,对同一批次的数据分布进行标准化,得出的均值方差,其可信度受batch size影响。很容易可以想到,如果我们对小batch size得出均值方差,那势必和总数据的均值方差有所偏差。这样就解释了BN的第一个缺点:BN特别依赖Batch Size;

LN的操作类似于将BN做了一个“转置”,对同一层网络的输出做一个标准化。注意,同一层的输出是单个图片的输出,比如对于一个batch为32的神经网络训练,会有32个均值和方差被得出,每个均值和方差都是由单个图片的所有channel之间做一个标准化。这么操作,就使得LN不受batch size的影响。同时,LN可以很好地用到序列型网络如RNN中。同时,LR在训练过程和inference过程都会有,这就是和BN很大的差别了。

还有一个叫做Weight Normalization的操作,和LN有着同样的特点。WN是在训练过程中,对网络参数进行标准化。这也是一个很神奇的操作。不过效果表现上,是被LN虐了。还不足以成为主流的标准化方法,所以在这里只是稍微提一下。

本文主要是针对 batch normalization 存在的问题 提出了 Layer Normalization 进行改进的。

这里首先来回顾一下 batch normalization : 
对于前馈神经网络第 l 隐层,神经元的输入为 a, 激活函数为 f, 激活函数输出为 h。权值 w 通过 SGD学习得到。 如下面的公式所示:

深度学习中的一个挑战就是对于上面公式中 一层的权值 w 的梯度 高度依赖于前一层神经元的输出,特别是当这些输出的改变高度相关的时候。(梯度容易受样本数据的影响,导致权值难以快速的收敛,一会向东,一会向西,走来走去,走了半天也没走多少路啊,这样走到全局最优值要走到哪天。这个问题有个名字,叫 covariate shift)。 针对此问题 [Ioffe and Szegedy, 2015] 提出了 Batch normalization 来降低这个 covariate shift 的影响。对于每个隐层的神经元,我们在所有的训练样本上归一化该神经元的输入。

在整个训练样本上计算均值方差,然后对神经元的输入进行归一化。由于对整个训练样本计算均值方差不太有效率(对于训练来说),所以提出了 在最小训练批次上估计 均值方差。 current mini-batch 。 这个约束导致Batch normalization 难以应用于 recurrent neural networks。

3 Layer normalization 
针对前面提到的 Batch normalization 的问题,我们提出了 Layer normalization。

注意到一层输出的改变会产生下一层输入的高相关性改变,特别是当使用 ReLU,其输出改变很大。那么我们可以通过固定一层神经元的输入均值和方差来降低 covariate shift 的影响。

结果
Hinton的文章里,并没有拿LN和BN做比较,它选的比较对象是WN(挑软柿子捏的感觉)。在Kaiming ECCV2018的paper里,实实在在拿LN和BN做了比较,结果是在较大batch size的时候BN的表现比LN好很多。BN也没那么好欺负的,不然怎么大大小小的主流网络都在用BN呢。、

上面公式中 H 是 一层神经元的个数。这里一层网络 共享一个均值和方差,不同训练样本对应不同的均值和方差,这是和 Batch normalization 的最大区别。

Layer normalization 对于recurrent neural networks 的帮助最大。

Layer normalization 对于 Convolutional Networks 作用不是很大,后续研究可以提高其作用。

你可能感兴趣的:(NLP)