【NLP】Layer-Normalization

本文深入探讨了LayerNormalization(LN)的概念,对比BatchNormalization(BN),解析了LN如何克服BN的局限,尤其是在序列化数据处理和小batchsize场景下的优势。同时,文章分析了LN在RNN中的应用价值及在卷积网络中的潜在提升空间。

最近深入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 作用不是很大,后续研究可以提高其作用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值