1)本文参考自@苏剑林 RealFormer:把残差转移到Attention矩阵上面去,主要是做一些个人的注解
2)以下阴影背景部分为引用上述文章,“注:”部分为本文添加
背景
Layer Normalization 是 Transformer 模型的重要组成之一,它的用法有 PostLN 和 PreLN 两种,论文 On Layer Normalization in the Transformer Architecture [1] 中有对两者比较详细的分析。简单来说,就是 PreLN 对梯度下降更加友好,收敛更快,对训练时的超参数如学习率等更加鲁棒等,反正一切都好但就有一点硬伤:PreLN 的性能似乎总略差于 PostLN。
-
问题:讨论preLN和postLN
- preLN
- 优点:容易训练,收敛比postLN快,对学习率等超参数鲁棒;
- 缺点:性能比postLN差一点
- postLN
- 优点:性能比preLN好一点
- 缺点:不容易训练
- preLN
-
方法:google RealFormer=>兼容preLN、postLN的优点
模型
- RealFormer 全称为“Residual Attention Layer Transformer”,即“残差式 Attention 层的 Transformer 模型”,顾名思义就是把残差放到了 Attentionk 里边了,如下
- 具体的改动其实挺简单:
A t t e n t i o n ( Q n , K n , V n ) = s o f t m a x ( A n ) V n , 其 中 A n = Q n K n T d k 变 成 A t t e n t i o n ( Q n , K n , V n ) = s o f t m a x ( A ˉ n ) V n , 其 中 A ˉ n = Q n K n T d k + A ˉ n − 1 \begin{aligned} & Attention(Q_n,K_n,V_n)=softmax(A_n)V_n, 其中A_n=\frac {Q_nK^T_n} {\sqrt d_k} \\ & 变成 \\ & Attention(Q_n,K_n,V_n)=softmax(\bar A_n)V_n, 其中\bar A_n=\frac {Q_nK^T_n} {\sqrt d_k} + \bar A_{n-1} \\ \end{aligned} Attention(Qn,Kn,Vn)=softmax(An)Vn,其中An=dkQnKnT变成Attention(Qn,Kn,Vn)=softmax(Aˉn)Vn,其中Aˉn=dkQnKnT+Aˉn−1
实验
-
MLM准确率对比
-
GLUE评测对比
-
不同训练步数效果对比
值得特别指出的是第一张图和第四张图(注:上图3)。从第一张图我们可以看到,对于 RealFormer 结构,加大模型规模(large 到 xlarge)可以带来性能的明显提升,而 ALBERT 论文曾经提到加大 BERT 的模型规模(注:应该是指large->xlarge)并不能带来明显受益,结合两者说明这可能是 PostLN 的毛病而不是 BERT 的固有毛病,换成 RealFormer 可以改善这一点。
从第四张图我们可以看到,RealFormer 结构训练 50 万步,效果就相当于 PostLN 训练 100 万步,这表明 RealFormer 有着很高的训练效率。
分析
-
postLN问题
- 采用 L a y e r N o r m ( x + f ( x ) ) 结 构 , L a y e r N o r m LayerNorm(x+f(x))结构,LayerNorm LayerNorm(x+f(x))结构,LayerNorm增加了前面层的梯度消失风险,造成后面层梯度大,前面层梯度小;大学习率会使后面层容易崩,小学习率使前面层训练不够,因此难以训练
- 一般要使用warmup慢慢训练
-
preLN问题
- 采用 x + f ( x ) x+f(x) x+f(x)形式,最后一层变成 x + f 1 ( x ) + f 2 ( x ) + . . . + f n ( x ) x+f_1(x)+f_2(x)+...+f_n(x) x+f1(x)+f2(x)+...+fn(x) ,可能导致数值和方差很大,最后需要加一层 L a y e r N o r m LayerNorm LayerNorm使输出稳定下来;
事实上,很早就有人注意到残差的这个特点会造成不稳定,笔者之前研究 GAN 的时候,就发现 Which Training Methods for GANs do actually Converge? [4] 一文中的实现就把 x + f ( x ) x+f(x) x+f(x)换成了 x + 0.1 f ( x ) x+0.1f(x) x+0.1f(x) 。受到他们实现的启发,笔者也试过将0.1换成 α \alpha α,其中 α \alpha α是初始化为 0 的可训练标量参数,也取得不错的效果。
今年年初的论文 ReZero is All You Need: Fast Convergence at Large Depth [5] 则正式地提出了这个方法,命名为 ReZero,里边的实验表明用 ReZero 可以干脆去掉 Layer Norm。遗憾的是,ReZero 的论文没有对 Transformer 做更多的实验,而 RealFormer 也没有比较它与 ReZero 的效果差别。
-
RealFormer的优势
- a)主要采用postLN+attention_skip,因此没有preLN的问题
读者可能会反驳,既然 PreLN 存在问题,那 RealFormer 的 不也是存在同样的叠加问题吗?如果只看 ,那么确实会有这样的问题,但别忘了 后面还要做个 softmax 归一化后才参与运算,也就是说,模型对矩阵 是自带归一化功能的,所以它不会有数值发散的风险。
- b)A(即Attention)的累加会造成强者恒强(同一个token前后层的A应该有类似的分布),使得A趋向于one-hot形式(即产生很多小系数);这样会造成后面层(因为A是逐渐趋向one-hot)的梯度也被削弱,一定程度减轻了postLN遇到前后层梯度不一的困扰,有利于所有层协同优化;
而且刚刚相反,随着层数的增加, 的叠加会使得 的元素绝对值可能越来越大,Attention 逐渐趋于 one hot 形式,造成后面的层梯度消失,但是别忘了,我们刚才说 PostLN 前面的层梯度小后面的层梯度大,而现在也进一步缩小了后面层的梯度,反而使得两者更同步从而更好优化了;
另一方面,Attention 的概率值可能会有趋同的趋势,也就是说 Attention 的模式可能越来越稳定(注:应该是指趋向于one-hot形式),带来类似 ALBERT 参数共享的正则化效应,这对模型效果来说可能是有利的(注:有种高开低走/前炸裂后收敛的感觉),直觉上来说,用 RealFormer 结构去做 FastBERT [6] 之类的自适应层数的改进,效果会更好,因为 RealFormer 的 Attention 本身会有趋同趋势,更加符合 FastBERT 设计的出发点。
- c)可以将 RealFormer 理解为还是使用了常规的残差结构,但是残差结构只用在
Q
/
K
Q/K
Q/K而没有用在
V
V
V上:
A t t e n t i o n ( Q n , K n , V n ) = s o f t m a x ( A ˉ n ) V n , 其 中 A ˉ n = Q n K n T d k + A ˉ n − 1 这 在 一 定 程 度 上 与 如 下 式 子 等 价 A ˉ n = Q ˉ n K ˉ n T d k = ( Q n + Q ˉ n − 1 ) ( K n + K ˉ n − 1 ) T d k 即 只 对 Q / K 加 偏 置 ( 残 差 ) , 不 对 V 加 \begin{aligned} & Attention(Q_n,K_n,V_n)=softmax(\bar A_n)V_n, \\ & 其中\bar A_n=\frac {Q_nK^T_n} {\sqrt d_k} + \bar A_{n-1} \\ & 这在一定程度上与如下式子等价 \\ & \bar A_n=\frac {\bar Q_n \bar K^T_n} {\sqrt d_k} \\ & =\frac {(Q_n+\bar Q_{n-1}) (K_n+\bar K_{n-1})^T} {\sqrt d_k} \\ & 即只对Q/K加偏置(残差),不对V加 \\ \end{aligned} Attention(Qn,Kn,Vn)=softmax(Aˉn)Vn,其中Aˉn=dkQnKnT+Aˉn−1这在一定程度上与如下式子等价Aˉn=dkQˉnKˉnT=dk(Qn+Qˉn−1)(Kn+Kˉn−1)T即只对Q/K加偏置(残差),不对V加
为啥 V V V “不值得”一个残差呢?从近来的一些相对位置编码的改进中,笔者发现似乎有一个共同的趋势,那就是去掉了 的偏置,比如像 NEZHA 的相对位置编码,是同时在 Attention 矩阵(即 Q / K Q/K Q/K)和 V V V上施加的,而较新的 XLNET 和 T5 的相对位置编码则只施加在 Attention 矩阵上,所以,似乎去掉 V V V的不必要的偏置是一个比较好的选择,而 RealFormer 再次体现了这一点。
总结
- 以上分析中,b)的说法可能比较有说服力;
- 不管怎么样效果是有的,可以学习大佬解决问题的方法:如果要对postLN动刀,那就直击痛点,既然前后层梯度不一,那就想办法提高浅层的梯度或者降低深层的梯度,google选择了后种;
- 建议读者阅读文章RealFormer增加理解