AI Infra学习之旅-RoPE、RMSNorm、GQA与MQA、SwiGLU与MoE
AI Infra学习之旅-RoPE、RMSNorm、GQA与MQA、SwiGLU与MoE
这是“Transformer 原理深讲系列”的第 9 篇。
到前一篇为止,我们已经把“经典 Transformer 骨架”真正走通了:
从 token、embedding、位置编码,到 Q/K/V、Attention、FFN、残差、LayerNorm,再到手算 Attention、手算完整 block,以及用 PyTorch 写一个最小 Decoder-only Transformer。
但如果你现在去看真实的大语言模型实现,会很快发现一件事:
今天真正在线上和工程里被广泛使用的模型,已经不完全长得像 2017 年论文里的原始 Transformer。
这一篇就专门讲清楚:
为什么经典 Transformer 会演化出今天这些常见变体,它们分别在解决什么问题。
一、为什么经典 Transformer 不会原封不动地走到大模型时代
2017 年的 Attention Is All You Need 给出了 Transformer 的经典骨架:
- token embedding
- 位置编码
- multi-head attention
- FFN
- residual
- LayerNorm
- Encoder / Decoder
这个骨架极其成功,也奠定了后面大模型时代的基础。
但一旦模型规模从:
- 几千万参数
到 - 几十亿、上百亿、甚至更大规模参数
同时上下文长度、推理负载、显存约束、系统吞吐要求都急剧上升,原始结构就会暴露出一些问题:
- 位置编码不够适合长上下文扩展
- LayerNorm 在某些深层大模型中不是最简洁的选择
- 标准多头 attention 的 K/V 开销很大
- 经典 FFN 还有进一步提升表达能力与参数效率的空间
- Dense FFN 在超大模型里会让参数和计算成本都非常高
于是,现代大模型并不是推翻 Transformer,而是围绕它的核心骨架,做了一系列结构层面的“现代化改造”。
所以这一篇的主线不是“列名词”,而是回答:
这些改动为什么会出现?
二、先给你一张总图:现代变体各自在改什么
为了建立整体感,可以先把这一篇要讲的东西压缩成下面这张映射表。
| 变体 | 它改的是哪一部分 | 它主要想解决什么问题 |
|---|---|---|
| RoPE | 位置表示 | 让 attention 更自然感知相对位置,并更适合长上下文 |
| RMSNorm | 归一化 | 用更简洁的归一化方式稳定训练,减少一些不必要操作 |
| GQA / MQA | attention 头结构 | 减少 K/V cache 开销,降低推理显存和带宽压力 |
| SwiGLU | FFN 激活与门控结构 | 提升 FFN 的表达能力和训练效果 |
| MoE | FFN 的计算路径 | 在扩大总参数量的同时,控制单 token 激活计算量 |
如果你把这张表记住,后面所有细节都会清晰很多。
因为它告诉你:
- 这些变体不是随便长出来的
- 它们每一个都有明确“痛点来源”
- 它们大多是在大模型训练和推理压力下自然长出来的
三、先讲第一个最常见的现代变体:RoPE
在原始 Transformer 里,位置通常是这样加进去的:
其中:
- (x_i) 是 token embedding
- (p_i) 是位置向量
也就是说,原始位置编码的基本思想是:
把位置作为一个附加向量,直接加到输入表示上。
这个做法很自然,也有效。
但当模型走向更长上下文、更大规模时,人们逐渐发现:
仅仅在输入层把位置加进去,并不是唯一也不一定是最理想的方式。
于是,现代很多大模型开始采用:
RoPE(Rotary Positional Embedding,旋转位置编码)
四、RoPE 到底在改什么
RoPE 的关键不是:
- 继续给输入向量加一个位置向量
而是:
把位置信息直接融入 Q 和 K 的表示里。
更具体地说,RoPE 会在 attention 计算前,对 Query 和 Key 做一个与位置相关的旋转变换。
于是,注意力分数不再只是:
而是变成:
带有位置旋转后的 (q_i) 与 (k_j) 的点积
这样做的核心思想是:
让 attention 自己在匹配时就带上位置信号,而不是仅靠输入层的“内容 + 位置”混合向量。
五、RoPE 为什么更适合现代大模型
RoPE 之所以流行,根本原因在于它更自然地把“相对位置信息”嵌入到了 attention 的匹配机制里。
从直觉上说,RoPE 的好处主要有三点。
1. 它更强调相对位置
原始绝对位置编码更像是在告诉模型:
- 你现在在第几号位置
而 RoPE 更容易让模型在 attention 里感受到:
- 当前 token 和另一个 token 相差多远
- 谁在谁前面
- 这个相对偏移会如何影响匹配
这对于语言这种依赖相对距离和相对顺序的结构,非常自然。
2. 它直接作用在 Q/K 上
这意味着位置信号不是在输入层“埋进去”以后,希望后面层自己学会提取;
而是直接参与到了最核心的 attention 匹配过程里。
3. 它通常更适合长上下文扩展
因为它的位置作用方式更贴近 attention 本体,所以在很多长上下文场景下,RoPE 表现得更自然,也更容易成为现代 LLM 的默认选择。
所以 RoPE 本质上是在回答:
能不能把位置这件事,直接变成 attention 计算的一部分?
答案是:可以,而且效果通常很好。
六、从几何角度理解 RoPE:它本质上是在做“旋转坐标变换”
虽然 RoPE 公式看起来不算短,但它的几何直觉其实很漂亮。
如果你把一个偶数维向量拆成很多二维小块,例如:
RoPE 会对这些二维小块做一个与位置相关的旋转。
不同位置,对应不同旋转角度。
于是:
- 位置 1 的 query 会被旋转一次
- 位置 2 的 query 会被旋转另一种角度
- key 也一样
这就像在不同位置上,给向量施加不同的相位变化。
所以 RoPE 的核心可以非常直观地理解成:
位置不再是“加一个向量”,而是“对表示坐标系做位置相关旋转”。
这个理解很重要,因为它能帮助你区分:
- 绝对位置加法编码
- 与 attention 深度耦合的旋转位置编码
七、第二个现代变体:RMSNorm 为什么会替代一部分 LayerNorm
前面我们已经讲过,经典 Transformer 常用 LayerNorm。
LayerNorm 对一个向量 (x) 做的事情是:
- 减去均值
- 除以标准差
- 再乘可学习参数 (\gamma),加可学习参数 (\beta)
也就是:
这当然很好用。
但当模型越来越大时,人们开始问一个问题:
这里“减去均值”这件事,是不是一定必要?
于是,很多现代模型开始采用更简洁的:
RMSNorm
八、RMSNorm 到底是什么
RMSNorm 的核心思想是:
只用均方根(root mean square)来做尺度归一化,而不显式减去均值。
形式上可以写成:
你会发现,它和 LayerNorm 的区别非常明确:
LayerNorm
- 会减去均值
- 会除以标准差
RMSNorm
- 不减去均值
- 只按整体均方根做缩放
也就是说,RMSNorm 更像是在做:
只关心向量整体尺度,不强行把它中心化。
九、为什么现代大模型喜欢 RMSNorm
RMSNorm 受欢迎,根本上不是因为它“更新潮”,而是因为它在大模型里常常更简洁、更够用。
可以从三个角度理解。
1. 归一化的核心需求往往是“控尺度”
在很多深层模型里,真正麻烦的问题往往不是均值是否为零,而是:
- 某些层的表示尺度会不会越来越大
- 不同层之间数值范围会不会越来越乱
RMSNorm 直接抓住了“尺度控制”这个核心。
2. 它更简洁
少了减均值这一步,结构更轻,也更容易在某些实现里带来一点简化。
3. 在现代大模型里往往够用
尤其在很多 Decoder-only LLM 中,RMSNorm 已经成为非常常见的选择。
这说明它在实际训练稳定性和效果上,足够支撑大模型工作。
所以 RMSNorm 的本质不是“更强的归一化”,而是:
用更小的结构代价,保留最关键的尺度稳定功能。
十、第三个现代变体:为什么会有 MQA / GQA
这部分和推理系统联系最紧。
我们之前讲过,多头 attention 的一个代价是:
- 每个头都有自己的 K 和 V
- 在 Decode 阶段,这些 K/V 都要被缓存
- 序列越长,KV Cache 越大
而当模型头数很多、层数很多、上下文很长时,KV Cache 会迅速变成推理系统的核心负担之一。
于是,一个非常自然的问题出现了:
是不是每个 Query 头都必须配自己独立的 K/V 头?
这就引出了:
- MQA(Multi-Query Attention)
- GQA(Grouped-Query Attention)
十一、MQA 到底在改什么
在标准多头 attention 里:
- 每个头都有自己的 Q
- 也有自己的 K
- 也有自己的 V
而 MQA 的核心变化是:
保留多个 Query 头,但让它们共享更少的 K/V 头,极端情况下共享一组 K/V。
也就是说:
- Query 仍然是多头的
- 但 Key / Value 不再一头一个
这样做最大的好处非常直接:
1. KV Cache 显著变小
因为缓存的是 K/V,而不是 Q。
2. 推理时带宽压力下降
Decode 每一步都要读取历史 K/V,K/V 更少就意味着读写成本更低。
3. 更适合大模型推理
尤其是长上下文和大 batch serving 时,这种收益会更明显。
所以 MQA 的本质,是在回答:
能不能让 Query 的多视角保留下来,同时减少 K/V 这部分最贵的推理状态?
答案是:可以。
十二、GQA 又是什么,为什么它经常比 MQA 更折中
MQA 虽然很省 K/V,但也可能让 K/V 共享得太狠。
于是出现了一个更平衡的变体:
GQA(Grouped-Query Attention)
GQA 的思路是:
- 仍然保留很多 Query 头
- 但不是所有 Query 都共享同一组 K/V
- 而是把 Query 头分成若干组
- 每组共享一组 K/V
所以它介于:
- 标准多头 attention
和 - 极端共享的 MQA
之间。
你可以把它理解成:
- 标准 MHA:每个 Query 头都有自己的 K/V
- MQA:所有 Query 头共享同一组 K/V
- GQA:若干 Query 头共享一组 K/V
因此 GQA 的优点是:
- 比标准多头更省 cache
- 又比 MQA 更保留一部分灵活性
这也是为什么今天很多大模型更喜欢 GQA,而不是直接走最极端的 MQA。
十三、为什么 GQA / MQA 和推理系统关系特别大
这点一定要看清楚。
有些结构变体主要影响训练效果,
但 GQA / MQA 的最大影响之一,是直接落在:
- KV Cache 体积
- Decode 阶段读写带宽
- 推理显存压力
也就是说,它不是一个“只在模型论文里重要”的改动,
它会直接改变:
- 单卡能撑多长上下文
- 服务端能扛多大 batch
- 系统是否容易被 cache 打爆
所以如果你以后走 AI 推理 / Infra,这类变体必须从“结构—系统联动”的视角去看,而不是只把它当作 attention 的一个数学小修改。
十四、第四个现代变体:为什么很多模型开始用 SwiGLU
前面我们讲 FFN 时,给的是最经典的形式:
这可以是:
- ReLU FFN
- GELU FFN
但现代很多大模型进一步使用:
GLU 系列结构
其中最常见之一就是:
SwiGLU
十五、SwiGLU 的核心思想是什么
GLU 类结构的核心,不是单纯地把一个激活函数换掉,而是引入一种**门控(gating)**思想。
它通常会把输入映射成两路:
- 一路作为主特征
- 一路作为门控信号
然后让门控信号去调制主特征通道。
可以粗略写成:
然后再接输出投影。
这里的关键直觉是:
不是所有中间特征都应该被同等对待,而应该有一条“门”去决定哪些特征被放大、哪些被压制。
这和普通 FFN 的区别在于:
- 普通 FFN:先线性,再统一激活
- SwiGLU:通过门控,让中间特征拥有更细致的选择性
十六、为什么 SwiGLU 在现代大模型里很常见
原因很简单:
1. 表达能力更强
门控结构通常能让 FFN 的中间特征更有选择性,不是“一刀切激活”。
2. 在大模型里效果往往更好
很多现代 LLM 实践中,SwiGLU 类结构已经成为非常常见的选择。
3. 它仍然保留了 FFN 的基本角色
也就是说,它并没有推翻“attention 负责交流、FFN 负责加工”这套逻辑,
它只是让“加工这件事”本身做得更细、更强。
所以你可以把 SwiGLU 理解成:
FFN 的现代增强版,而不是 FFN 的替代品。
十七、第五个现代变体:为什么会有 MoE
如果说前面的 RoPE、RMSNorm、GQA、SwiGLU,都还是在“经典骨架上做局部优化”,
那么 MoE(Mixture of Experts) 则是更大一步的结构变化。
MoE 最核心的想法是:
不是每个 token 都必须走同一个 FFN。
在经典 dense Transformer 里:
- 每一层的每个 token
- 都会经过同一套 FFN 参数
这意味着:
- 参数量扩大,所有 token 都要走同一大块 dense 计算
- 总参数越大,算力和显存成本就越高
于是,MoE 给出的回答是:
把 FFN 分成多个 expert,让不同 token 只激活其中少数几个。
十八、MoE 到底在改哪里
最常见的 MoE 改动点就在 FFN 部分。
原来是:
- 一个 dense FFN
- 所有 token 都过它
现在变成:
- 多个 expert FFN
- 一个 router 决定当前 token 去哪个 expert
- 通常只选 top-k 个 expert 激活
所以:
- 总参数量可以很大
- 但单个 token 实际激活的参数量较小
这带来一个非常重要的效果:
总容量变大了,但每个 token 的实际计算量不需要线性跟着总参数量一起涨。
这就是 MoE 最吸引人的地方。
十九、MoE 为什么会把问题从模型设计直接推向系统设计
这点非常关键。
Dense Transformer 的主要难点是:
- 参数大
- attention 重
- cache 压力大
但 MoE 一上来,系统问题会立刻复杂很多。
因为一旦 token 被路由到不同 expert,就会出现:
- 不同 token 去不同计算路径
- 不同 expert 分布在不同设备上
- token dispatch / gather 的通信成本
- expert 负载均衡问题
- all-to-all 通信问题
也就是说,MoE 不是“只是把 FFN 换个写法”,而是:
把模型内部选择路径的问题,直接暴露成系统层的通信与调度问题。
所以你以后看到:
- expert parallel
- all-to-all
- DeepEP
- load balancing
- token dispatch
它们并不是另一个孤立世界,而是 MoE 结构的自然工程后果。
二十、把这些变体放回同一张图里看
现在我们已经讲完了五个常见现代变体。
如果把它们重新放回一张图里,你会发现它们分别在改不同层面。
1. RoPE:改位置建模
它关注的是:
- attention 如何感知顺序
- 相对位置如何更自然地进入匹配过程
2. RMSNorm:改归一化
它关注的是:
- 如何更简洁地稳定深层数值尺度
3. GQA / MQA:改 attention 头结构
它关注的是:
- 如何降低 K/V 的状态成本
- 如何服务更高效的推理
4. SwiGLU:改 FFN 内部形式
它关注的是:
- 如何让逐位置加工更强、更灵活
5. MoE:改 FFN 路径组织
它关注的是:
- 如何把总参数做大
- 但不让单 token 计算线性爆炸
也就是说,这些变体并不是“都在改 attention”或者“都在改 block”,而是在:
现代大模型面对不同瓶颈时,分别从位置、归一化、注意力状态、FFN 表达和参数路径这五个方向做出的应对。
二十一、为什么说现代大模型不是“背离 Transformer”,而是“Transformer 的时代演化”
很多人第一次看现代 LLM 架构,会有一种错觉:
- 2017 的 Transformer 是一个东西
- 现在的 LLaMA、Qwen、DeepSeek 之类又是另一种完全不同的东西
其实不是。
更准确地说:
现代大模型仍然是 Transformer,只是它们把经典 Transformer 中最适合保留的骨架留了下来,同时对最容易成为瓶颈的部分做了时代化改造。
被保留的骨架包括:
- embedding
- attention
- FFN / MLP
- residual
- normalization
- Transformer Block 堆叠
- 自回归 Next-Token Prediction
被改造的部分则是:
- 位置表示
- 归一化方式
- K/V 头组织
- FFN 激活形式
- FFN 是否专家化
所以最准确的理解应该是:
现代大模型不是“不是 Transformer”,而是“Transformer 在大模型训练与推理压力下的工程演化版本”。
二十二、如果站在 AI 推理 / Infra 视角,这些变体应该怎么理解
这是这一篇最重要的落点之一。
如果你只是从模型课角度看,这些变体可能只像“精度优化点”。
但如果你站在推理 / Infra 视角,它们的意义会完全不同。
RoPE
你要问的不是“它数学上优不优雅”,而是:
- 它是否更适合长上下文
- 它对推理实现和缓存机制有什么影响
RMSNorm
你要问的是:
- 它在大模型里是否更稳、更简洁
- 它对前向成本和实现复杂度意味着什么
GQA / MQA
你要立刻想到:
- KV Cache 体积
- Decode 带宽
- 长上下文推理显存压力
SwiGLU
你要想到:
- FFN 的表达能力
- 训练效果和推理成本的平衡
MoE
你要想到:
- token 路由
- expert parallel
- all-to-all
- 系统通信与负载均衡
也就是说,推理岗位里对这些结构变体的理解方式,不应该停留在“会背缩写”,而是:
要能把结构改动直接翻译成系统后果。
二十三、本篇真正要记住的五条主线
第一条:RoPE
- 不再只是“输入加位置向量”
- 而是把位置信息直接融入 Q/K 匹配过程
- 更自然地表达相对位置
第二条:RMSNorm
- 只做均方根尺度归一化
- 不强行减均值
- 用更简洁方式控制深层表示尺度
第三条:GQA / MQA
- 保留多 Query 头
- 减少 K/V 头数量
- 直接服务于推理时的 KV Cache 成本控制
第四条:SwiGLU
- 给 FFN 引入门控机制
- 让逐位置非线性加工更强、更灵活
第五条:MoE
- 把 dense FFN 变成多 expert 路径
- 让总参数量变大,但单 token 激活计算量受控
- 同时把问题推向通信与系统层
二十四、用一句话压缩本篇
现代大模型并没有抛弃 Transformer,而是在保持其“attention + FFN + residual + normalization”核心骨架的同时,围绕位置表示、归一化、K/V 结构、FFN 表达能力和参数路径组织,演化出了更适合大规模训练与推理的结构变体。
二十五、这一篇之后还能继续写什么
方向一:进入 KV Cache 专题
- KV Cache 到底存了什么
- 它在层、头、序列三个维度上是怎么组织的
- 为什么会有 paged KV Cache
- 为什么 GQA/MQA 会直接改变 cache 成本
方向二:进入推理系统专题
- continuous batching
- Prefill / Decode 分离
- prefix caching
- KV-aware routing
把结构问题彻底推到 serving 层。
方向三:进入训练专题
- pretraining
- SFT
- RLHF / DPO
- 为什么模型结构和训练目标会共同决定行为能力

