Transformer中的Layer Normalization

本文最后更新于:2022年7月21日 下午

Transformer中的Layer Normalization

[TOC]

参考文献:

[1] On Layer Normalization in the Transformer Architecture

[2] DeepNet: Scaling Transformers to 1,000 Layers

Post-LN 和 Pre-LN

左边是原版Transformer的Post-LN,即将LN放在addition之后;右边是[1]改进之后的Pre-LN,即把LN放在FFN和MHA之前。

动机

[1]的作者发现目前使用Transformer的方法训练常使用warm-up(调低刚开始的几个epoch的学习率),所以研究发现训练开始的时候临近输出层的梯度很大,导致训练不稳定。warm-up有几个不好调的超参数,所以[1]致力于把warm-up去掉。

贡献点

  • 新模型可以不用warm-up。
  • Pre-LN训练时间可以节省。

实验

做了一些翻译实验,RAdam是对adam优化器进行了修改来解决transformer前期的问题的一个方法。

翻译

DeepNet 1000层的Transformer

文献[2]的第一张图十分惊艳,1000层的DeepNet没有做太多改动,由500层Encoder和500层Decoder组成。

方法

方法很简单,对于一个N层Encoder,M层decoder的网络,确定了超参数α,β\alpha,\beta。超参α\alpha一般小于1,用来降低之前输出的权重。超参β\beta用来调FFN、self-attn的输入的V的变换矩阵、以及调完权重之后多头融合的out_proj矩阵。

具体方法还有专门的文字介绍:

实验

在深层网络中具有明显优势。

训练过程也更稳健了。

在多语言翻译任务中也用更少的参数取得了更好的效果。