Improving Deep Transformer with Depth-Scaled Initialization and Merged Attention
论文地址:
整体思路以及计算方式
论文工作量两点:
解释了深层Transformer为什么难以训练,针对这点,提出了一种新的初始化方式;
第一点:
作者的观点是,深层Transformer难以训练是因为反传的原因,而主要的方面是因为残差和Layer Norm。
回顾Transformer的计算公式:
ro=RC(z,f(z))=LN(r) 其中f表示MHA或FFN,RC表示残差连接,LN表示layer norm。
计算反传可得:
δr=∂r∂oδo=diag(σrg)(I−d1−rr⊤)δoδz=∂z∂rδr=(1+∂z∂f)δr, 其中r表示归一化的输入,所以rr⊤表示方差,注意到δr和方差正相关。
接着作者考虑了如下量:
β=βLN⋅βRC=∥δr∥2∥δz∥2⋅∥δo∥2∥δr∥2 从直觉上看,我们希望β≈1,因为太大会造成梯度消失,太小会造成梯度爆炸。那么β,βLN,βRC的值大概是多少?作者经过分析,给出如下结论:
FFN的β<1,MHA的β>1,包含Self和Cross Attention;
无论是FFN还是MHA,都有βLN<1 , βRC>1;
在Transformer中,βLN∈[0.82,0.86],βRC∈[1.10,1.22]
由于βRC和方差正相关,所以减少方差可以使得βRC更接近1,作者给出的方案是修改初始化方案:
W∈Rdi×do∼U(−γlα,γlα) 其中l表示层数。
第二点:
把NMT中Decoder的Self Attention换成AAN,从而提高解码效率:
MATT(Sl−1)=SAAN(Sl−1)+ATT(Sl−1,HL)Sl=LN(RC(Sl−1,MATT(Sl−1))) 训练以及loss
没有变化。
代码
实验以及适用场景
初始化部分适用于所有场景,解码部分适用于Decoder;实验测试了NMT,带来了一定的效果。
细节
暂无。
简评
第一点提供了一种分析的思路,值得复现。