Decoder-only的LLM为什么需要位置编码?
By 苏剑林 | 2024-09-01 | 31029位读者 |众所周知,目前主流的LLM,都是基于Causal Attention的Decoder-only模型(对此我们在《为什么现在的LLM都是Decoder-only的架构?》也有过相关讨论),而对于Causal Attention,已经有不少工作表明它不需要额外的位置编码(简称NoPE)就可以取得非平凡的结果。然而,事实是主流的Decoder-only LLM都还是加上了额外的位置编码,比如RoPE、ALIBI等。
那么问题就来了:明明说了不加位置编码也可以,为什么主流的LLM反而都加上了呢?不是说“多一事不如少一事”吗?这篇文章我们从三个角度给出笔者的看法:
1、位置编码对于Attention的作用是什么?
2、NoPE的Causal Attention是怎么实现位置编码的?
3、NoPE实现的位置编码有什么不足?
位置编码 #
在这一节中,我们先思考第一个问题:位置编码对于Attention机制的意义。
在BERT盛行的年代,有不少位置编码工作被提了出来,笔者在《让研究人员绞尽脑汁的Transformer位置编码》也总结过一些。后来,我们在《Transformer升级之路:1、Sinusoidal位置编码追根溯源》中,试图从更贴近原理的视角来理解位置编码,并得到了最早的Sinusoidal位置编码的一种理论解释,这也直接启发了后面的RoPE。
简单来说,位置编码最根本的作用是打破Attention的置换不变性。什么是置换不变性呢?在BERT时代,我们主要用的是双向Attention,它的基本形式为:
\begin{equation}\boldsymbol{y}_n = \boldsymbol{f}(\boldsymbol{q}_n;\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_L) = \frac{\sum_{m=1}^L e^{\boldsymbol{q}_n\cdot \boldsymbol{k}_m}\boldsymbol{v}_m}{\sum_{m=1}^L e^{\boldsymbol{q}_n\cdot \boldsymbol{k}_m}},\quad \boldsymbol{k}_n / \boldsymbol{v}_n= \boldsymbol{x}_n\boldsymbol{W}_{k/v} + \boldsymbol{b}_{k/v}\label{eq:bi-att}\end{equation}
假设$\sigma_1,\sigma_2,\cdots,\sigma_L$是$\{1,2,\cdots,L\}$的任意排列,那么置换不变性是指
\begin{equation}\boldsymbol{y}_n = \boldsymbol{f}(\boldsymbol{q}_n;\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_L) = \boldsymbol{f}(\boldsymbol{q}_n;\boldsymbol{x}_{\sigma_1},\boldsymbol{x}_{\sigma_2},\cdots,\boldsymbol{x}_{\sigma_L})\end{equation}
说白了,就是$\boldsymbol{y}_n$跟key-value的序无关,这跟自然语言的特性不符,所以我们要想办法打破这种不变性。用数据库来类比,没有位置编码的Attention就像是没有时间标签的数据库,检索结果只跟query有关,而位置编码就相当于给数据库的item按顺序打上时间标签,使得检索结果还可以跟item顺序有关。
先验认知 #
位置编码的另一个作用,是加入对Attention的先验认知,或者赋予Attention学习到这些先验认知性质的能力。
比如刚才提到的Sinusoidal位置编码,它是直接由三角函数生成的绝对位置编码,并且相邻的两个位置向量相似度更高,这隐含了相近的token应该具有相近的Embedding的先验;BERT所用的位置编码同样绝对位置编码,但它是随机初始化然后作为参数来学习的,也就是说它没有作出相近的假设,但允许模型学到这个性质(如果模型认为有必要的话)。
更流行的是相对位置编码,它的先验假设是“相对位置比绝对位置更重要”,早期的相对位置编码通常还会做一个截断(大于某个数值后的相对位置直接取同一个值),这里边的假设是“远距离的相对位置可以不用那么准确”,T5的位置编码则更进一步,它将相对位置按对数形式分桶处理,实现了“越远的相对位置越模糊”的效果。此外,有些相对位置编码会直接给Token的重要性加上先验,比如ALIBI就隐含了越远的Token平均而言越不重要的假设(远程衰减)。
诸如RNN、CNN之类的模型,本质上就是把“越近的Token越重要”的先验融入到了架构中,使其可以不用位置编码并且将复杂度降低到线性。然而,先验都是人为的、有偏的,说直接点就是不够准确的,而目前看来LLM的目标是碾压人类而不是模仿人类,这也就可以解释为什么主流架构都用Attention了,因为架构先验更少,即人为的偏见和误区更少,从而天花板更高。
单向注意 #
了解完位置编码的作用后,我们再来思考一下NoPE是如何工作的,或者说它多大程度上能实现上面说的这些位置编码的作用。
前两节我们已经说了,双向Attention具有置换不变性,所以需要位置编码来打破它,所以NoPE不适用于双向Attention,它的前提是单向Attention,或者说Causal Attention:
\begin{equation}\boldsymbol{y}_n = \boldsymbol{f}(\boldsymbol{q}_n;\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_L) = \frac{\sum_{m=1}^n e^{\boldsymbol{q}_n\cdot \boldsymbol{k}_m}\boldsymbol{v}_m}{\sum_{m=1}^n e^{\boldsymbol{q}_n\cdot \boldsymbol{k}_m}},\quad \boldsymbol{k}_n / \boldsymbol{v}_n= \boldsymbol{x}_n\boldsymbol{W}_{k/v} + \boldsymbol{b}_{k/v}\label{eq:uni-att}\end{equation}
它跟式$\eqref{eq:bi-att}$的双向Attention的区别,只是求和符号的上限从$L$改为了$n$,由此可见它类似于$\text{cumsum}$,结果依赖于$\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_L$的顺序。换句话说,它本身就不具有置换不变性。因此,“Causal + NoPE”的组合原则上不需要位置编码,也能取得非平凡的效果(非平凡是指效果跟有位置编码的在同一级别)。
首先指出该结论的论文应该是《Transformer Language Models without Positional Encodings Still Learn Positional Information》,当然,这主要是说作者第一次以“实验+论文”这种比较规范的方式来宣告该结论,事实上根据笔者的了解,在这篇论文之前该结论已经被不少人所默认。此外,后来的《The Impact of Positional Encoding on Length Generalization in Transformers》和《Length Generalization of Causal Transformers without Position Encoding》还探讨了NoPE的长度泛化能力。
方差辨位 #
进一步地,“Causal + NoPE”是通过什么机制来识别位置信息的呢?我们可以通过一个极简的例子来悟一下。
直观来看,式$\eqref{eq:uni-att}$所定义的$\boldsymbol{y}_n$就是$n$个$\boldsymbol{v}$的(加权)平均,$\boldsymbol{y}_{n+1}$就是$n+1$个$\boldsymbol{v}$的(加权)平均,依此类推,所以我们可以先尝试最简单的情形——均匀分布,也就是考虑如下的Attention矩阵:
\begin{equation}A = \begin{pmatrix}1 & \\
\frac{1}{2} & \frac{1}{2} & \\
\frac{1}{3} & \frac{1}{3} & \frac{1}{3} & \\
\vdots & \vdots & \vdots & \ddots \\
\frac{1}{n} & \frac{1}{n} & \cdots & \cdots & \frac{1}{n}\\
\vdots & \vdots & \vdots & \vdots & \vdots & \ddots \\
\end{pmatrix}\end{equation}
在这个假设下,我们有
\begin{equation}\boldsymbol{y}_n = \frac{1}{n}\sum_{m=1}^n \boldsymbol{v}_m\end{equation}
然后,我们假设每个$\boldsymbol{v}$的每个分量,都是从同一个“均值为0、方差为$\sigma^2$”的分布中独立重复采样出来的。在此假设之下,我们可以$\boldsymbol{y}_n$的均值和方差:
\begin{align}\frac{1}{d}\sum_{i=1}^d \boldsymbol{y}_{n,i} \approx&\, \mathbb{E}[\boldsymbol{y}_{n,i}] = \mathbb{E}\left[\frac{1}{n}\sum_{m=1}^n \boldsymbol{v}_{n,i}\right] = \frac{1}{n}\sum_{m=1}^n \mathbb{E}\left[\boldsymbol{v}_{n,i}\right] = 0 \\[5pt]
\frac{1}{d}\sum_{i=1}^d \boldsymbol{y}_{n,i}^2 \approx&\, \mathbb{E}[\boldsymbol{y}_{n,i}^2] = \mathbb{E}\left[\left(\frac{1}{n}\sum_{m=1}^n \boldsymbol{v}_{n,i}\right)^2\right] = \frac{1}{n^2}\sum_{m=1}^n \mathbb{E}\left[\boldsymbol{v}_{n,i}^2\right] = \frac{\sigma^2}{n} \\
\end{align}
第二个等式其实就是RMS Norm中的“MS(Mean Square)”,可以看到它跟位置$n$有关,由于均值为零,所以MS也等价于方差。由此我们得出,“Causal + NoPE”实际上是将位置信息隐藏在了$\boldsymbol{y}$的分量方差之中,或者等价地,隐藏在$\boldsymbol{y}$的$\mathcal{l}_2$范数中。当然,读者可能会质疑这个结论的假设。确实,这两个假设顶多适用于初始化的模型,但用来“悟”一下NoPE识别位置的原理其实足够了:各$\boldsymbol{y}_n$的直观区别就是求平均的$\boldsymbol{v}_m$的个数,而不同数量的平均导致的最直接的变化量就是方差。
同样的结论也出现在论文《Latent Positional Information is in the Self-Attention Variance of Transformer Language Models Without Positional Embeddings》之中,并且作者在预训练过的NoPE模型上做了进一步的验证,肯定了该结论的普适性。
不足之处 #
让我们来汇总一下到目前为止的结果:首先,头两节我们总结了位置编码的两个作用——主要作用是打破Attention的置换不变性,其次是为Attention注入一些先验;然后我们表明了Causal Attention本身不具备置换不变性,所以它原则上不需要位置编码(NoPE);最后,我们发现NoPE主要是通过hidden state向量的方差来表达位置信息的。
现在回到标题的问题上来:为什么基于Causal Attention的Decoder-only模型通常都还会加上位置编码呢?答案其实我们刚才就说了——Causal Attention“原则上”不需要位置编码——“原则上”通常要表达的意思是“能凑合用,但不够好”,说白了就是NoPE虽然还行,但加上位置编码更好。
为什么这样说呢?这还得从“NoPE通过向量的方差来表达位置信息”说起,它相当于说$\boldsymbol{y}_n$是由某个不带位置信息的向量$\boldsymbol{z}_n$乘上某个跟位置$n$相关的标量函数$p(n)$得到,这又意味着:
一、NoPE实现的是类似于乘性的绝对位置编码,并且它只是将位置信息压缩到单个标量中,所以这是一种非常弱的位置编码;
二、单个标量能表示的信息有限,当输入长度增加时,位置编码会越来越紧凑以至于难以区分,比如极简例子有$p(n)\sim \frac{1}{\sqrt{n}}$,当$n$足够大时$\frac{1}{\sqrt{n}}$与$\frac{1}{\sqrt{n+1}}$几乎不可分辨,也就是没法区分位置$n$与$n+1$;
三、主流的观点认为相对位置编码更适合自然语言,既然NoPE实现的是绝对位置编码,所以效率上自然不如再给模型额外补充上相对位置编码;
四、NoPE既没有给模型添加诸如远程衰减之类的先验,看上去也没有赋予模型学习到这种先验的能力,当输入长度足够大可能就会出现注意力不集中的问题。
综上所述,NoPE对于长文本可能会存在位置分辨率不足、效率较低、注意力弥散等问题,所以即便是Decoder-only模型,我们仍需要给它补充上额外的位置编码(特别是相对位置编码),以完善上述种种不足之处。
当然,这些分析主要还是针对Single-Head Attention的,事实上哪怕每个Head的位置信息只有一个标量,但在Multi-Head和Multi-Layer的加持下,总的位置信息也是一个比较可观的大向量了,所以实际上NoPE没有那么糟糕,只是加上位置编码后会更好一些,因为这可以让LLM本身更聚焦于整体的推理能力,而不是还要花心思去复现一些位置编码就可以实现的能力。
文章小结 #
尽管已经有一些工作表明,Deocder-only模型不加位置编码似乎也能取得不错的结果,但主流的LLM仍然额外加上了额外的位置编码,本文试图对这个现象给出自己的理解。
转载到请包括本文地址:https://kexue.fm/archives/10347
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Sep. 01, 2024). 《Decoder-only的LLM为什么需要位置编码? 》[Blog post]. Retrieved from https://kexue.fm/archives/10347
@online{kexuefm-10347,
title={Decoder-only的LLM为什么需要位置编码?},
author={苏剑林},
year={2024},
month={Sep},
url={\url{https://kexue.fm/archives/10347}},
}
September 1st, 2024
有意思噢!那如果不再要求下三角的注意力矩阵行归一化,而是让第$k$行的注意力和为$k$,是不是就失去位置的可分辨性了?
1、按照我理解的你的意思,应该和为$\sqrt{k}$,因为随机变量乘以$\sqrt{k}$,方差才会乘以$k$;
2、事实上,乘以$\sqrt{k}$应该也不行,因为文章已经说了,这个估计只对初始化适用,只是大概感知一下NoPE识别位置的原理,并不是精确的结果;
3、如果NoPE确实是通过方差来识别位置的话,那么最佳的消除方差办法是Attention之后(残差之前)立马接RMS Norm。
苏老师好!按照您第三点评论的思路,我跑了一下实验,结论供苏老师参考:NoPE在每层残差前添加RMS Norm不影响其收敛,且训练loss曲线与原NoPE几乎一致,即结论是(在这个位置)消除方差后不影响NoPE识别位置。
实验设置:LLaMA架构(修改为NoPE,添加额外RMS Norm),模型大小0.1B,从头预训练
是$X + RMSNorm[SelfAttention(X)]$这种设计吗?有没有出现收敛更慢的表现呢?
是这种设计,还尝试了V和O中间加RMS,都没差别。
收敛速度完全相同,测试集loss曲线几乎重合(应该不是代码问题,添加RMS后训练时间增加了10%)
那真是个比较意外的结果,我抽空也实验一下。当然,token的多样性本身也让这个问题复杂很多(Attention不是简单的均匀分布),方差可能只是一个默认行为,如果有东西阻止了方差,那么也还有其它方面起作用。
September 1st, 2024
> “由此我们得出,“Causal + NoPE”实际上是将位置信息隐藏在了$y$的分量方差之中,或者等价地,隐藏在$y$的$l_2$范数中。”
苏神,按我理解$y$的$l_2$范数似乎不影响前向过程,那NoPE是怎么起影响的呢
影响呀,为什么不影响?你是觉得RMS Norm消除了方差?但是别忘了还有残差。比如X是等方差的,Y=Attention(X)是方差递减的,那么RMSNorm(Y)是等方差的,但实际上RMSNorm之前还有个残差,即RMSNorm(X+Y),这时候的RMSNorm就不能完全消除Attention(X)的方差效应了。
我抱有同样的疑问,在模型infer时,各权重和目标数据都是确定的,所预测的y label及其方差不会影响前向的attention、FFN和norm。不带位置编码训练后模型对“1+3*2-10086=”和“110*8+30-26=”这两条数据infer时,模型对下一个token的y label计算是一模一样的,因此infer得到的结果也是一模一样的,因此模型不会得出正确结果而是某未知的错误结果。所谓“和y lable的l2范数有关”仅仅是表明模型在训练时会拟合出现这些数字任意组合时语料中下一个y token的频率,但这并不意味着训练得到的模型可以学习得到位置信息,储存在权重中并在infer进行利用和计算呀
没看懂你要表达什么,哪里来的label?文章说的是Causal Attention + NoPE可以(一定程度上)提供位置信息,位置信息存在$l_2$范数中,Attention的输出结果是跟$l_2$范数相关的,这些有什么问题吗?
不好意思我上面说的话有些混淆,准确说是“模型对下一个token的y predition计算是一模一样的”。就以你文章中列出的(3)式来说,如果你把$y_n=f(q_n;x_1,x_2,⋯,x_L) =
...$改成$y_n=f(q_n;x_1,x_2,⋯,x_n) =
...$,你就会发现和(1)式的唯一区别就是L换成了n,也就意味着同样你任意交换$x_1 \sim x_n$,$y_n$的结果不变,这也是为什么我认为“不带位置编码训练后模型对“1+3*2-10086=”和打乱它的数字顺序得到的“110*8+30-26=”这两条数据infer时(假设一个数字/符号一个token),模型对下一个token的y predition计算是一模一样的”。
而“位置信息存在l2范数中,Attention的输出结果是跟l2范数相关的”就点我也同意,因为我认为它和我底下说的“模型仅仅是在训练时会拟合语料中出现的$f(q_n;x_1,x_2,⋯,x_n)$中任意$x_1 \sim x_n$排列组合的$y_n$出现的频率”意思是一样的
等等,我好像明白了,多层transformer情况下,由于下三角,如果交换前面的$x_1 \sim x_n$,后面层的$k_m$和$v_m$的计算结果会变,所以还是任意交换$x_1 \sim x_n$还是会让$y_n$的结果变
如果你只打乱前$n$个$\boldsymbol{x}_i$,并且$\boldsymbol{q}_n$不变,那么输出的$\boldsymbol{y}_n$确实不变,但问题是$n$是遍历$1\sim L$的,你要使得全体$\boldsymbol{y}_1,\boldsymbol{y}_2,\cdots,\boldsymbol{y}_L$不变,那么全体$\boldsymbol{x}_i$的顺序就不能改变。
是的,个人当时看了公式只考虑了一层attention的infer的情况,如果只有一层的话,“打乱前$n$个$x_i$,输出$y_n$不变”确实会是一个问题。因为此时模型对例如输入为“110*8+30-26=”的下一个token infer结果$y^1_n$与前面数字符号顺序无关,得不出正确结果。和但在多层情况下,若想第二层输出的$y^2_n$不变,就要求第一层attention后输出的全体数字是$y^1_1,y^1_2,...y^1_L$的任意排列组合,在下三角attention计算的情况下这就几乎等于要求第一层attention后要求全体输出$y^1_1,y^1_2,...y^1_L$不变,也就是要求输入全体$x_i$顺序不变了。如果根据这个理论的话,个人无责任猜想,模型层数越深nope效果会越好
肯定层数越多,NoPE的信息越丰富的。但这里的介绍其实做了一个简化,将$\boldsymbol{q}_n$与$\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_L$分离开了,实际上$\boldsymbol{q}_n$是$\boldsymbol{x}_n$的函数,这样一来单层Attention也不能保持不变。
September 7th, 2024
self-attention 是 permutation equivariant (置換等變) 而不是 permutation invariant(置換不變)[1]。
[1] https://people.tamu.edu/~sji/classes/attn-slides.pdf
您可能没瞧仔细,本文说的置换不变性是指 $$\boldsymbol{y}_n = \boldsymbol{f}(\boldsymbol{q}_n;\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_L) = \boldsymbol{f}(\boldsymbol{q}_n;\boldsymbol{x}_{\sigma_1},\boldsymbol{x}_{\sigma_2},\cdots,\boldsymbol{x}_{\sigma_L})$$ 也就是说已经是固定了$\boldsymbol{q}_n$,讨论关于$\boldsymbol{k},\boldsymbol{v}$的不变性,这时候确实是不变。
October 1st, 2024
现在的训练模型的共识似乎是先验知识越少越好,但LLM用了rope这个先验以后效果更好了,真神奇。苏老师有什么看法吗?
先验越少越好的前提是模型的理论能力是足够的,比如你构思出一个新的先验知识更少的模型,Attention+RoPE只不过是它的一个特例,那么这个先验知识更少的模型可能会更好。
但就NoPE vs RoPE的话,NoPE的能力天花板在哪,是否覆盖了RoPE的能力,这些都不确定的,猜测的答案是否定的,所以NoPE与RoPE其实无法作为“先验越少越好”的反例。
举个简单的类比,多层神经网络如果不加激活函数,那么等价于单层模型,效果是很差的,而加上非线性激活函数则能发挥多层的威力,非线性激活函数某种意义上也是一种先验,不加激活函数显然先验更少,但它理论能力就比加激活函数的差,所以不能以此作为“先验越少越好”的反例。
那如果用一个learnable position embedding,那这个embedding的表达能力(潜力)就比rope强了。如果我们的训练集都是很长的文本,说不定可以超过rope?虽然这样的话,外推能力会比较差
没毛病,像BERT那样的learnable位置编码其实也没有显著瓶颈,只是目前主流观点认为相对位置编码对语言建模更为友好,所以选择了RoPE。