为什么现在的LLM都是Decoder-only的架构?
By 苏剑林 | 2023-03-17 | 108260位读者 |LLM是“Large Language Model”的简写,目前一般指百亿参数以上的语言模型,主要面向文本生成任务。跟小尺度模型(10亿或以内量级)的“百花齐放”不同,目前LLM的一个现状是Decoder-only架构的研究居多,像OpenAI一直坚持Decoder-only的GPT系列就不说了,即便是Google这样的并非全部押注在Decoder-only的公司,也确实投入了不少的精力去研究Decoder-only的模型,如PaLM就是其中之一。那么,为什么Decoder-only架构会成为LLM的主流选择呢?
知乎上也有同款问题《为什么现在的LLM都是Decoder only的架构?》,上面的回答大多数聚焦于Decoder-only在训练效率和工程实现上的优势,那么它有没有理论上的优势呢?本文试图从这个角度进行简单的分析。
统一视角 #
需要指出的是,笔者目前训练过的模型,最大也就是10亿级别的,所以从LLM的一般概念来看是没资格回答这个问题的,下面的内容只是笔者根据一些研究经验,从偏理论的角度强行回答一波。文章多数推论以自己的实验结果为引,某些地方可能会跟某些文献的结果冲突,请读者自行取舍。
我们知道,一般的NLP任务都是根据给定的输入来预测输出,完全无条件的随机生成是很少的,换句话说,任何NLP任务都可以分解为“输入”跟“输出”两部分,我们可以把处理“输入”的模型叫做Encoder,生成“输出”的模型叫做Decoder,那么所有任务都可以从“Encoder-Decoder”的视角来理解,而不同模型之间的差距在于Encoder、Decoder的注意力模式以及是否共享参数:
$$\begin{array}{c|ccc}
\hline
& \text{Encoder注意力} & \text{Decoder注意力} & \text{是否共享参数} \\
\hline
\text{GPT} & \text{单向} & \text{单向} & \text{是} \\
\text{UniLM} & \text{双向} & \text{单向} & \text{是} \\
\text{T5} & \text{双向} & \text{单向} & \text{否} \\
\hline
\end{array}$$
这里的GPT就是Decoder-only的代表作;UniLM则是跟GPT相似的Decoder架构,但它是混合的注意力模式;T5则是Encoder-Decoder架构的代表作,主要是Google比较感兴趣。
Google在T5和UL2两篇论文中做了较为充分的对比实验,结果均体现出了Encoder-Decoder架构相比于Decoder-only的优势,但由于从LLM的角度看这两篇论文的模型尺度都还不算大,以及多数的LLM确实都是在做Decoder-only的,所以这个优势能否延续到更大尺度的LLM以及这个优势本身的缘由,依然都还没有答案。
对比实验 #
从上表可以看出,其实GPT跟UniLM相比才算是严格控制变量的,如果GPT直接跟T5相比,那实际上产生了两个变量:输入部分的注意力改为双向以及参数翻了一倍。而之所以会将它们三个一起对比,是因为它们的推理成本大致是相同的。
相比GPT,既然T5有两个变量,那么我们就无法确定刚才说的Encoder-Decoder架构的优势,究竟是输入部分改为双向注意力导致的,还是参数翻倍导致的。为此,笔者在10亿参数规模的模型上做了GPT和UniLM的对比实验,结果显示对于同样输入输出进行从零训练(Loss都是只对输出部分算,唯一的区别就是输入部分的注意力模式不同),UniLM相比GPT并无任何优势,甚至某些任务更差。
假设这个结论具有代表性,那么我们就可以初步得到结论:
输入部分的注意力改为双向不会带来收益,Encoder-Decoder架构的优势很可能只是源于参数翻倍。
换句话说,在同等参数量、同等推理成本下,Decoder-only架构很可能是最优选择。当然,要充分验证这个猜测,还需要补做一些实验,比如Encoder和Decoder依然不共享参数,但Encoder也改为单向注意力,或者改为下一节介绍的正反向混合注意力,然后再对比常规的Encoder-Decoder架构。但笔者的算力有限,这些实验就留给有兴趣的读者了。
低秩问题 #
为什么“输入部分的注意力改为双向不会带来收益”呢?明明输入部分不需要考虑自回归生成,直觉上应该完整的注意力矩阵更好呀?笔者猜测,这很可能是因为双向注意力的低秩问题带来的效果下降。
众所周知,Attention矩阵一般是由一个低秩分解的矩阵加softmax而来,具体来说是一个$n\times d$的矩阵与$d\times n$的矩阵相乘后再加softmax($n\gg d$),这种形式的Attention的矩阵因为低秩问题而带来表达能力的下降,具体分析可以参考《Attention is Not All You Need: Pure Attention Loses Rank Doubly Exponentially with Depth》。而Decoder-only架构的Attention矩阵是一个下三角阵,注意三角阵的行列式等于它对角线元素之积,由于softmax的存在,对角线必然都是正数,所以它的行列式必然是正数,即Decoder-only架构的Attention矩阵一定是满秩的!满秩意味着理论上有更强的表达能力,也就是说,Decoder-only架构的Attention矩阵在理论上具有更强的表达能力,改为双向注意力反而会变得不足。
还有个间接支持这一观点的现象,那就是线性Attention在语言模型任务上(单向注意力)与标准Attention的差距,小于它在MLM任务上(双向注意力)与标准Attention的差距,也就是说,线性Attention在双向注意力任务上的效果相对更差。这是因为线性Attention在做语言模型任务时,它的Attention矩阵跟标准Attention一样都是满秩的下三角阵;在做MLM任务时,线性Attention矩阵的秩比标准Attention矩阵更低(线性Attention是$n\times d$的矩阵与$d\times n$的矩阵相乘,秩一定不超过$d$,标准Attention是$n\times d$的矩阵与$d\times n$的矩阵相乘后加softmax,softmax会有一定的升秩作用,参考《Transformer升级之路:3、从Performer到线性Attention》中的“低秩问题”一节及评论区)。
反过来,这个结论能不能用来改进像BERT这样的双向注意力模型呢?思路并不难想,比如在Multi-Head Attention中,一半Head的Attention矩阵截断为下三角阵(正向注意力),另一半Head的Attention矩阵截断为上三角阵(反向注意力);又或者说奇数层的Attention矩阵截断为下三角阵(正向注意力),偶数层的Attention矩阵截断为上三角阵(反向注意力)。这两种设计都可以既保持模型整体交互的双向性(而不是像GPT一样,前一个token无法跟后一个token交互),又融合单向注意力的满秩优点。
笔者也简单做了对比实验,发现正反向混合的注意力在MLM任务上是比像BERT这样的全双向注意力模型效果稍微要好点的:
好消息是看得出略有优势,间接支持了前面的猜测;坏消息是这实验的只是一个base版本(1亿参数)的模型,更大模型的效果尚未清楚。
文章小结 #
所以,笔者作出的回答是:LLM之所以主要都用Decoder-only架构,除了训练效率和工程实现上的优势外,在理论上是因为Encoder的双向注意力会存在低秩问题,这可能会削弱模型表达能力,就生成任务而言,引入双向注意力并无实质好处。而Encoder-Decoder架构之所以能够在某些场景下表现更好,大概只是因为它多了一倍参数。所以,在同等参数量、同等推理成本下,Decoder-only架构就是最优选择了。
转载到请包括本文地址:https://kexue.fm/archives/9529
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Mar. 17, 2023). 《为什么现在的LLM都是Decoder-only的架构? 》[Blog post]. Retrieved from https://kexue.fm/archives/9529
@online{kexuefm-9529,
title={为什么现在的LLM都是Decoder-only的架构?},
author={苏剑林},
year={2023},
month={Mar},
url={\url{https://kexue.fm/archives/9529}},
}
July 28th, 2023
博主好,想请教:上文中提到GPT可以视为单向encoder-单向decoder且共享参数的模式。但我看很多基于transformer的GPT2Model的实现时,在GPT将初始输入文本进行首次前向传播时(相当于对初始输入文本的encoder?),都是不设置attention-mask的,在MultiheadAttention时应该就和bert里的双向attention一样,这是否应该理解为做了双向的encoder?
November 21st, 2023
苏神好,请教一下。描述一个系统的自由度,当加上约束时候,自由度会降低(比如二维平面的一个小球运动需要(x,y)坐标两个自由度来描述,当对小球加一个硬杆固定在定点只能转动的约束后(也就是x^2+y^2=r^2的约束),小球的运动只需要转动角theta这一个自由度来描述就行了,)。
在LM中要描述第i个token,双向注意力看似约束不如单向注意力约束这么苛刻,为啥描述单向注意力矩阵的自由度(矩阵秩)会比双向注意力矩阵自由度更多?没怎么想明白。
你可以类比施密特正交化?三角化只是另一种表达,不算是约束。
我反而认为是双向注意力约束要更多,类别word2vector,一个token的语义表征同时要受到上下文的约束;单向注意力则只用前文来重构当前token
有道理。抛弃attention是不是inductive bias更小,模型上限更高。
但你需要一个理论上限能覆盖Attention的模型
苏神说的有道理!
February 3rd, 2024
[...]苏剑林. (Mar. 17, 2023). 《为什么现在的LLM都是Decoder-only的架构? 》[Blog post]. Retrieved from https://kexue.fm/archives/9529[...]
March 6th, 2024
softmax作为非线性变换理论上可以增加秩吧
可以,但不一定是满秩
December 6th, 2024
苏老师好,请教下您一个问题。
我现在做的是时序方向,跟nlp类似但不同。最近遇到的一个问题是,如果在时序预测中采用decoder-only(casual attn),那么我应该如何在anomaly_detection、imputation这种任务中,不损失未来/下文信息地进行训练/推理?
nlp任务中decoder-only可以通过in-context learning的方式变换prompt格式完成,但在时序任务中我暂时没有找到优雅且有效的方案。当前时序方向的大模型设计还处于encoder-only、decoder-only、seq2seq都有的阶段。
我设想过一个方案:将时间序列按时间逆转为一个新序列,参与到训练中;推理时将anomaly_detection、imputation分解为两个方向的两个任务完成。但感觉并不直接也并不简洁。
希望得到您的指教:这个问题是否是确切存在的?根据您的经验是否有解决方案?
anomaly_detection我不清楚你的训练数据是怎样的、旧做法是怎样的,但imputation的话,是不是可以转化为完形填空?比如 Q: 1 2 3 __ 5 6, A: 4 这样?Q、A、__可以作为额外的special token引入
是可以的,nlp任务那边in-context learning确实是这样实现的,例如:
Q:苹_很好吃。请问这句话中缺失的字是?A:果。
这样一个句子,它也同样是一个完整的句子,可以与正常的语料一起训练。这应该归功于语言拥有这种逻辑能力(?)来允许prompt变换,将本来在上下文中的token置换到句末。
但是时序数据可能没有这种能力,像您举的例子:
Q: 1 2 3 __ 5 6, A: 4
这样的样本,如果和正常的样本例如:
Q: 1 2 3 4 5 A: 6
一起训练,模型能work吗?或者说将正常的样本转变为:
Q: 1 2 3 4 5 __ A: 6
这样或许可以一起训练,但模型需要付出学习__(占位符)的代价。在nlp中这可能是自然的,本来就是需要学习的事情,但在时序任务中是否代价有些太大了?
如果无法一起训练的话,anomaly_detection和imputation又不如专门使用一个encoder-only的模型了。这是我最近正在苦恼的问题。
这种imputation的样本是随便你构造的,只要你的原始时间序列样本足够多,那么这种样本也是无穷无尽的。多几个special tokens其实并不会有任何代价~
December 11th, 2024
抱歉,提交完才理解过来您说的
“Q、A、__可以作为额外的special token引入”
的意思,但是想说的事情还是一致的。
对于一个原本数据分布在实数域的时序模型,学习额外special token是否代价太大了点?
chronos将数值离散化后视为nlp任务处理,在imputation任务中确实采用的就是您提到的方法。具体的效果我还没有复现实践过。
https://arxiv.org/abs/2403.07815