大模型结构的演进 · 学习笔记
从 Transformer(2017)到 2026 开源旗舰,九年间架构改动的全景。
学习地图
这份材料只讲一件事:2017 年那套"四件套"(注意力 + FFN + 归一化残差 + 绝对位置编码)为什么在 2026 年已经不敷使用,以及它分别被改成了什么。
主线可以压成一句话:
模型要更大(T 级参数)、上下文要更长(1M)、成本要更低(FP4/FP8),三者同时逼近时,每一个原始组件的"成本"都变成了瓶颈 ,于是四条线同时开刀------
注意力少存/少看/换范式 、FFN稀疏化 、归一化与残差工具化 、训练与推理联合设计。
各部分关系:
| 部分 | 回答的问题 | 对应组件 |
|---|---|---|
| 第一部分 | 起点长什么样、为什么必须改 | 原版 Transformer + 四大瓶颈 |
| 第二部分 | 位置信息与数值稳定性怎么给 | 绝对位置编码 → RoPE / partial RoPE / NoPE;LayerNorm → RMSNorm / QK-Norm |
| 第三部分 | 注意力怎么瘦身 | MHA→MQA→GQA→MLA;DSA 稀疏;线性注意力;压缩注意力 |
| 第四部分 | FFN 怎么扩容不增算 | Dense FFN → SwiGLU → MoE |
| 第五部分 | 深层怎么不炸 | 残差升级、有界激活、输出门、attention sink、Muon |
| 第六部分 | 推理怎么提速 | 投机采样 / MTP / DSpark;多模态接入 |
| 第七部分 | 四家旗舰怎么各自取舍 | DS-V4、GLM-5.2、Kimi-K3、Qwen3.6 + 演进五轴线 |
阅读顺序建议:先读第七部分建立全局,再回头读第三、四、五部分的技术细节。
第一部分 · 起点:原版 Transformer 与四大瓶颈
1. 2017 年的标准答案
原版 Transformer(Attention Is All You Need,2017)的编码器层,是"四件套"的堆叠:
输入 tokens
→ Embedding + 绝对位置编码
→ [ MHA 多头注意力 → LayerNorm + 残差 ] × N
→ [ Dense FFN → LayerNorm + 残差 ] × N
→ 输出 logits
- MHA 多头注意力:每个头独立维护 Q/K/V,看全部历史 token。
- Dense FFN :两层 MLP,
d → 4d → d,全部 token 都走一遍。 - LayerNorm + 残差:保证深层堆叠时信号不衰减。
- 绝对位置编码:给每个位置一个固定向量,注入顺序信息。
原版规模是 N=6,d=512。这套结构在 2017--2022 年占统治地位,BERT、GPT-3 都属于这个形态;提供绝对位置编码的思想一直沿用到 2021 年 RoPE 出现之前。
2. 为什么必须改:四大瓶颈
瓶颈①② · 注意力与 FFN 的成本
注意力:长上下文的天敌
- 计算量随长度平方 增长:128K 上下文的注意力开销是 4K 的 32² = 1024 倍。
- KV cache 随长度线性膨胀:推理时每个历史 token 的 K/V 都要常驻显存,1M 上下文轻松占几十 GB。
- 推理时代矛盾最尖锐:长思维链 + Agent 多轮交互,token 消耗暴涨。
- 改动方向:少存 (GQA/MLA)→ 少看 (稀疏/滑窗)→ 换范式(线性/压缩)。
FFN:容量与成本绑死
- Dense FFN 约占模型参数 2/3:想扩容量就得按比例增加每 token 计算量。
- dense 架构下"知识要容量、推理要便宜"不可兼得。
- MoE 的答案:把 FFN 拆成 N 个"专家",每 token 只激活 top-k 个------容量与计算解耦。
瓶颈③④ · 深层稳定性与精度成本
残差与归一化
- 一条残差流承载全部历史信息,近百层堆叠后信号传播困难。
- 注意力 logits 爆炸:大模型训练中常见的 loss 尖峰来源。
- 激活值无界:SwiGLU 两因子都无界,低精度下产生离群点。
- 改动方向:RMSNorm / QK-Norm、超连接 mHC、AttnRes、有界激活。
精度:显存与带宽的硬约束
- 万亿参数 × BF16 = TB 级权重:存储、带宽、能耗全部不可承受。
- 事后量化损失大 → 2026 的答案是量化感知训练(QAT):从训练起就按 FP4/FP8 来。
- 架构要配合量化:有界激活、归一化位置选择都与低精度设计联动。
第二部分 · 位置编码与归一化
2.1 RoPE:给相对距离一个旋转角
核心思想 :把 Q/K 向量的每两个维度看作一个二维小向量,位置 m 就旋转 m·θ 角度。两个 token 做点积时,角度差天然只取决于相对距离。
为什么赢:
- 相对位置:模型学到的是"距离"而非"编号"。
- 零参数:位置信息不需要任何可学习向量。
- 外推友好:配合插值可扩展到训练时没见过的长度。
- 实现简单:一次复数乘法。
python
# 概念代码:dsv4 apply_rotary_emb
# 两两维度组成复数
x = view_as_complex(x.unflatten(-1, (-1, 2)))
# 核心就一行:乘以旋转因子(角度 = 位置 × 频率)
x = x * freqs_cis
y = view_as_real(x).flatten(-2)
时间线:2017 绝对位置编码 → 2021 RoPE(苏剑林)→ 2026 仍是所有旗舰的默认选择。
注意:RoPE 只作用在注意力上,Embedding 本身不带位置。
2.2 长度外推:YaRN
问题:RoPE 训练时只见过 4K 个位置,直接用到 128K,大位置的旋转角度完全没学过 → 注意力分数混乱。
YaRN 的思想:分频率处理
- 高频分量(管近距离):不动,短距离关系不变。
- 低频分量(管远距离):按比例压缩角度,把长序列塞进学过的范围。
- 中间频率:平滑过渡(线性渐变混合)。
python
# precompute_freqs_cis 的三段式频率修正
# 低频:角度除以 factor(压缩);高频:保持原样;中间:渐变
freqs = freqs / factor * (1 - smooth) + freqs * smooth
各家用法:
- DS-V3 :用 YaRN 从 4K 外推到 128K(分两阶段扩长)。
- DS-V4 / GLM-5.2 / Kimi-K3:直接以长上下文原生长度预训练,1M 不再依赖外推技巧。
趋势 :外推是过渡方案,原生 1M 训练才是 2026 旗舰的正解。
2.3 归一化:RMSNorm 与 QK-Norm
RMSNorm:LayerNorm 砍掉"减均值"
只保留缩放:x / sqrt(mean(x²)) × w。少一次均值计算 → 更快,效果无差。LLaMA 之后成为默认。
python
# dsv4 RMSNorm
var = x.square().mean(-1, keepdim=True)
x = x * torch.rsqrt(var + eps)
return self.weight * x
QK-Norm:给注意力打分上"限流阀"
Q 和 K 点积前先各自归一化 → logits 量级可控,训练不炸。DS-V4 / GLM-5.2 都在用。
python
# dsv4 QK-Norm(注意力内)
q = q * rsqrt(mean(q**2)) # 打分前
kv = self.kv_norm(kv) # 缓存前
副产品:有了 QK-Norm,DS-V4 的 Muon 优化器就不再需要 QK-Clip 补丁。
思想:归一化的本质是把"量纲"从学习问题中剥离,让模型只学方向、不学尺度。
2.4 partial RoPE 与 NoPE:位置信息"按需分配"
2026 出现的新分歧------不是所有层、所有维度都要做位置编码:
| 模型 | 做法 |
|---|---|
| DS-V4 | 只旋转最后 64 维 ;KV 被压缩成"块摘要"后逐 token 精确位置已无意义,只对少量维度加 RoPE,并对注意力输出做反向旋转消除绝对位置泄漏 |
| Qwen3.6 | 只旋转 25% 维度;全量注意力层保留少量旋转维度维持位置感,其余维度专心做内容匹配 |
| Kimi-K3 | MLA 层完全 NoPE;全量注意力层不加任何位置编码,位置信息由 KDA 线性注意力层的短卷积 + 衰减提供 |
设计动机:RoPE 维度与 KV 压缩 / 低精度存储存在兼容性问题,"给多少位置信息"变成了可调的设计旋钮。
第三部分 · 注意力的瘦身之路
注意力瘦身可整理成四条并行路线:
- 少存 KV:MHA → MQA → GQA → MLA
- 少看:DSA 稀疏选择
- 换范式:线性注意力(KDA / Gated DeltaNet)
- 压缩历史:CSA / HCA
3.1 KV cache 压缩:MHA → MQA → GQA → MLA
思路演进 = 每 token 要存的东西越来越少:
| 方案 | 做法 | 时间 |
|---|---|---|
| MHA | 每头各存一份 K/V(如 128 头 × 128 维) | 基线 |
| MQA | 所有头共享 1 份 K/V;cache 暴降,质量略损 | 2019 |
| GQA | 折中:每 4~8 头共享 1 份;质量 ≈ MHA,cache 大降 | 2023 |
| MLA | 不存 K/V,存压缩 latent,用时再重建 | 2024 |
MLA 的关键转折 :从"减少 KV 的头数"变成"把 KV 本身压成低秩向量"------压缩对象变了。
MLA 细节:存"压缩包"而非原件
- 做法 :每 token 只存一个低维 latent 向量 c(512 维 + 64 维 RoPE = 576 维),比全量 K/V 小一个数量级;注意力计算时用上投影矩阵临时重建各头的 K/V。
- 为什么效果不降 :重建矩阵可以吸收进 Q/O 投影,数学上等价于一种参数化的低秩注意力------不是近似,是换了参数化方式。
python
# kimi_k3 KimiMLAAttention
kv_a = Linear(7168, 512 + 64) # 下投影:隐层 → 低秩 latent(缓存它,共 576 维)
kv_b = Linear(512, heads*(nope+v_dim)) # 上投影:latent → 各头 K/V(用时重建)
# Q 侧同样低秩:7168 → 1536 → 各头
KV cache 对比(每 token) :GQA-8 约 2K 维 → MLA 576 维;DS-V4 进一步压到"单头 latent + 块压缩"。
MLA 提出 :由 DeepSeek-V2(2024.05) 提出,如今被 DS-V3/V4、GLM-5.2、Kimi-K2/K3 全部采用。
GLM-5 报告的坑 :MLA 配 Muon 优化器会输给 GQA-8;解法是把上投影矩阵按头拆开分别正交化(Muon Split)。
3.2 稀疏选择:DSA 稀疏注意力
思想 :长上下文中 90% 的注意力是冗余的。先用一个极便宜的"索引器(indexer) "给所有历史 token 打分,只选 top-2048 个进入真正的注意力计算。
索引器为什么便宜:少头(32)、低维(128)、ReLU 打分、FP8/FP4 计算------比主注意力便宜一个数量级。
如何训练 :先冻结模型、用全量注意力分布蒸馏索引器;再联合稀疏训练。
python
# modeling_glm_moe_dsa Indexer
scores = q @ k.T * scale # 轻量打分
scores = relu(scores)
index = (weights @ scores) # 按头加权求和成总重要性
topk = index.topk(2048).indices
复杂度 :主注意力从 O(L²) 降为 O(L·k),k=2048 固定 → 1M 上下文也不再爆炸。
归属 :开创者 DeepSeek-V3.2(2025);采用者:GLM-5 / 5.2、DS-V4(与压缩叠加)。
3.3 索引复用:IndexCache(连索引器也省 3/4)
问题 :索引器本身也是 O(L²),且每层都要独立跑。200K 上下文时它占 prefill 延迟的 81% ------稀疏化之后,选择器成了新瓶颈。
关键观察 :相邻层选出的 top-k token 有 70~100% 重叠 → 大部分层的索引计算是重复劳动。
做法 :把层分成少数 Full 层 (自己跑索引器)和多数 Shared 层(直接复用最近 Full 层的 top-k 索引)。
# 层类型循环(FSSS)
F S S S F S S S ...
# index_topk_freq = 4, index_topk = 2048
效果 :去掉 75% 的索引器计算 ;1M 上下文每 token FLOPs 进一步下降;prefill 加速 1.82×,decode 加速 1.48×。
来源:《IndexCache: Accelerating Sparse Attention via Cross-Layer Index Reuse》,arXiv:2603.12201(2026-03-12)。
3.4 线性注意力混合:KDA / Gated DeltaNet
思想 :不再"记住所有历史 token",改为维护一个固定大小的记忆状态 S ,每来一个新 token 就"先遗忘一点,再写入一点"(delta 规则)。计算量与长度成线性 O(L)。
代价:记忆是有损压缩------精确检索("第 317 页那句话")能力弱于全量注意力。
共同答案:混合架构 。Kimi-K3 与 Qwen3.6 都选 3:1------3 层线性注意力 + 1 层全量注意力,全量层负责兜底精确检索。
python
# kimi_k3 KimiDeltaAttention
q/k/v = ShortConv + Swish # 局部感知
q, k = L2Norm(q), L2Norm(k)
beta = sigmoid(W_b @ x) # 写入强度
alpha = 衰减门 # 逐通道遗忘
# 状态更新:S = 遗忘(S) + 写入(kv)
# 输出 = q @ S,再加全秩输出门
- Kimi-K3 :93 层中 69 层 KDA + 24 层 MLA → KV cache 只需存 1/4 的层。
- Qwen3.6:延续 Qwen3-Next 血统,Gated DeltaNet + 每 4 层 1 层全量注意力。
GLM-5 消融:naive 滑窗交替在 128K 检索任务上暴跌 30 分 → 全量注意力层不是装饰,是必需品。
混合架构的理论支撑:arXiv:2605.16640《Provably Shorter Scratchpads in Hybrid DeltaNet-Attention Decoders》证明------Gated DeltaNet + Gated Attention 的混合架构在"奇偶条件检索"任务上只需常数 scratchpad,而纯 Gated DeltaNet 无此解、纯 Gated Attention 至少需多项式 scratchpad。混合不是妥协,而是有表达力优势。
3.5 压缩注意力:CSA / HCA(DS-V4 的第四条路)
思想 :不看也不记,直接压缩历史------把相邻 token 通过学习到的门控池化合并成"摘要条目",远端历史只看摘要,近处看原文。
三种层各司其职:
- 滑窗层(128):只管最近 128 个 token,保局部细节。
- CSA 层 :4:1 压缩 + DSA 稀疏选择 top-1024 块。
- HCA 层:128:1 极端压缩,保留"全文大纲"。
python
# dsv4 Compressor.forward
kv = wkv(x); score = wgate(x)
# 每 ratio 个 token 一组,softmax 门控加权合并成 1 个
kv = kv.unflatten(1, (-1, ratio))
kv = (kv * score.softmax(2)).sum(2)
# 相邻块重叠一半,平滑边界
1M 上下文 :FLOPs 仅 DS-V3.2 的 27% ,KV cache 仅 10%。
与 DSA 的区别:DSA 是"选重要的看",CSA 是"把不重要的合并"------DS-V4 把两者叠在一起用。
3.6 四条路线对比
| 稀疏选择(DSA) | 线性注意力混合 | 压缩注意力(CSA/HCA) | KV 低秩压缩(MLA,基线) | |
|---|---|---|---|---|
| 一句话思路 | 选 top-k 重要 token 看 | 固定状态递推记忆 + 全量层兜底 | 相邻 token 池化成摘要 | 把 K/V 压成低秩 latent |
| 代表模型 | DS-V3.2、GLM-5.2 | Kimi-K3、Qwen3.6 | DS-V4 | DS-V3/V4、GLM-5.2 |
| 长文本精确检索 | 好(选中即原文) | 靠 1/4 全量层补救 | 中等(远端只有摘要) | 好 |
| KV cache | 低秩 latent + 索引 | 仅存 1/4 的层 | 滑窗 + 压缩条目 | 576 维 latent |
| 训练成本 | 可后期改造 | 需原生预训练 | 需原生预训练 | 原生 / 可选后期 |
没有银弹:四条路线都在"保精确检索"与"省成本"之间找各自的平衡点------这也是第七部分各家取舍的主线。
第四部分 · FFN 的 MoE 化
4.1 从 Dense FFN 到 SwiGLU
传统 FFN(2017) :两个线性层 + ReLU(GPT/BERT 换成 GELU),升维 4 倍再降回(d→4d→d)。逐 token 变换,是模型"存知识"的主要场所,约占 2/3 参数。
现代主流 SwiGLU(PaLM/Llama 推广) :三个矩阵,gate 与 up 两支并行,silu(gate) 逐元素乘 up,再由 down 投回。中间维从 4d 调整为 8d/3,总计算量不变(两者参数量都是 8d²)。
python
# dsv3 MLP(dense 层与专家共用)
gate_proj = Linear(d, inter) # 门控支
up_proj = Linear(d, inter) # 内容支
down_proj = Linear(inter, d)
def forward(x):
g = F.silu(gate_proj(x))
return down_proj(g * up_proj(x))
直觉:多出的 gate 支是"内容相关的开关"------哪些维度放行由输入动态决定,比形状固定的 ReLU 表达力更强。
4.2 MoE 的基本思想
核心思想 :把 FFN 复制成 N 份"专家",加一个轻量路由器;每个 token 只激活 top-k 个专家。总参数量可以暴涨,而每 token 计算量基本不变------容量与计算解耦。
DeepSeekMoE 的两个改良(V2/V3 奠定):
- 细粒度专家:把专家切得更细,选多个(如 256~384 选 8),组合更灵活。
- 共享专家:1 个所有 token 都走的专家,兜底通用知识。
规模演进:Mixtral(2023,8 选 2)→ DS-V3(2024,256 选 8+1)→ Kimi-K3(2026,896 选 16+2)。
MoE 前向 :token x → 路由器 Router → 选 top-k 专家 → 加权汇总。
4.3 负载均衡:DS-V3 的"无辅助损失"方案(noaux)
问题:如果路由不均,少数专家被挤爆、多数专家闲置(训练崩溃或能力浪费)。老办法是加负载均衡辅助损失------但它与主损失打架,伤性能。
DS-V3 的巧思 :给每个专家加一个偏置 bias,只影响"选谁",不影响"权重多少"。专家太火就调低它的 bias,太闲就调高------均衡完全与梯度解耦。
python
# dsv3 Gate.forward
scores = sigmoid(x @ W) # 原始分
sel = scores + bias # bias 只用于选人
topk = sel.topk(8)
w = scores[topk] / scores[topk].sum() # 归一化用原始分,不带 bias
类比:挂号时给冷门科室"优先通道",但诊断水平(权重)不受影响。
影响 :GLM-5.2、Kimi-K3 全部采用 noaux 方案 → 成为行业标配。DS-V3 另有分组路由:8 组选 4 组,限制通信范围。
反例 :Qwen3.6 保留了微小的辅助均衡损失(coef≈0.001),没有跟 noaux 的风------这是刻意的稳健选择,不是遗漏。
4.4 路由的演进:打分函数与 Hash 路由
打分函数的演进:
- softmax(早期):专家间互相抑制,头部效应强。
- sigmoid(DS-V3 起):各专家独立打分,更稳。
- sqrt(softplus)(DS-V4):梯度更平滑,配合 Muon。
python
# dsv4 打分函数
scores = sqrt(softplus(x @ W)) # scoring_func: sqrtsoftplus
# dsv4 Hash 路由(前 3 层)
eid = tid2eid[token_id] # 不用学习的路由器,直接查表
DS-V4 的 Hash 路由(前 3 层) :训练初期路由器还没学好,随机分配会造成专家"饿死"。前 3 层干脆不用路由器,按 token id 查表(tid2eid)直接指定专家------天然均衡,开局即稳。
4.5 LatentMoE 与 Quantile Balancing(Kimi-K3)
Stable LatentMoE 思想 :专家的输入输出维度从 7168 砍到 3584 (共享降维),所有路由专家在低维潜空间 里计算。省下的参数预算全拿去买更多专家 → 896 个,选 16 个。
python
# kimi_k3 LatentMoE
h = down_proj(x) # 共享降维 7168 → 3584
h = rmsnorm(h)
h = moe_route(h, n=896, topk=16) # 在低维空间里路由 + 专家计算
y = up_proj(h) # 共享升维 3584 → 7168
Quantile Balancing :896 个专家规模下,DS 式逐步调 bias 收敛太慢。Kimi 改为直接按分位数一步解出"让每个专家恰好分到定额 token"的 bias------不再是"火了就降一点"的迭代试探,而是按统计数据一次算到位。
结果 :Kimi-K3 稀疏比 27×,四家最高。
4.6 MoE 成绩单:参数与激活的剪刀差
| DS-V3 | DS-V4-Pro | GLM-5.2 | Kimi-K3 | Qwen3.6-35B | |
|---|---|---|---|---|---|
| 总参数 | 671B | 1.6T | ≈750B | 2.8T | 35B |
| 每 token 激活 | 37B | 49B | 40B | 104B | 3B |
| 激活比例 | 5.5% | 3.1% | 5.4% | 3.7% | 8.6% |
| 专家数 / top-k | 256 / 8+1 | 384 / 8+1 | 256 / 8+1 | 896 / 16+2 | 256 / 8+1 |
| 路由特点 | sigmoid+noaux 分组 | sqrt(softplus)+Hash 前3层 | sigmoid+noaux | sigmoid+noaux+Quantile 均衡 | softmax+aux |
趋势 :总参数向 T 级狂奔,激活参数被压在 100B 以内------"大记忆、小计算"成为旗舰共识。
第五部分 · 残差、激活与稳定化
5.1 残差升级(方案一):DS-V4 的 mHC
标准残差的瓶颈:所有历史信息都挤在同一条隐状态流里累加,深层时浅层信号被反复稀释。
mHC(超连接)思想 :残差流扩成 4 路并行 (hc_mult=4),每层入口把 4 路混合成 1 路计算、出口再写回 4 路。容量翻倍,浅层信息可以走"快车道"直达深层。
关键约束 :混合矩阵用 Sinkhorn 迭代 投影到双随机矩阵流形(行列和都为 1)→ 混合等价于加权平均,信号不会指数放大,深堆叠不发散。
python
# dsv4 HyperConnection
# 4 路残差流 h (B, L, 4, D)
x = mix_in(h) # 4 路 → 1 路(混合)
y = block(x) # 注意力 / MoE 计算
B = sinkhorn(B_raw, iters=20) # 双随机:行和 = 列和 = 1
h = h + mix_out(y, B) # 写回
直觉:4 条路之间只做"加权平均"式的交换------总能量守恒,不会越传越爆。
5.2 残差升级(方案二):Kimi-K3 的 AttnRes
同一个问题,不同解法 :DS-V4 拓宽残差流;Kimi 不改流的宽度,而是让深层能对浅层输出"做注意力"。
做法 :每 ~12 层为一个 block,把各 block 的残差快照存下来;后面的层用"伪 query + RMSNorm"对历史快照打分、加权融合------残差从固定累加 变成可选择读取。
python
# kimi_k3 AttnRes
snaps.append(h) # 每 12 层存一个残差快照
q = pseudo_query(h) # 深层读取:伪 query 对快照打分
s = softmax(q @ snaps.T)
h = h + s @ snaps # 融合进当前隐状态
工程取舍 :完整版 O(L·d) 显存太贵 → 实用版按 block 聚合,只留 ~8 个快照(93 层 / 12 ≈ 8)。
对比:mHC 改"流的结构",AttnRes 改"读的方式"------目标相同:让浅层信息不被深层淹没。
5.3 有界激活:给 SwiGLU 加"安全阀"
问题:SwiGLU 的两个因子(gate 与 up)都无界 → 激活值出现极端离群点。FP8/FP4 低精度下,少数离群点会吃掉整个动态范围,量化误差暴增。
DS-V4:硬钳制
python
x = silu(gate) * up
x = x.clamp(-10, 10) # swiglu_limit = 10(gpt-oss 风格)
Kimi-K3:软钳制(SiTU-GLU)
python
g = 4 * tanh(gate/4) * sigmoid(gate) # β₁ = 4
u = 25 * tanh(up/25) # β₂ = 25
x = g * u # |输出| ≤ 4×25 = 100
近原点处行为 ≈ SwiGLU,远离原点自然饱和(tanh 限幅)。
设计动机 :低精度训练(FP4/FP8)要求激活"没有惊喜"------有界激活是量化的前提条件。
5.4 稳定化小件:输出门控与 attention sink
注意力输出门(Kimi / Qwen):注意力输出乘上一个 sigmoid 门(按通道开关)。抑制"噪声头"的输出,让模型学会关掉不有用的注意力头------训练更稳,长上下文检索更准。
attention sink(DS-V4):给每个头一个可学习的 sink logit,加在 softmax 分母里------相当于允许某头"什么都不看",把注意力分数倒进下水道。缓解 softmax 必须归一带来的强制关注问题。
python
# kimi_k3 输出门
attn_out = o_proj(attn)
attn_out = attn_out * sigmoid(gate)
# dsv4 attention sink(每头 1 个可学习标量)
logits = cat([q@k.T, sink], dim=-1)
attn = softmax(logits)[..., :-1]
共同点:都是"给 softmax 注意力装开关"------让模型可以表达"这步不关注任何东西"。
5.5 Muon:优化器进架构
从 AdamW 到 Muon:更新规则的"矩阵化"
Adam/AdamW :每个参数两个状态(一阶动量 m + 二阶矩 v),更新 = m/√v------逐坐标除梯度 RMS。它是"对角"缩放:只看每个参数自己的历史,看不到矩阵的方向结构。
Muon 的三处改动:
- 砍掉二阶:只留 Nesterov 动量,优化器状态减半。
- 动量矩阵正交化 :Newton-Schulz 迭代近似
UVᵀ------把更新矩阵的奇异值全部拉向 1,每个奇异方向获得相同的更新幅度。 - 分层混用:只对 2D 权重矩阵用 Muon;embedding、输出头、norm 等仍走 AdamW。
python
# Muon 一步更新(仅 2D 权重矩阵)
G = nesterov_momentum(grad) # 一阶
X = G / (norm(G) + eps)
for _ in range(5): # Newton-Schulz 迭代(原版约 5 步)
A = X @ X.T
B = b*A + c*(A@A) # a,b,c 为拟合系数
X = a*X + B@X
# X ≈ U Vᵀ:奇异值全拉向 1
W -= lr * scale * X
# embedding / 输出头 / norm 仍走 AdamW
- 缩放对齐 :更新乘
0.2·√(max(fan_in, fan_out)),RMS 与 AdamW 对齐 → 学习率可直接迁移。 - NS 迭代只是几次 matmul,BF16 可跑,远比 SVD 便宜。
原版与定制 :原版 Muon 的 Newton-Schulz 迭代约 5 步;DS-V4 采用两阶段混合 Newton-Schulz(前 8 步快速收敛系数 + 后 2 步精确归一系数,共 10 步)。两者是"通用实现"与"生产定制"的关系。
来源 :Keller Jordan 2024 年提出;Moonlight(Kimi,2025) 首次在 MoE 规模上验证可用,万亿级验证见后续 Kimi K2/K3。
对架构的反作用:架构与优化器是耦合系统
- GLM:Muon Split------MLA 的上投影按头拆开正交化,否则输 GQA-8。
- Kimi:Per-Head Muon------同一思路,两家独立收敛。
- DS-V4:有了 QK-Norm 就不再需要 QK-Clip 补丁。
为什么按头拆:MLA 的上投影把多个头的 K/V 拼在一个大矩阵里,整矩阵正交化会让各头的奇异方向互相妥协;按头拆开各自正交化,"方向拉齐"才真正作用到每个头------这个坑只有真的配 Muon 训练才会暴露。
启示 :架构、优化器、归一化是一个耦合系统------评价任何一个改动都要说明"在什么训练配置下"。"MLA 打不过 GQA"的结论,在 AdamW 和 Muon 下答案不同。
5.6 稳定化工具箱
| 机制 | 解决的问题 | 代表模型 |
|---|---|---|
| RMSNorm / QK-Norm | 注意力 logits 爆炸 | 四家全部 |
| mHC 超连接 | 深层信号稀释 + 混合发散 | DS-V4 |
| AttnRes | 浅层信息被深层淹没 | Kimi-K3 |
| 有界激活(clamp / SiTU) | 低精度下激活离群点 | DS-V4 / Kimi-K3 |
| 输出门控 | 噪声注意力头干扰 | Kimi-K3 / Qwen3.6 |
| attention sink | softmax 强制关注问题 | DS-V4 |
| Muon 系优化器 | 各方向更新幅度不均 | DS-V4 / GLM-5.2 / Kimi-K3 |
规律 :这些机制单独看都很小,合起来决定了万亿参数模型能否稳定训练------"不炸"本身就是一种架构能力。
第六部分 · 推理加速(训推协同)
6.1 投机采样与 MTP
瓶颈:自回归逐 token 生成,每个 token 一次完整前向------延迟与输出长度成正比,GPU 大部分时间在等显存搬运。
投机采样(2023) :小模型先"打草稿"连猜 γ 个 token;大模型一次前向并行验证整段,接受最长一致前缀再加 1 个奖励 token。拒绝采样保证输出分布与大模型完全一致------加速且无损。
python
# 一个投机解码回合
draft = draft_model(prefix, gamma=4) # 草稿:连猜 γ 个
logits = target.forward(prefix + draft) # 验证:大模型一次前向并行打分
acc = longest_match(draft, logits) # 从左到右,接受最长一致前缀
prefix += acc + 1 # 被拒处由大模型补 1 个正确 token
MTP(DeepSeek-V3,2024):不再外挂小模型------训练时给主模型挂 k 个轻量模块预测未来 k 个 token(共享词嵌入与输出头);推理时它们就是自带的草稿器。训练信号更密,推理近乎免费加速。
直觉:大模型"判卷"比"写作文"便宜------并行验 4 个 ≈ 串行写 1 个。
接受长度:DS-V3.2 ≈ 2.55 token/轮;GLM-5.2 参数共享 MTP ≈ 2.76(约 +8%);Qwen3.6 用多步 MTP 训练。
6.2 DSpark:把草稿器做到"又快又准"(2026.07)
草稿器的两难:
- 自回归草稿器(EAGLE3):猜得准但逐个生成、慢。
- 并行草稿器(DFlash):一次出 γ 个、快,但各位置独立预测------会拼出"of problem"这类跨位置矛盾,后缀接受率崩塌。
DSpark 解法一:半自回归
重的并行主干一次算出所有位置的基础 logits,再加一个极小的顺序头(Markov 低秩转移 / RNN 门控状态,秩 256)按已采样的前缀修正------速度接近并行,连贯性接近自回归。
解法二:置信度调度验证
每个草稿位置输出置信度,前缀存活概率连乘;调度器按引擎当前负载决定每个请求验证多长------空闲多验、拥挤只验有把握的,不浪费 batch 容量。
python
# Markov 顺序头(低秩转移,秩 r=256)
B = W1[x_prev] @ W2
logits_k = U_k + B # 主干 logits + 前缀修正
# 置信度头:该位置通过验证的概率
c_k = sigmoid(w @ [h_k, emb(x_prev)])
# 前缀存活概率 = c_1 * ... * c_k
效果:
- 接受长度:比 EAGLE3 +30%、比 DFlash +17%。
- 线上 DeepSeek-V4 用户速度 +60~85%(吞吐持平,基线 MTP-1)。
- 开源:V4 checkpoint + DeepSpec 训练库。
来源:《DSpark: Confidence-Scheduled Speculative Decoding with Semi-Autoregressive Generation》,arXiv:2607.05147(2026-07-06)。
定位:MTP 是"训练时顺带拿草稿器",DSpark 是"为推理专门设计草稿器"------已成 V4 生产方案。
6.3 ViT 与 LLM 的结合
通用三步:
- 切 patch:图片切成 14×14 小块,每块线性映射成一个"视觉 token"。
- ViT encoder:纯 Transformer 对视觉 token 做双向注意力。
- projector:小 MLP 把视觉特征对齐到 LLM 词嵌入空间------视觉与文本 token 拼成一条序列,LLM 零改动直接读。
python
# 视觉 token 进 LLM(LLaVA 式伪码)
patches = Conv2d(3, dv, 14, stride=14)(img) # 图片 → patch 序列
v = ViTEncoder(patches) # 视觉特征
v = MLP_projector(v) # dv → d_llm
h = cat([text_emb, v], dim=1) # 与文本 embedding 拼接
out = LLM(inputs_embeds=h) # LLM 零改动
三代做法回顾:
- CLIP(2021):双塔对比学习,图文对齐但不会生成。
- LLaVA(2023):冻结 CLIP-ViT + 线性 projector 接 LLM,便宜有效。
- 原生多模态(2025+):ViT 与 LLM 从头联合训练(Kimi MoonViT-V2 / Qwen ViT,各 27 层)。
趋势 :从"外挂对齐"到"原生联合训练",视觉塔相对 LLM 越来越小(27 层 vs 93 层),职责收敛为"把像素变成 LLM 能读的 token"。Qwen 系用 M-RoPE,把时间/高/宽三个维度的位置分开编码。
第七部分 · 四大旗舰与横向对比
7.1 DeepSeek-V3 → V4:一条血统的演进史
| 维度 | V3(2024.12) | V4-Pro(2026.04) |
|---|---|---|
| 注意力 | MLA 全量注意力 | 滑窗 + CSA 压缩 + HCA 重压缩 |
| KV cache | 576 维 latent / token | 滑窗 128 + 压缩块(1M 时仅 10%) |
| 残差 | 标准残差 | mHC 四路超连接(Sinkhorn 约束) |
| MoE 路由 | sigmoid + noaux + 分组 | sqrt(softplus) + 前 3 层 Hash 路由 |
| 激活函数 | SwiGLU | 钳制 SwiGLU(limit=10) |
| 精度 | FP8 混合精度(开创) | FP4 专家 + FP8 其余(QAT) |
| 优化器 | AdamW | Muon(混合 Newton-Schulz) |
| 上下文 | 128K(YaRN 外推) | 1M 原生 |
设计哲学:一切改动为"1M 上下文可用"服务------1M 时单 token FLOPs 仅为 V3.2 的 27%。
7.2 GLM-5.2:站在 DSA 肩膀上的工程优化
骨架:沿用 DeepSeek-V3.2 路线(MLA + DSA + 细粒度 MoE + MTP),自家增量集中在"把效率压榨到极致"。
三个自家增量:
- IndexCache:4 层共享一次索引 → 1M FLOPs 再降。
- DSA 改造成本极低:仅 20B tokens(对比 DS-V3.2 的 943.7B)。
- MTP 参数共享:投机解码接受长度 2.76 vs V3.2 的 2.55。
训练细节里最值得记住的两条:
- Muon Split:MLA 配 Muon 的坑,按头拆分正交化解决。
- 高效注意力消融:所有高效变体在细粒度检索上仍有 5~7 分固有差距 → 全量注意力层必须保留。
规模:总参约 750B / 40B 激活 / 78 层 / 1M 上下文。
路线评价:务实------用别人验证过的机制 + 极致工程,风险低、见效快。GLM-5 报告的消融数据是评估"要不要全改线性/稀疏"时最诚实的参考。
7.3 Kimi-K3:最激进的架构实验
三维叙事(官方报告的组织框架):
- token 混合 :69 层 KDA 线性注意力 + 24 层 Gated MLA(完全 NoPE);位置信息全交给线性层。
- 层混合:AttnRes------跨 block 的残差注意力,深层直接读取浅层快照。
- 通道混合:Stable LatentMoE------专家搬进 3584 维潜空间,896 专家选 16,稀疏比 27×。
数值设计即架构 :KDA 的衰减门下界 g_min=−5 是经过计算的------16 token tile 内累积衰减保证落在 BF16 动态范围内,所有 tile 都能走 Tensor Core 稠密矩阵乘。数值范围设计直接决定硬件利用率。
规模:2.8T 总参 / 104B 激活 / 93 层 + 27 层视觉塔(原生多模态)/ MXFP4 全程 QAT / 无 MTP。技术报告:arXiv:2607.24653(2026-07-27)。
7.4 Qwen3.6:成熟架构的"下放"与稳定化
路线:延续 Qwen3-Next 血统------Gated DeltaNet 线性注意力 + 每 4 层 1 层全量注意力 + MTP,不加新花样。
值得注意的细节:
- 全量层:GQA 16Q/2KV 头、head_dim 256、partial RoPE 25%、输出门。
- MoE:256 专家选 8+1,专家中间维仅 512(极细粒度)。
- 保留微小辅助均衡损失(coef≈0.001)------没跟 noaux 的风。
- MTP 多步训练,配合 NEXTN 投机解码。
规模:总参 35B / 激活 3B;上下文 256K 原生,可外推 ~1M;原生多模态 27 层 ViT。
上一代旗舰 :Qwen3-Next 的主线型号为 Qwen3-Next-80B-A3B(总参 80B、激活 3B)。其验证过的混合架构在半年内完整下放到 35B-A3B(激活仅 3B)甚至 27B dense。
最新动向(2026-10) :截至 2026-10,Qwen 已迭代出 Qwen3.5、Qwen3.8 Max 等后续型号------架构创新沉淀后的"下沉节奏"比课件成文时更快。
7.5 横向对比
架构维度
| 维度 | GLM-5.2 | DS-V4 | Kimi-K3 | Qwen3.6 |
|---|---|---|---|---|
| 注意力路线 | MLA+DSA (top-2048) | CSA 压缩+DSA+HCA+滑窗 | KDA 线性 69 层 +MLA 24 层 | GDN 线性 + 1/4 全量 |
| KV cache | 576 维 latent | 滑窗 128 + 压缩块 | 仅 24 层有 KV | 仅 1/4 层有 KV |
| FFN | 256 选 8+1 | 384 选 8+1(Hash 前 3 层) | LatentMoE 896 选 16+2 | 256 选 8+1(极细粒度) |
| 残差 | 标准残差 | mHC 四路 | AttnRes | 标准残差 |
| 激活 | SwiGLU | 钳制 SwiGLU | SiTU-GLU | SwiGLU |
| 位置编码 | RoPE | partial 64 维 + 反旋转 | MLA 层 NoPE | partial 25% |
| MTP | 有(约 +8% 接受) | 有(HC 流上) | 无 | 有(多步) |
| 精度 | BF16/FP8 | FP4+FP8 QAT | MXFP4 QAT | BF16 |
规模、效率与设计哲学
| GLM-5.2 | DS-V4-Pro | Kimi-K3 | Qwen3.6-35B | |
|---|---|---|---|---|
| 总参 / 激活 | ≈750B / 40B | 1.6T / 49B | 2.8T / 104B | 35B / 3B |
| 原生上下文 | 1M | 1M | 1M | 256K(可外推 1M) |
| 长文本路线 | 稀疏选择 | 压缩 + 稀疏 | 线性为主 | 线性为主 |
| 训练量 | 28.5T tokens | 33T tokens | 未公开 | 未公开 |
| 多模态 | 纯文本 | 纯文本 | 原生 ViT | 原生 ViT |
| 设计哲学 | 务实工程、效率压榨 | 为 1M 而生、系统重构 | 激进实验、三维混合 | 成熟配方、快速下放 |
没有"最强架构":Kimi 证明线性路线可行,DS 证明压缩路线可行,GLM 证明稀疏改造最便宜------选择取决于你的训练预算与场景。
7.6 演进总览与展望
五条演进轴线
| 轴线 | 变化 | 代表 |
|---|---|---|
| 注意力 | 全量 → 按需 | MLA 低秩压缩 / DSA 稀疏 / 线性混合 / 压缩注意力------多条路线并存 |
| FFN | dense → 极端稀疏 | 256~896 专家、激活比 3~9%、LatentMoE 潜空间 |
| 残差流 | 加法 → 可学习混合 | mHC 四路(DS-V4)/ AttnRes 跨块读取(Kimi-K3) |
| 稳定化 | LayerNorm → 工具箱 | RMSNorm、QK-Norm、有界激活、输出门、sink |
| 训推协同 | 分离 → 联合设计 | MTP / DSpark 投机解码、FP4/FP8 QAT、Muon 进架构 |
一句话:2026 的旗舰早已不是"Transformer 堆层"------多个方向的合力让 1M 上下文与 T 级参数同时可用。
展望
- 多条注意力路线并存:稀疏 / 线性 / 压缩各有拥趸,2026 没有统一答案------下一代可能是它们的进一步融合。
- 架构与硬件协同加深:FP4 QAT、Tensor Core 友好的数值范围设计------架构师必须懂硬件。
- 优化器成为架构变量:Muon 改变了"什么架构训得动"的边界,评价改动要带上训练配置。
- 给小团队的建议:GLM 的路线最可复制------站在已验证的机制上,用消融数据做取舍,把效率工程做扎实。
2026-08 → 2026-10 的新增动向
| 时间 | 事件 | 说明 |
|---|---|---|
| 2026-07-27 | Kimi K3 技术报告发布 | 2.8T/104B,Stable LatentMoE,对标 Claude Fable 5 / GPT-5.6 Sol |
| 2026-07-06 | DSpark 论文 | 已在 DeepSeek-V4 生产部署,V4 提速 60~85% |
| 2026-08+ | Qwen 迭代至 Qwen3.5 / Qwen3.8 Max | 印证"下沉节奏加快" |
| 2026-08+ | 混合架构获得理论支撑 | arXiv:2605.16640 证明 Gated DeltaNet+Attention 混合有表达力优势 |
| 2026-08~10 | 旗舰白盒可解释性研究增多 | 针对 GLM-5.2 / Kimi-K3 的内部表征、奖励黑客监控等研究密集出现 |
结论:三大注意力路线并存、MoE 极端稀疏、训推联合设计 这条主线在 2026-10 依然成立;变化最快的是版本号与下沉速度,而非架构方向。
实践清单
评估一个"高效注意力改动"的检查清单
- 明确基线:改动前的模型规模、上下文长度、硬件、推理框架(vLLM / SGLang?)。
- 分别测三条曲线:prefill 延迟、decode 吞吐、长文本精确检索得分(不要只看平均分)。
- 算清 KV cache 的真实占用:注意"每 token 存多少维"与"哪些层有 KV"是两个口径。
- 核对索引器/选择器是否成为新瓶颈:稀疏化后 O(L²) 的成本往往转移到索引器。
- 保留全量兜底层:消融显示全改线性/稀疏会显著损失细粒度检索(GLM-5 报告:5~7 分固有差距)。
- 说明训练配置:MLA + Muon 与 MLA + AdamW 的结论可能相反。
成本/资源模型速记
- KV cache ∝ 上下文长度 × 每 token 存储维度 × 有 KV 的层数------三个因子都可动。
- MoE 每 token 计算 ≈ 激活参数 ,与总参数解耦;但显存仍由总参数决定。
- 投机解码的收益 = 接受长度提升 × 验证成本比 ;
+60~85%这类数字一定要带基线(此处基线为 MTP-1)。
常见误区速查表
| 误区 | 正确理解 |
|---|---|
| "MLA 是 KV 的近似压缩" | 是低秩重参数化,数学上可等价吸收进 Q/O,非近似 |
| "稀疏化就能无限扩上下文" | 索引器本身仍是 O(L²),需再做层间复用(IndexCache) |
| "线性注意力可以完全替代全量注意力" | 记忆有损,精确检索弱;业界均为混合架构(约 3:1) |
| "MoE 激活少 = 显存小" | 激活少只省计算;显存仍受总参数约束 |
| "归一化只是加速" | QK-Norm 直接决定训练稳定性,且与优化器选择耦合 |
| "无辅助损失 = 什么都不用管" | noaux 只把"选人"与梯度解耦,专家容量仍需偏置调节 |
| "位置编码越全越好" | 2026 趋势是 partial RoPE / NoPE,按需分配 |
附录 · 术语表与参考资料
术语表
| 术语 | 含义 |
|---|---|
| MHA / MQA / GQA / MLA | 多头注意力 / 多查询 / 分组查询 / 多头潜在注意力 |
| KV cache | 推理时缓存的历史 K/V |
| DSA | DeepSeek Sparse Attention(DeepSeek-V3.2 提出) |
| CSA / HCA | 压缩稀疏注意力 / 极端压缩注意力(DS-V4) |
| KDA | Kimi Delta Attention(Kimi 的线性注意力) |
| Gated DeltaNet | 门控 DeltaNet 线性注意力(Qwen 系采用) |
| mHC | 多路超连接(DS-V4) |
| AttnRes | 注意力式残差读取(Kimi-K3) |
| MoE / noaux | 混合专家 / 无辅助损失负载均衡 |
| QAT | 量化感知训练 |
| MTP | 多 token 预测(Multi-Token Prediction) |
| SiTU-GLU | Kimi-K3 的有界激活变体 |
参考资料
- Kimi K3 技术报告:arXiv:2607.24653《Kimi K3: Open Frontier Intelligence》(2026-07-27)
- DSpark:arXiv:2607.05147《DSpark: Confidence-Scheduled Speculative Decoding with Semi-Autoregressive Generation》(2026-07-06)
- IndexCache:arXiv:2603.12201《IndexCache: Accelerating Sparse Attention via Cross-Layer Index Reuse》(2026-03-12)
- GLM-5:arXiv:2602.15763《GLM-5: from Vibe Coding to Agentic Engineering》(2026-02-17)
- 混合架构理论:arXiv:2605.16640《Provably Shorter Scratchpads in Hybrid DeltaNet-Attention Decoders》(2026-05-15)
- 课件自述来源:
llm_arch_evolution/(调研报告 + 模型源码 + 技术报告 PDF,随课件发布)