NLP任务中,layer-norm比BatchNorm好在哪里
本文主要是讲一下,为什么NLP任务中,比如Transformer,使用LayerNorm而不是使用BatchNorm
这个问题其实很有意思,理解的最核心的点在于:为什么LayerNorm单独对一个样本的所有单词做缩放可以起到效果。
大家往下慢慢看,我说一下我自己的理解,欢迎大佬拍砖,如果觉得我说的还行,点个在看鼓励一下。
上一个文章有说 BN的使用场景,不适合 RNN这种动态文本模型,有一个原因是因为batch中的长度不一致,导致有的靠后面的特征的均值和方差不能估算。
这个问题其实不是个大问题,可以缓解。我们可以在数据处理的时候,使句子长度相近的在一个batch,就可以了。所以这不是为啥NLP不用BN的核心原因。
回忆一下上个文章中,BN在MLP中的应用。 BN是对每个特征在batch_size上求的均值和方差。记住,是每个特征。比如说身高,比如说体重等等。这些特征都有明确的含义。
但是我们想象一下,如果BN应用到NLP任务中,对应的是对什么做处理?
是对每一个单词!
也就是说,我现在的每一个单词是对应到了MLP中的每一个特征。
也就是默认了在同一个位置的单词对应的是同一种特征,比如:“我/爱/中国/共产党”和“今天/天气/真/不错”
如何使用BN,代表着认为 "我"和“今天”是对应的同一个维度特征,这样才可以去做BN。
大家想一下,这样做BN,会有效果吗?
不会有效果的,每个单词表达的特征是不一样的,所以按照位置对单词特征进行缩放,是违背直觉的。
layner-norm 的特点是什么?layner-norm 做的是针对每一个样本,做特征的缩放。换句话讲,保留了N维度,在C/H/W维度上做缩放。
也就是,它认为“我/爱/中国/共产党”这四个词在同一个特征之下,所以基于此而做归一化。
这样做,和BN的区别在于,一句话中的每个单词都可以归到一个名字叫做“语义信息”的一个特征中(我自己瞎起的名字,大家懂就好),也就是说,layner-norm也是在对同一个特征下的元素做归一化,只不过这里不再是对应N(或者说batch size),而是对应的文本长度。
上面这个解释,有一个细节点,就是,为什么每个单词都可以归到“语义信息”这个特征中。大家这么想,如果让你表达一个句子的语义信息,你怎么做?
最简单的方法就是词语向量的加权求和来表示句子向量,这一点没问题吧。(当然你也可以自己基于自己的任务去训练语义向量,这里只是说最直觉的办法)
上面这个方法就是出于每个单词都是语义信息的一部分这个insight。
但是,我还想问一个问题,CNN中证明BN效果是很好的,NLP中的文本可以类比为图像,为什么BN在图像中效果好,在文本上效果差。
我是这样理解的。还是回到刚才,BN是对单词做缩放,在NLP中,单词由词向量来表达,本质上是对词向量进行缩放。词向量是什么?是我们学习出来的参数来表示词语语义的参数,不是真实存在的。
这就是NLP和图像的一个区别,图像的像素是真实存在的,像素中包含固有的信息。比如说,一张图像,最上面的一行像素,可以归为背景这个特征(这里只是为了理解,CNN做BN是基于整个feature map,而不是单独某一行像素)。
这个理解不确保正确,只是我自己的理解(记得是从一个知乎答案看到的,改天好好找一找)
写到这里,我写文章不是为了推导公式,因为这种推导文章太多了,而是想让大家看了我的文章之后再去看这些推导公式能够更加容易理解。
然后大家有问题的话,私信和我说,我也知道我自己写的哪里有问题,好改进。
点个在看再走呗,老弟
列一下参考资料:
各种Normalization - Mr.Y的文章 - 知乎 https://zhuanlan.zhihu.com/p/86765356
这个文章关于BN和LN如何应用讲解的比较好,就是CNHW
NLP中 batch normalization与 layer normalization - 秩法策士的文章 - 知乎 https://zhuanlan.zhihu.com/p/74516930
这个文章也还行,我在看的时候,看到中间那个图给了我点启发,就是在理解BN的时候,仅仅是在这个时候啊,我们的C,在CNN中是通道数,在理解BN的时候,理解为句子长度,这样”,每个样本通道数为 C,高为 H,宽为 W。对其求均值和方差时,将在 N、H、W上操作,而保留通道 C 的维度。具体来说,就是把第1个样本的第1个通道,加上第2个样本第1个通道 …… 加上第 N 个样本第1个通道,求平均,得到通道 1 的均值“这句话才比较好理解。
一般NLP来说,C为1吧。
模型优化之Layer Normalization - 大师兄的文章 - 知乎 https://zhuanlan.zhihu.com/p/54530247
推荐一下这个文章,总结了对比实验:”这里我们设置了一组对照试验来对比普通网络,BN以及LN在MLP和RNN上的表现“,我还没细看,之后看。
transformer 为什么使用 layer normalization,而不是其他的归一化方法? - pymars的回答 - 知乎 https://www.zhihu.com/question/395811291/answer/1260290120
推荐这个答案,很好