LLM 中的 Decoder Only
LLM 中的 Decoder Only
为什么现在的大模型大都是 decoder only 架构?这个问题想来稀松平常,经常能看到各大社区中的众多回答,但对于该问题的了解也非常碎片化,今天就系统的对该问题进行归纳梳理
Encoder 和 Decoder 的区别
Encoder
- encoder 的主要功能是处理输入数据,并将其转换成向量化表示,这种表示捕捉了输入数据的重要特征。encoder 较为适合自然语言理解(NLU)任务
- encoder 通常一次性处理整个输入序列,捕捉序列中的信息,并生成一个固定长度的稠密向量
- encoder 的自注意力层允许每个位置的输入与序列中的其他位置直接相互作用,以捕捉全局依赖关系
Decoder
- decoder 通过基于某种向量化表示或者是前一个状态来逐步生成输出,能够将抽象的内部表示转化为人类可读的形式
- decoder 通常一步步生成输出,每一步生成一个 token(如一个单词),并可能依赖于之前的输出
- decoder 的自注意力层被设计为掩蔽的(masked),以防止未来位置的信息在生成当前位置的输出时被使用,decoder 不仅依赖于之前生成的单词,还需要参考 encoder 的输出,确保生成过程的自回归特性
为什么现在的LLM都是 Decoder only
encoder的低秩问题
@苏建林 大佬提出在理论上 encoder 的双向注意力会存在低秩问题,这可能会削弱模型表达能力,就生成任务而言,引入双向注意力并无实质好处;文章提出了两个主要结论如下:
1、输入部分的注意力改为双向不会带来收益,Encoder-Decoder架构的优势很可能只是源于参数翻倍;
2、双向注意力没有带来收益,可能是因为双向注意力的低秩问题导致效果下降。
- 个人认为苏神文章中及其 FAQ 中的三个重点如下:
- attention 矩阵一般是由一个低秩分解的矩阵加 softmax 而来,具体来说是一个 n×d 的矩阵与 d×n 的矩阵相乘后再加 softmax(n≫d),这种形式的Attention的矩阵因为低秩问题而带来表达能力的下降
- 而 decoder only 架构的 attention 矩阵是一个下三角阵,注意三角阵的行列式等于它对角线元素之积,由于softmax 的存在,对角线必然都是正数,所以它的行列式必然是正数,即decoder only 架构的 attention 矩阵一定是满秩的,满秩意味着理论上有更强的表达能力
- 下三角或上三角 mask 更能够把位置编码的信息处理得更好,三角形 mask 除了带来秩的提升外,确确实实也带来了位置识别上的优势,它打破了 transformer 的置换不变性,直接引入了从左往右的序,所以甚至不加位置编码都行
更好的Zero-Shot性能、更适合于大语料自监督学习
@minimum 更多的是认为 decoder only 架构还是更天然地符合传统的自回归 LM 的模式,文中提到的三个重点如下
- 更好的Zero-Shot性能、更适合于大语料自监督学习, 在模型参数量还未到100B之前,decoder only 模型在没有任何 tuning 数据的情况下 zero-shot 表现最好,而 encoder-decoder 则需要在一定量的标注数据上做 multi-task fine-tuning 才能激发最佳性能。而目前 LLM 的训练范式还是在大规模语料上做自监督学习,Zero-Shot 性能更好的 decoder only 架构更匹配主流的自监督训练范式
- LLM 大模型表现出了涌现能力,拉平了encoder-decoder 和 decoder-only 在 multi-task finetuning 上的表现,上面说到了 multi-task fine-tuning 更能激发 encoder-decoder 的潜力,但这种优势被 LLM 时代的涌现出的 "self multitask finetuning"给代替了,而更适合 NLG 任务的 decoder-only 会更受青睐
- Decoder only 架构在 In-Context 的学习上会更有优势,In-context learning 对于 LLM 的重要意义是不言而喻的,decoder only 的架构相比 encoder-decoder 在 In-Context 的学习上会更有优势,因为前者的 prompt 可以更加直接地作用于 decoder 每一层的参数,微调信号更强
预训练任务难度问题
@李沐 大佬也多次提出过自回归模型的最难任务还是会比双向模常做的 NLU 问题难的多,这也是为什么在参数量还较少的时代,BERT 模型会优于 GPT2 模型的原因,一切的恐惧还是源于源于火力不足。而在如今,天花板更高的自回归模型表现更好,也就较为符合常识了
效率问题
- decoder only支持一直复用 KV cache,对多轮对话更友好,因为每个 token 的表示之和它之前的输入有关。KV cache发生在多个 token 生成的步骤中,并且只发生在 decoder 中,BERT 这样的 encoder 模型是没有 KV cache 的
- 通过缓存以前的键(key)和值(value),每来一个新的 query token 后,不需要重新计算一遍注意力,只需关注计算新 token 的注意力,即来一个新的的 token 时,计算得到新的 key 和 value,然后将其拼接到缓存的 K 和 V 矩阵中,复杂度是 O(T),降低到了线性
小结
在同等参数量、同等推理成本下、在生成任务上、 encoder only 架构是最优的选择,但 encorder-decorder 架构在工业界也有许多的应用,尤其是在多模态任务上,还没有特别系统的消融实验能够完全证明 decoder only 一定是最好的
参考文献
- Encoder(编码器)和Decoder(解码器)有什么区别
- 为什么现在的LLM都是Decoder-only的架构?
- 《为什么现在的LLM都是Decoder-only的架构?》FAQ
- 为什么现在的LLM都是Decoder only的架构?minimum
- 为什么现在的LLM都是Decoder only的架构?Sam聊算法
- LLM为什么Decoder only架构
- 【大模型LLM基础】自回归推理生成的原理以及什么是KV Cache?