Batch Normalization和Layer Normalization

atch Normalization 也是可以用的,但为什么不用,我们来分析一下问题。

我们回到RNN,RNN其实也能够使用Batch Normalization ,但它为什么不用?是因为变长吗,变长序列我们也是能够padding到同一个长度进行训练的,至于为什么不用,是因为BN对一个Batch中对应位置的分量进行归一化,这就存在一定的问题,因为一个Batch中对应位置的分量不一定有意义,它可能是padding的结果。

实际上LSTM训练的时候我们会把一个batch中的序列按照长度降序,长度短的计算完了就不带它继续计算了,相当于batch size缩小了,batch size越小,BN的意义也就越小了。

在Transformer中也是一样的,比如我们用绝对位置编码的BERT,把序列长度都padding或者裁剪到512,那么不存在变长问题,也不存在LSTM中batch缩小的问题,那么为什么不用BN而是用LN呢?我的理解是因为虽然序列长度一致了,但是好多embedding是没有意义的,有意义的embedding不应该和它们的分布一致,如果BN会导致有意义的embedding损失信息,所以embedding你就自己和自己归一化吧。

所以,可以用BN,但是可能LN更合适。

有想法欢迎讨论。

补充一下,Normalization 的作用很明显,把数据拉回标准正态分布,因为神经网络的Block大部分都是矩阵运算,一个向量经过矩阵运算后值会越来越大,为了网络的稳定性,我们需要及时把值拉回正态分布。

叶兀(爱丁堡大学  人工智能硕士)回答:

这个问题看起来很简单,但是却非常有价值。很多人现在并不关心。

我们要先看一下,不管在哪个维度上做noramlization,本质都是为了让数据在这个维度上归一化,因为在训练过程中,上一层传递下去的值千奇百怪,什么样子的分布都有

BatchNorm就是通过对batch size这个维度归一化来让分布稳定下来。

LayerNorm则是通过对Hidden size这个维度归一化来让某层的分布稳定。

BN取的是不同样本的同一个特征,而LN取的是同一个样本的不同特征

在BN和LN都能使用的场景中,BN的效果一般优于LN,原因是基于不同数据,同一特征得到的归一化特征更不容易损失信息。

但是有些场景是不能使用BN的,例如batchsize较小或者在RNN中,这时候可以选择使用LN,LN得到的模型更稳定且起到正则化的作用。LN能应用到小批量和RNN中是因为LN的归一化统计量的计算是和batchsize没有关系的。

SwitchableNorm是将BN、LN、IN结合,赋予权重,让网络自己去学习归一化层应该使用什么方法

额外补充一点吧。对于NLP任务来说,我们希望的是每句话内分布一致,即hidden size维度,所以LN可以做到;batch的分布norm没有什么意义。

红豆君(中科大 计算机硕士)回答:

1.为什么要用norm?

允许使用更大的学习率,加速训练。有一定的抗过拟合作用,使训练过程更加平稳。

2.为什么是LN?

LN抹杀了不同样本间的大小关系,但是保留了一个样本内不同特征之间的大小关系。这对NLP任务是至关重要的。

下面是详细解释:

BatchNorm是对一个batch-size样本内的每个特征做归一化,LayerNorm是对每个样本的所有特征做归一化。

形象点来说,假设有一个二维矩阵。行为batch-size,列为样本特征。那么BN就是竖着归一化,LN就是横着归一化。

它们的出发点都是让该层参数稳定下来,方便后续的学习。但是也有侧重点。

一般来说,如果你的特征依赖于不同样本间的统计参数,那BN更有效。因为它抹杀了不同特征之间的大小关系,但是保留了不同样本间的大小关系。(CV领域)

而在NLP领域,LN就更加合适。因为它抹杀了不同样本间的大小关系,但是保留了一个样本内不同特征之间的大小关系。对于NLP或者序列任务来说,一条样本的不同特征,其实就是时序上的变化,这正是需要学习的东西自然不能做归一化抹杀。

刚刚解释了LayerNorm的好处,再解释一下BatchNorm在NLP领域为什么不合适。

大家看这个图片,假设有一个三维矩阵【B F E】。B是批次大小,F是序列最大长度,E是每个词的embedding长度。如果是BN,那就是竖着切一刀,如图中红线。

切下来如右图所示。

我们知道NLP任务一大特点就是序列的不等长。在右图中不同的序列长度需要填充0补齐,不过不同序列之间的长度差距过大,做BN时抖动就会特别大。

此外,在预测的时候如果某条样本过长或者过短,偏离了整体的均值与方差,也会导致该样本的预测情况堪忧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值