Transformer 大模型架构深度解析(5)Decoder-only 与模型结构优化

目录

文章目录

  • 目录
  • 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 个方向:

  1. 一方面利用注意力得分矩阵的稀疏性,选择部分 token 进行注意力运算,从而减少运算次数;

  2. 另一方面从压缩 KV 矩阵的方向出发,共享 KV 矩阵或者压缩 KV 矩阵的维度。

工程层面,主要是面对训练和推理的场景:

  1. 一方面为了根据 GPU 的存储架构做的软件适配,比如 FlashAttention、Paged Attention。
  2. 另一方面是根据模型结构做的框架层的优化,比如 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 之间的相互作用可能对最终的输出贡献不大,可以被忽略。

稀疏注意力机制的核心思想是在自注意力计算中引入稀疏性,即:不是让序列中的每个位置都与其他所有位置进行注意力计算,而是仅选择部分位置进行计算。所以稀疏注意力具有以下优势:

  1. 减少计算量:通过减少参与注意力计算的位置数,稀疏注意力显著降低了计算复杂度,使得模型能够处理更长的序列。
  2. 减少显存占用量:稀疏操作减少了需要存储的注意力权重的数量,从而降低了模型的内存需求。
  3. 提高长距离依赖学习能力:某些稀疏模式(如分层或跳跃连接)可以帮助模型更有效地学习序列中的长距离依赖关系。

下图是 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)。提高缓存命中率。

相关推荐
MobotStone2 小时前
AI写代码,真的能做出“能用”的产品吗?
人工智能
小保CPP2 小时前
OpenCV C++车型识别2-形状匹配
c++·人工智能·opencv·计算机视觉
hongyucai2 小时前
聊一聊τ和机器人
人工智能·机器人
PM老周2 小时前
PRD怎么用AI质检?需求预审、人工复核与整改闭环
人工智能·项目管理·产品经理·prd
lialaka2 小时前
「声纹迷宫(Acoustic Labyrinth)」:具身交互智能驱动的实时声学解构与全双工语音数字人控制台
人工智能·3d·交互
BerryS3N2 小时前
Java 后端转型大模型:Demo 能跑不等于能上线
java·人工智能·python·java后端·spring ai·langchain4j·大模型转型
制造数据与AI践行者老蒋2 小时前
智联工坊实战:从“金鱼记忆”到“记住了”:给制造Agent装上记忆芯片的完整指南
人工智能·python·langchain·制造
硬核子牙3 小时前
大模型是怎么学会的
人工智能·chatgpt·计算机组成原理
D11_3 小时前
如何选择靠谱的 GEO 品牌服务商
大数据·人工智能
无忧智库3 小时前
某集团数字人客服多模态交互与情感语音合成平台详细设计方案(WORD)
人工智能