为什么Transformer要用LayerNorm?

论坛 期权论坛 爱问     
0sc8_   2022-5-24 03:46   5760   0
其实已经有一个相似的问题在很早之前提出过了。transformer 为什么使用 layer normalization,而不是其他的归一化方法?
这里我狗尾续貂,总结下看到的论文和一些知友的观点。如果有错请一定指出。
PS:我还在努力找暑期实习,请各位巨巨收留!!!!
太长不看版本

这个问题可以分解成为两个问题:1. 为啥用LN 2. 为啥不用其他(其实就是为啥不用BN)

  • 为啥用LN:一开始大家发现BN在RNN上效果不好,提出了LN来改进,后面就变成NLP task的default config了,但是LN为啥work还没研究清楚。一般认为是和BN一样用来稳定输入分布,加速收敛。  Tobias lee巨巨组里面文章就研究了LN的其他作用:相比于稳定前向输入分布,反向传播时mean和variance计算引入的梯度更有用,可以稳定反向传播时loss对输入的梯度,还取了个名字叫gradient normalization。另一方面,  曹越巨巨组的ICCV workshop文章也说了LN特别适合处理变长数据,因为是对channel维度做操作(这里指NLP中的hidden维度),和句子长度和batch大小无关,所以NLP task上大家首选LN了。
  • 为啥不用BN:TniL巨巨就解读了PowerNorm这篇文章,说Transformer中BN表现不太好的原因可能在于CV和NLP数据特性的不同,对于NLP数据,前向和反向传播中,batch统计量及其梯度都不太稳定。
那对于处理CV data的VIT,可不可以用BN呢?Leveraging Batch Normalization for Vision Transformers里面就说了:
其实可以的,但是直接把VIT中的LN替换成BN,容易训练不收敛,原因是FFN没有被Normalized,所以还要在FFN block里面的两层之间插一个BN层。(可以加速20% VIT的训练)
除此以外,有位知友的观点我也觉得很认同。BN用在CNN上是在channel维度上统计BxNxW上的均值和方差。这是因为同一个通道的特征图都是由同一个卷积核产生,所以分布肯定要相对一致。而BN用在NLP数据上,不同句子在同一个位置的分布大概率是不一样的,应用BN来约束其实没啥意义。
细说版本

当然这个问题还没有啥定论,包括BN和LN为啥能work也众说纷纭。这里先列出一些相关的研究论文。

  • Leveraging Batch Normalization for Vision Transformers
  • PowerNorm: Rethinking Batch Normalization in Transformers
  • Understanding and Improving Layer Normalization
Understanding and Improving Layer Normalization

这篇文章主要研究LN为啥work,除了一般意义上认为可以稳定前向输入分布,加快收敛快,还有没有啥原因。最后的结论有:

  • 相比于稳定前向输入分布,反向传播时mean和variance计算引入的梯度更有用,可以稳定反向传播的梯度(让 梯度的均值趋于0,同时降低其方差,相当于re-zeros和re-scales操作),起名叫gradient normalization(其实就是ablation了下,把mean和variance的梯度断掉,看看效果)
  • 去掉 gain和bias这两个参数可以在很多数据集上有提升,可能是因为这两个参数会带来过拟合,因为这两个参数是在训练集上学出来的
注:Towards Stabilizing Batch Statistics in Backward Propagation 也讨论了额外两个统计量:mean和variance的梯度的影响。实验中看到了对于小的batch size,在反向传播中这两个统计量的方差甚至大于前向输入分布的统计量的方差,其实说白了就是这两个与梯度相关的统计量的不稳定是BN在小batch size下不稳定的关键原因之一。





PowerNorm: Rethinking Batch Normalization in Transformers

这篇文章就主要研究Transformer中BN为啥表现不太好。研究了训练中的四个统计量:batch的均值和方差,以及他们的梯度的均值和方差。对于batch的均值和方差,计算了他们和running statistics(就是用移动平均法累积的均值和方差,见前面的文章)的欧氏距离。可以看到NLP任务上(IWSLT14)batch的均值和方差一直震荡,偏离全局的running statistics,而CV任务也相对稳定。对于他们梯度的均值和方差,研究了其magnitude(绝对值),可以看到CV任务上震荡更小,且训练完成后,也没有离群点。
总结来说,Transformer中BN表现不太好的原因可能在于CV和NLP数据特性的不同,对于NLP数据,前向和反向传播中,batch统计量及其梯度都不太稳定。




备注:为什么要让mini-batch的statistics拟合running statistics?
来源:Rethinking “Batch” in BatchNorm
之前的文章讲过,BN存在训练和测试的不一致的问题,下图表明,在小batch size情况下,这种问题很严重,也就是说在evaluate时,使用验证集的mini-batch statisitics和训练集学到的population statistics的差异会大大影响性能。在大batch size的时候,这种差异反而会起到正则化的作用。但是一般都是考虑小batch size的情况,所以还是希望batch的统计量能够尽量接近running statistics。


Leveraging Batch Normalization for Vision Transformers



刚刚讲了对于NLP data,为啥Transformer的BN表现不好。这篇文章就是去研究对于CV data,VIT中能不能用BN呢。有一些有意思的观点:

  • LN特别适合处理变长数据,因为是对channel维度做操作(这里指NLP中的hidden维度),和句子长度和batch大小无关
  • BN比LN在inference的时候快,因为不需要计算mean和variance,直接用running mean和running variance就行
  • 直接把VIT中的LN替换成BN,容易训练不收敛,原因是FFN没有被Normalized,所以还要在FFN block里面的两层之间插一个BN层。(可以加速20% VIT的训练)
其他知友的观点

我个人还是比较同意有个知友的观点:也就是说,对于NLP data来说,batch上去做归一化是没啥意义的,因为不同句子的同一位置的分布大概率是不同的。
给我的文章引流版本

关于归一化这个主题,我写了一些文章,讲的更细~请大家指教!
Transformer中的归一化(一):什么是归一化&为什么要归一化
Transformer中的归一化(二):机器学习中的特征归一化方法
Transformer中的归一化(三):特征归一化在深度神经网络的作用
Transformer中的归一化(四):BatchNormalization的原理、作用和实现
Transformer中的归一化(五):Layer Norm的原理和实现 & 为什么Transformer要用LayerNorm
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP