目录
文章目录
- 目录
- Decoder-only
-
- [Encoder-Decoder 和 Decoder-only 的区别](#Encoder-Decoder 和 Decoder-only 的区别)
- [Decoder-only 和 Encoder-only 的区别](#Decoder-only 和 Encoder-only 的区别)
- [主流 Decoder-only 模型](#主流 Decoder-only 模型)
- [Attention 优化方向](#Attention 优化方向)
-
- [Softmax Attention](#Softmax Attention)
- [Sparse Attention](#Sparse Attention)
- [FFN 优化方向](#FFN 优化方向)
-
- MoE
- [Flash Attention](#Flash Attention)
- [Page Attention](#Page Attention)
- [Radix Attention](#Radix Attention)
Decoder-only

Encoder-Decoder 和 Decoder-only 的区别
最初的 Encoder-Decoder 结构是设计前提是 "处理两条不同的序列:一条输入、一条输出(翻译场景)"。但随后人们发现一个事实:几乎所有 NLP 应用场景都可以采用 "接着往下写" 的语言生成模型,即:将输入(prompt)和输出(续写)作为同一条序列(拼成同一条流)。例如:
- 翻译场景:中译英 "我爱中国" => 续写 "I love China";
- 摘要场景:总结这段话 "<长文>" => 续写 "<摘要>";
- 问答场景:问 "珠峰多高?" => 续写 "8848米";
因此,实际上 Decoder-only 都可以满足上述 NLP 应用场景的需求。好处:
- 结构极简:Encoder-Decoder 有两套 Stack 多种注意力类型;而 Decoder-only 只有一套 Stack、一种注意力(Masked Self-Attention)、一个训练目标(CLM 预测下一个词)。
- 数据集直接有效:Encoder-Decoder 是 "双向" 的,训练数据集要求配对;而 Decoder-only 是 "CLM(因果)" 的,所以整个互联网的无标注文本都可以直接拿来训练。
- 少样本学习(few-shot)自然涌现:因为是 "续写同一条流",所以可以把少量示例直接塞进 prompt 里,模型把 "问题+示例+答案" 当成一条连续的流接着写。GPT-3 的上下文学习能力就是这么自然长出来的。而 Encoder-Decoder 无法做到。
- 生成 K/V Cache 干净利落:decoder-only 的自回归生成 + KV Cache 复用非常顺。

Decoder-only 和 Encoder-only 的区别
两者的核心区别在注意力层上,Decoder-only 采用 MMHA,Encoder-only 采用 MHA,这一个差别决定了 Decoder-only 擅长 "生成",Encoder-only 擅长 "理解"。
Encoder-only(BERT):
- 文本分类、情感分析,例如:这条评论是正面还是负面?
- 命名实体识别、抽取式问答(从原文里划答案)
- 句向量 / 语义检索(把整句压成一个向量,算相似度),RAG 里的 embedding 模型很多是这类
Decoder-only(GPT):
- 什么都能干(续写):对话、续写、补全、翻译、摘要...
- few-shot / 上下文学习

主流 Decoder-only 模型

Attention 优化方向

模型算法层面,针对 Attention 的优化主要有 2 个方向:
-
一方面利用注意力得分矩阵的稀疏性,选择部分 token 进行注意力运算,从而减少运算次数;
-
另一方面从压缩 KV 矩阵的方向出发,共享 KV 矩阵或者压缩 KV 矩阵的维度。
工程层面,主要是面对训练和推理的场景:
- 一方面为了根据 GPU 的存储架构做的软件适配,比如 FlashAttention、Paged Attention。
- 另一方面是根据模型结构做的框架层的优化,比如 KV Cache、Radix Attention。
Softmax Attention
Softmax Attention 即使用了 softmax 求权重的 Attention,目前的主流,相对的还有 Linear Attention。对 Softmax Attention 目前主要有以下优化方式:
- MHA(Multi-Head):每个 Attention Head 都有独立的 Q、K、V。模型 W 参数量较大,使得 KV Cache 占比大。现在基本不用。
- MQA(Multi-Query):所有 Attention Head 中的 Q 都共享相同的 K、V。模型 W 参数量最小,计算量和 KV Cache 也最小的,但是模型效果差。现在也基本不用。
- GQA(Grouped Multi-Query,分组查询注意力):对 Attention Head 进行分组,一组 Attention Head 中的 Q 共享相同的 K、V。是 MHA 和 MQA 的折中,有效减少了参数量,例如 70B 有 64 个 Q 头,但只有 8 个 K/V 头,可以在保持性能的同时减少 30%-50% 注意力层参数,降低训练难度。主流之一。
- MLA(Multi-Head Latent):2024 年 DeepSeek V2 提出,并在 DeepSeek V3 中沿用。核心思想是每个 Attention Head 都有独立的 K 和 V,但它们可以投影和反投影到同样且共享的 Latent KV。KV Cache 和 MQA 相当,效果和 MHA 相当,但也会额外的增加一些计算量。主流之一。

Sparse Attention
Sparse Attention 是 Softmax Attention 的一种具体实现。Softmax Attention 会使用全部的 Q·K 元素(稠密),而 Sparse Attention 只会使用一部分 Q·K 元素。
假设 seq_len 是 n,那么 Self-Attention 的 QK 计算就会产生一个 形状为 n, n 的注意力得分矩阵(相似度矩阵)。所以从理论上来讲,Self Attention 的计算时间和显存占用量都是 O(n^2)。也就是说,围绕该矩阵的计算量和显存占用量(Scaled、Masked、Softmax、乘 V 加权融合计算等等),会随 n 呈平方级增长,例如:如果 seq_len 变成原来的 2 倍,显存占用量就是原来的 4 倍,计算时间也是原来的 4 倍。
但实际上,Child 等人(2019)的研究发现,在训练好的 Transformer 模型中,注意力矩阵往往是稀疏的,这意味着并不是每个 token 都需要关注其他所有 token,每个 token 只关注非常有限个其他 token。有些 token 之间的相互作用可能对最终的输出贡献不大,可以被忽略。
稀疏注意力机制的核心思想是在自注意力计算中引入稀疏性,即:不是让序列中的每个位置都与其他所有位置进行注意力计算,而是仅选择部分位置进行计算。所以稀疏注意力具有以下优势:
- 减少计算量:通过减少参与注意力计算的位置数,稀疏注意力显著降低了计算复杂度,使得模型能够处理更长的序列。
- 减少显存占用量:稀疏操作减少了需要存储的注意力权重的数量,从而降低了模型的内存需求。
- 提高长距离依赖学习能力:某些稀疏模式(如分层或跳跃连接)可以帮助模型更有效地学习序列中的长距离依赖关系。
下图是 Self-Attention 的一个注意力矩阵。左边显示了注意力矩阵,右边显示了关联性,这表明每个元素都跟序列内所有元素有关联。

Atrous Self Attention(空洞注意力)启发于 "膨胀卷积(Atrous Convolution)",它对相关性进行了约束,强行要求每个元素只跟它相对距离为 k, 2k, 3k 的元素关联,其中 k>1 是超参数。如此的,运行效率和显存占用都变成了 O(n^2/k) ,也就是说能直接降低到原来的 1/k。

Local Self Attention(局部自注意力)约束每个元素只与前后 k 个元素以及自身有关联。保留了一个 2k+1 大小的窗口,每个元素只跟 2k+1 个元素算相关性,这样一来理想情况下运行效率和显存占用都变成了 O(kn),也就是说随着 n 而线性增长(非指数增长)。这是一个很理想的性质,当然也直接牺牲了长程关联性。

Sparse Self Attention(稀疏自注意力),将 Atrous Self Attention 和 Local Self Attention 合并为一个,除了相对距离不超过 k 的、相对距离为 k,2k,3k,... 的注意力都设为 0,这样一来 Attention 就具有了 "局部紧密相关和远程稀疏相关" 的特性。

FFN 优化方向
MoE
Flash Attention
Stanford DAWN Lab 实验室提出(https://arxiv.org/pdf/2205.14135)。将部分内容存储到 SRAM 中,以减少访问全局内存 HBM 的频率。

Page Attention
Paged Attention,vLLM 提出(https://arxiv.org/pdf/2309.06180)。利用分页技术减少显存碎片化问题。

Radix Attention
Radix Attention,SGLang 提出(https://arxiv.org/pdf/2312.07104)。提高缓存命中率。
