第0章 什么是 Kimi K3

论文 1 Introduction(第1-2页)

在跳进任何公式之前,先搞清楚一件事:Kimi K3 到底是什么,它站在 AI 发展的哪个位置上,为什么值得花几个小时读它。

学完这一章你应该能做到

  • 用一句话说清楚 Kimi K3 的核心卖点
  • 解释「两条 scaling 轴」分别指什么
  • 说清楚 K3 相比 K2 提升了哪些维度
  • 知道这篇论文的整体结构
无需前置知识。这里从零开始。

0.1 两条 scaling 轴

大语言模型的发展沿着两条独立的轴线在走。

第一条叫训练时的 scaling——把模型做得更大,喂更多数据,烧更多算力。这是 GPT-3 时代确立的路线:参数从 billions 到 tens of billions,再到 hundreds of billions。但开源世界在这条轴上走得很慢,很多最近的模型还停留在 1T 量级附近打转。

第二条叫测试时的 scaling——不让模型变大,而是让它在回答问题时多想一会儿。OpenAI 的 o 系列用强化学习训推理能力,Anthropic 的 Claude 会自适应分配思考预算,DeepSeek-R1 和 Kimi K1.5 证明了大规模强化学习能从强预训练模型中激发复杂推理行为。

为什么需要理解这两条轴

开源社区在第二条轴上突飞猛进(各种 RL 方法层出不穷),但在第一条轴上几乎原地踏步。结果是:再好的推理方法,用在一个 1T 量级的地基上,也追不上闭源巨头那些 3T+ 的地基。Kimi K3 的核心策略就是同时推两条轴——把预训练基础推到前所未有的 3T 量级,同时把强化学习、推理努力和长程交互推到 1M 上下文。

0.2 基本数字

Kimi K3Kimi K3):月之暗面(Moonshot AI)发布的开源大语言模型,2026年7月发布。

Kimi K2 vs Kimi K3 关键参数对比(论文 Table 1,第11页)
参数Kimi K2Kimi K3变化
总参数量1.04T2.78T+167%
激活参数量32.6B104.2B+220%
层数6193+52%
路由专家数384896+133%
每token激活专家816+100%
共享专家12+100%
注意力头数6496+50%
训练上下文长度128K1M8倍
注意力机制MLA混合 KDA-MLA全新
激活函数SwiGLUSiTU-GLU全新

这些数字背后的故事是:激活参数翻了两倍多,但总参数只涨了不到三倍。这意味着稀疏度从 K2 的 8/384 = 2.1% 变成了 K3 的 16/896 = 1.8%——模型更大了,但每个 token 只多动用了一倍的计算量。这就是 MoE(混合专家)架构的核心优势:参数是仓库,计算是工人,仓库可以无限大,工人按需调度。

打个比方

想象一家医院。总参数是医院里的全部医生,激活参数是每个病人实际会诊的医生数量。K2 有 384 个医生,每个病人看 8 个;K3 有 896 个医生,每个病人看 16 个。医院大了一倍多,但每个病人的就诊成本也只多了一倍——因为大部分医生在等别的病人。

这个比方在哪里就不灵了:医生之间可以互相讨论,但 MoE 的专家之间不通信——每个 token 被路由到哪几个专家是完全独立的。另外医生有排班表,而 MoE 的路由是 token 驱动的动态分配。

实验室 0-1:K2 到 K3 的 scaling 算术可运行
2.78
16
896
点击运行查看结果
说明:这个实验室计算 MoE 的稀疏度和 scaling 效率。稀疏度 = 1 - 激活专家/路由专家。数字来自论文 Table 1。

0.3 论文的四大贡献

论文在引言末尾用四个 bullet 总结了贡献,这里用大白话翻译一遍:

  1. 预训练到开放前沿:训练了一个 2.8T 参数的原生多模态 MoE 模型,104B 激活参数,1M 上下文窗口。KDA、AttnRes、Stable Latent MoE 和精调的训练配方加在一起,把整体 scaling 效率比 K2 提升了约 2.5 倍。
  2. 多努力级别的强化学习:在通用、智能体和编码三个领域做 RL,每个领域分低/高/最大三档推理努力,总共 9 个专家模型,最后用多教师在线策略蒸馏(MOPD)合并成一个统一模型。
  3. 支撑万亿参数百万上下文的基础设施:KDA 系统协同设计(FlashKDA kernel、KCP)、MoonEP 完美均衡 EP 训练、1M agentic RL 系统(外部 KV cache 池、自动限流调度、可恢复 microVM 沙箱)。
  4. 开放前沿模型:完整权重开源发布。
一句话记住:Kimi K3 同时在参数规模(3T 级)和上下文长度(1M token)两个维度上突破了开源极限,靠的是全新的混合注意力架构 + 稳定化 MoE + 一整套基础设施。
L1 直接应用基本概念

Kimi K3 的总参数是 2.8T,激活参数是 104B。请解释「总参数」和「激活参数」的区别,以及为什么两者差距这么大。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果把激活专家数从 16 增加到 64,总参数不变,有什么好处和代价?
L2 变形迁移scaling axes

论文提到「两条 scaling 轴」。请说出这两条轴分别是什么,并解释为什么开源社区在其中一条上进展缓慢。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果一个模型只在一条轴上 scaling(比如只做 RL 不增大参数),追赶闭源模型的前景如何?
L1 直接应用MoE稀疏度

Kimi K2 有 384 个路由专家,每 token 激活 8 个;K3 有 896 个路由专家,每 token 激活 16 个。分别计算两个模型的稀疏度,并解释稀疏度下降意味着什么。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果稀疏度趋近于 0(每个 token 激活所有专家),MoE 退化成什么?
我能用一句话说清楚 Kimi K3 的核心卖点
我能解释为什么总参数和激活参数差这么多
我能说出两条 scaling 轴分别是什么

答辩:如果我是审稿人

你说 K3 的 scaling 效率比 K2 提升了 2.5 倍。但总参数涨了 167%,激活参数涨了 220%——这不是花了更多计算量换来的吗?凭什么叫「效率提升」?

参考防守(先自己组织语言再看)

scaling 效率不是比绝对性能,而是在相同 FLOPs 预算下比较验证损失。论文 Figure 7 的 scaling law 曲线显示:在相同的 FLOPs 下,K3 的验证损失显著低于 K2。换句话说,用同样的计算量训练,K3 的架构能达到更低的损失。2.5 倍意味着:K3 只需要 K2 约 40% 的 FLOPs 就能达到同样的损失水平。参数变多不等于计算变多——MoE 的稀疏性保证了每个 token 的计算量只和激活参数有关,和总参数无关。

一句话记住:2.5 倍 scaling 效率的意思不是「K3 比 K2 快 2.5 倍」,而是「在相同计算预算下,K3 架构能达到 K2 一半多 FLOPs 才能达到的损失水平」。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

Kimi K3 是月之暗面在 2026 年发布的 2.8T 参数开源模型,核心策略是同时推大预训练规模和测试时计算两条轴。相比 K2,参数量翻倍但效率提升 2.5 倍,靠的是全新的 KDA + GatedMLA 混合注意力、AttnRes 跨层连接、Stable Latent MoE 三个架构创新。接下来我们逐个拆解这些设计。

第1章 全景架构

论文 2 Model Architecture(第3-4页),Figure 2,Table 1

整篇论文最核心的一张图是 Figure 2。本章带你把它拆开,搞清楚每个模块的名字、位置和职责,为后面逐章深入打下地图。

学完这一章你应该能做到

  • 画出 K3 的主干结构(Block 组成、层间关系)
  • 说出「三维信息流」分别对应哪三个模块
  • 解释 KDA 和 GatedMLA 的 3:1 混合比是怎么排布的
建议先读完第0章。

1.1 三维信息流

论文用一句话概括了整个架构的设计哲学:K3 的架构是为了在三个互补的维度上扩展信息流——序列长度、网络深度、模型宽度。每个维度对应一个核心模块:

K3 架构的三维信息流(论文 2,第3页)
维度问题解决方案章节
序列长度如何高效地让长序列中的 token 互相影响Hybrid Attention(KDA + GatedMLA,3:1混合)2.1
网络深度深层网络的信息会逐层衰减Attention Residuals(跨层注意力检索)2.2
模型宽度如何在万亿参数下保持稀疏高效Stable Latent MoE(896专家,16激活)2.3

Hybrid AttentionHybrid Attention):K3 的注意力层不是纯 Transformer 的 softmax attention,而是一个混合方案——每个 Block 包含 3 个 KDA 层加 1 个 GatedMLA 层。KDA 负责高效的长序列混合,GatedMLA 负责保留全局交互能力。

Attention ResidualsAttnRes):标准残差连接把所有历史信息压缩进一个不断累积的向量 h_l,像 RNN 一样。而 AttnRes 让每一层都能通过注意力机制「回头看」前面所有层的输出,选择性地检索有用信息。

Stable Latent MoEStable Latent MoE):MoE 的升级版。路由专家从 384 涨到 896,但每个专家在低维 latent 空间工作,而不是全宽。用 RMSNorm 前置、SiTU-GLU 激活和 Quantile Balancing 三个组件保证训练稳定。

为什么用三个维度而不是一个

因为这三个瓶颈是独立的。序列长了,softmax attention 的 KV cache 会爆炸——这是序列维度的瓶颈。网络深了,残差连接会让早期信息逐渐稀释——这是深度维度的瓶颈。模型宽了,标准 MoE 的通信量和路由不稳定性会失控——这是宽度维度的瓶颈。三个问题要用三个不同的方案分别解决,不能只靠一个 trick。

1.2 一个 Block 的结构

Block nKDA Layerx1KDA Layerx2KDA Layerx3GatedMLA Layerx4Stable Latent MoE(每层后都有)
图解:一个 Block 的内部结构。3 层 KDA + 1 层 GatedMLA = 4 层注意力,每层后面都接一个 Stable Latent MoE。整个 backbone 有 93 层,其中 69 层 KDA + 24 层 GatedMLA。

关键细节:

  • 3:1 混合比:每个 Block 里 3 层 KDA + 1 层 GatedMLA。KDA 是线性复杂度的递归注意力,便宜但表达能力有限;GatedMLA 是全局注意力,贵但能做 token 之间的任意交互。3:1 意味着大部分层走便宜路线,只在每个 Block 末尾用一次全局注意力。
  • backbone 末尾加一层 GatedMLA:确保模型最后一层一定是全局注意力,不会因为末尾是 KDA 而丢失全局信息。
  • 每层注意力后面都接 MoE:而不是每两三层才接一次。这意味着每个 attention-MoE 组合就是一个完整的 transformer 子层。

1.3 层数算术

推导:93 层怎么来的

  1. backbone 共 93 层
  2. 每个 Block = 4 层(3 KDA + 1 GatedMLA)
  3. 93 / 4 = 23.25,意味着 23 个完整 Block + 1 个额外的 GatedMLA 层
  4. 验证:23 * 3 = 69 KDA 层 + 24 GatedMLA 层 = 93 层。论文 Table 1 确认:69 KDA + 24 MLA。
一句话记住:K3 的 backbone 是 23 个完整的 4 层 Block(3 KDA + 1 GatedMLA)加上末尾 1 层 GatedMLA,共 93 层,每层后接一个 Stable Latent MoE。
实验室 1-1:Block 组成与层数推算可运行
93
点击运行查看结果
说明:这个实验室根据输入的总层数和混合比,推算 Block 结构、KDA 层数和 MLA 层数。数字来自论文 Table 1。
L1 直接应用架构概览

K3 说架构在三个维度上扩展信息流。请说出这三个维度分别是什么,以及每个维度对应哪个核心模块。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果不解决深度维度的瓶颈,一个 93 层的网络会遇到什么问题?
L2 变形迁移Block结构

已知 K3 有 93 层,其中 69 层 KDA 和 24 层 GatedMLA。请推导出 Block 的数量和每个 Block 的结构,并解释为什么末尾需要额外加一层 GatedMLA。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果把混合比从 3:1 改成 7:1(7 层 KDA + 1 层 GatedMLA),模型会更高效还是更弱?为什么?
L1 直接应用MoE位置

在 K3 的架构中,Stable Latent MoE 是放在哪里的?每个 Block 有几个 MoE 层?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 MoE 只放在 GatedMLA 层后面(而不是每层后面),会有什么影响?
我能画出 K3 的 Block 结构
我能解释三维信息流分别对应哪三个模块
我能推导出 93 层的 Block 分解

本章小结

K3 的架构围绕三维信息流设计:KDA + GatedMLA 的混合注意力解决序列维度,Attention Residuals 解决深度维度,Stable Latent MoE 解决宽度维度。93 层 backbone 由 23 个完整 Block(各 3 KDA + 1 GatedMLA)+ 1 层末尾 GatedMLA 组成,每层后接 MoE。接下来我们逐个深入。

第2章 KDA基础:Delta递归

论文 2.1.1 Kimi Delta Attention(第4-5页),公式1-4

KDA 占了 backbone 93 层中的 69 层,是 K3 最核心的注意力机制。本章拆解它的递归状态更新公式,搞清楚「写」和「忘」是怎么同时发生的。

学完这一章你应该能做到

  • 写出 KDA 的状态更新公式并解释每一项含义
  • 解释通道遗忘门和 delta 规则分别在做什么
  • 说出递归形式和分块并行形式的关系
建议先读完第1章。

2.1 先直觉:一个会遗忘的黑板

想象一块黑板,上面写着所有历史信息。每来一个新 token,它做两件事:先擦掉一些旧内容(遗忘),再写上新内容(更新)。关键在于——擦多少是逐通道决定的,不是一刀切。

这就是 KDA(Kimi Delta Attention)的核心思想。它用一个固定大小的矩阵 S 来记住历史,而不是像标准 Transformer 那样把所有 token 的 KV cache 都存着。每来一个新 token,S 就更新一次;越老的信息衰减越厉害,但不会突然消失。

Delta规则Delta Rule):一种递归状态更新规则。新状态 = 衰减后的旧状态 + 新写入。关键在于它不是简单地「加上」新信息,而是先用当前 token 的 key 去减去旧状态中与这个 key 重叠的部分(delta = 差值),再加入 value。类似于「先擦掉重叠的,再写新的」。

2.2 公式拆解

KDA 的核心状态更新公式(论文公式1)如下:

S_t = (I - beta_t k_t k_t^T) Diag(alpha_t) S_{t-1} + beta_t k_t v_t^T

一行一行拆:

KDA 状态更新公式各项含义
符号尺寸含义
S_tR^{dk x dv}第 t 步的递归状态(黑板),dk 是 key 维度,dv 是 value 维度
alpha_t(0,1)^dk通道遗忘门——每个通道一个独立的衰减系数
beta_t(0,1)写入强度——控制当前 token 往状态里写多深
k_tR^dk当前 token 的 key 向量
v_tR^dv当前 token 的 value 向量

右边的两项各有分工:

  • 第一项 (I - beta k k^T) Diag(alpha) S_{t-1}:先衰减再擦除。Diag(alpha) 对旧状态每个通道施加独立的衰减率;然后 (I - beta k k^T) 用当前 key 去擦掉旧状态中与之重叠的部分——这就是 delta 规则的「减去重叠」操作。beta 控制擦除力度。
  • 第二项 beta k v^T:写入新信息。key 和 value 做外积,形成一个新的 rank-1 矩阵,加到状态里。beta 同时控制擦除和写入的强度。

推导:为什么叫「Delta」

  1. 标准线性注意力:S_t = Diag(alpha) S_{t-1} + k_t v_t^T(只加不减)
  2. Delta 规则:S_t = (I - k_t k_t^T) Diag(alpha) S_{t-1} + k_t v_t^T
  3. 把括号展开:S_t = Diag(alpha) S_{t-1} - k_t k_t^T Diag(alpha) S_{t-1} + k_t v_t^T
  4. 中间多出的项 -k_t (k_t^T Diag(alpha) S_{t-1}) 就是「delta」——它先用 key 去读取旧状态 (k_t^T S_{t-1}),再从旧状态中减掉这个读出来的值。相当于「先把已有的关于 k 的信息清掉,再写入新的」
  5. 类比:在白板上写笔记,遇到同一个话题的新信息时,先擦掉旧笔记再写新的,而不是叠加
为什么要先擦再写

如果不擦(标准线性注意力),同一个 key 反复出现时,状态里会累积多份过时的 value,导致检索时返回混合了新旧信息的错误答案。Delta 规则保证:对于同一个 key,最新写入的 value 会覆盖旧的,状态始终保持「最新」。

2.3 通道遗忘门:精细控制

alpha_t 是一个 dk 维的向量,每个分量独立取值于 (0,1)。这意味着状态的每个通道有不同的遗忘速度——有些通道记得久,有些忘得快。

通道遗忘门Channel-wise Forget Gate):alpha_t 在 KDA 中的参数化方式。它不是手动设定的,而是从输入 x_t 通过低秩投影 + Sigmoid 生成的(论文公式2)。低秩投影 W_alpha_up W_alpha_down x_t + b_alpha 产生每个通道的 decay logit z_t,再映射到 (0,1) 区间。

对比 RNN 的遗忘门:LSTM/GRU 的遗忘门是标量(一个数控制整个隐状态),而 KDA 的遗忘门是向量(每个通道一个数)。粒度更细,表达能力更强。

2.4 读出和参数化

状态更新完之后,输出怎么取?用 query 去读:

o_t = S_t^T q_t

就是状态矩阵的转置乘以 query 向量。q_t、k_t 通过 ShortConv(短卷积)+ Swish 激活 + L2 归一化生成(论文公式2)。 ShortConv 让每个 token 的 query/key 带一点局部上下文信息,不只是「看自己」。

一句话记住:KDA = 通道遗忘门(逐通道衰减旧状态)+ Delta规则(先擦重叠再写新)+ Query读取。状态大小固定(dk x dv),不随序列长度增长。

2.5 分块并行

递归形式是串行的——必须先算完 S_{t-1} 才能算 S_t。GPU 不喜欢串行。KDA 的解法是分块并行(chunkwise parallel):把序列切成大小为 C 的块,块内并行计算(像标准 attention 一样并行),块间串行传递状态。

论文公式4 把输出分成两项:

  • inter-chunk 项:Gamma * Q * S[t],处理前面块传过来的状态——这是串行的,每个块只需做一次矩阵乘法
  • intra-chunk 项:A[t] * V_hat[t],处理当前块内的 token 互相影响——这是并行的,用下三角因果掩码的密集矩阵乘法
打个比方

想象一个流水线工厂。每个车间(chunk)内部有多条并行产线,可以同时处理多个零件。但车间之间是串行的——前一个车间的半成品必须送到后一个车间才能继续加工。KDA 的分块并行就是这个思路:车间内并行(块内密集计算),车间间串行(块间传递状态)。

这个比方在哪里不灵了:工厂流水线车间之间传的是实物半成品,KDA 传的是抽象的状态矩阵。而且工厂的并行度受物理产线限制,KDA 的块内并行度只受 GPU 的 SM 数量限制。

实验室 2-1:Delta 递归状态演化可运行
0.80
点击运行查看结果
说明:这个实验室模拟 KDA 的递归状态更新。调整衰减率 alpha,观察在 10 步递归后,初始信息的残留比例。alpha 越接近 1 记忆越长,但数值可能不稳定;alpha 越小遗忘越快。KDA 的关键在于 alpha 是逐通道的,这里简化为全局标量。
L1 直接应用Delta规则

KDA 的状态更新公式中,(I - beta k k^T) 这一项在做什么?为什么需要它?如果去掉这一项(变成标准线性注意力),会有什么后果?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 beta 设为 0(完全不写入),状态 S 会怎样变化?模型还能正常工作吗?
L2 变形迁移通道遗忘门

KDA 的遗忘门 alpha 是 dk 维向量(每个通道一个值),而 LSTM 的遗忘门是标量。请解释这种设计差异带来的好处,并说明 alpha 是怎么从输入生成的。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果所有通道的 alpha 都强制设为同一个值(退化为标量遗忘门),模型表现会变好还是变差?为什么?
L1 直接应用分块并行

KDA 的分块并行形式把输出分成 inter-chunk 和 intra-chunk 两项。请解释这两项分别处理什么信息,以及为什么这种分块方式能让 GPU 高效计算。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果块大小 C 设为 1(每个 token 一个块),分块并行退化成什么?如果 C 设为序列总长度呢?
我能写出 KDA 状态更新公式并解释每一项
我能解释 Delta 规则的「先擦再写」机制
我能说出 inter-chunk 和 intra-chunk 的区别

答辩:如果我是审稿人

KDA 的递归状态 S 只有 dk x dv 大小,固定不变。这意味着序列越长,信息压缩越狠。凭什么一个固定大小的矩阵能记住 1M 个 token 的全部信息?

参考防守(先自己组织语言再看)

不是全部记住,而是有选择地保留。KDA 的衰减机制保证最近的信息权重高,旧信息逐渐衰减——类似人类记忆,近期的事记得清,很久以前的事只记得大意。但与纯 RNN 不同的是,Delta 规则让 key-value 对的更新是精确的(覆盖而非叠加),所以对于反复出现的重要信息,状态会持续刷新而非模糊。此外,KDA 不是唯一的注意力机制:每个 Block 还有 1 层 GatedMLA 做全局注意力,它有完整的 KV cache,能精确检索任意位置的信息。KDA 负责「高效的局部加中程记忆」,GatedMLA 负责「精确的全局检索」,两者互补。

一句话记住:分块并行的核心:块内用密集矩阵乘法并行计算(利用 Tensor Core),块间只传一个固定大小的状态矩阵,通信量不随序列长度增长。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

KDA 的核心是一个固定大小的递归状态 S,通过通道遗忘门(逐通道衰减)和 Delta 规则(先擦重叠再写新)来维护。输出用 query 读取。分块并行让块内计算走 Tensor Core 密集矩阵乘法,块间只传固定大小的状态——这就是 KDA 能高效处理长序列的根本原因。下一章我们看 K3 对 KDA 做的进一步改进:下界衰减和全秩输出门。

第3章 KDA进阶:下界衰减与全秩门

论文 2.1.1 Lower-bounded decay & Full-rank gate(第4-5页),公式5-6,图3

上一章拆了 KDA 的基本骨架。本章看 K3 对 KDA 做的两个关键改进:把衰减率「兜底」以防数值爆炸,以及把输出门从低秩升级到全秩。这两个改动看似微小,却直接决定了 K3 能不能稳定训练 2.8T 参数的模型。

学完这一章你应该能做到

  • 解释为什么原始 KDA 的衰减参数化会导致数值溢出
  • 写出下界衰减映射公式(公式5)并解释 gmin 的作用
  • 说明全秩输出门相比低秩的优势
  • 理解对角块计算为什么能用 Tensor Core 密集矩阵乘法替代
建议先读完第2章。

3.1 问题:衰减率的无界增长

回顾分块并行公式(公式4),块内每个位置 i 的 key 要除以累积衰减 Gamma_{1->i}。因为 Gamma 是 (0,1) 之间值的连乘,随着位置增加越来越小,它的倒数 1/Gamma 就越来越大。

KimiLinear(KDA 的前身)用 log 空间计算相对衰减,并把每个块切成 16-token 的小块(tile)来控制数值范围。但问题出在对角块(diagonal tile)——它需要逐位置对计算,不能用 Tensor Core 的密集矩阵乘法加速,成了 intra-chunk 的主要瓶颈。

为什么对角块是瓶颈

块内计算中,非对角块(off-diagonal tile)是固定大小的矩阵乘法,GPU 的 Tensor Core 擅长这个。但对角块需要逐位置对(position-pair)计算,因为每个位置的衰减因子不同,没法凑成整齐的矩阵乘法。GPU 为此被迫退回到标量计算模式,效率暴跌。

3.2 解决方案:下界衰减

K3 的思路很直接:问题根源是衰减率可以无限接近 0,导致倒数无限大。那就给衰减率设一个下界。

原来的参数化(KimiLinear)用的是 negative-Softplus 映射:

g = -e^A * Softplus(z) — 取值范围 (-inf, 0),alpha = exp(g) 可以无限接近 0

K3 改成 scaled sigmoid 映射(论文公式5):

g = g_min * Sigmoid(e^A * z) — 取值范围 [g_min, 0),alpha = exp(g) > e^{g_min}

其中 g_min = -5 是固定值,A 是可学习的逐头对数缩放因子(初始化为 0)。

两种衰减参数化对比
属性KimiLinear (negative-Softplus)K3 (scaled sigmoid)
g 的范围(-inf, 0)[g_min, 0) = [-5, 0)
alpha 的范围(0, 1),可无限接近 0(e^{-5}, 1) 约 (0.0067, 1)
16-token tile 累积 log-decay无界在 (-80, 0) 内
倒数重缩放因子可无限大,溢出 BF16< e^80,在 BF16 范围内
对角块计算逐位置对(慢)密集矩阵乘法(快)

推导:为什么 e^80 在 BF16 范围内

  1. BF16 的动态范围约 [-3.4 x 10^38, 3.4 x 10^38],即指数范围约 [-126, 127](以 2 为底)
  2. e^80 约 5.5 x 10^34,在 BF16 范围内
  3. g_min = -5 时,单个 token 的 log-decay 最低为 -5
  4. 16-token tile 的累积 log-decay 最低为 16 x (-5) = -80
  5. 倒数 e^80 < 3.4 x 10^38,安全
  6. 如果 g_min 更小(比如 -10),累积就是 -160,倒数 e^160 约 10^69,超出 BF16 范围。所以 g_min = -5 不是拍脑袋定的,是卡着 BF16 边界选的

3.3 全秩输出门

KDA 的输出经过头级 RMSNorm 后,再过一个输出门。KimiLinear 的输出门是低秩的(用降维-升维投影实现),K3 把它改成了全秩的、数据相关的门(论文公式6):

y = W_o [Sigmoid(W_g x) * RMSNorm(o_tilde)]

W_g 是全秩的方阵(d x d),不是低秩分解。这意味着每个通道的门控值可以独立地从输入中获取信息,不受低秩瓶颈限制。

同样的全秩门也用在了 GatedMLA 上(公式7),K3 在这两处都做了统一升级。

打个比方

低秩门就像一个预算有限的调音台——只有 8 个旋钮控制 64 个声道,很多声道只能共享同一个旋钮。全秩门是每个声道都有独立旋钮,控制粒度细到每个通道。

这个比方在哪里不灵了:调音台的旋钮是直接控制增益,而 K3 的门控是通过 Sigmoid 非线性映射后再乘的,不是线性增益。而且全秩门的计算量是 O(d^2),比低秩的 O(d x r) 大得多——旋钮多了也费电。

一句话记住:下界衰减(g_min=-5)把累积 log-decay 约束在 (-80, 0),倒数 < e^80 在 BF16 范围内,让对角块也能用 Tensor Core 密集矩阵乘法。全秩输出门给每个通道独立的门控信号,代价是 O(d^2) 的额外计算。
L2 变形迁移下界衰减

K3 把衰减参数化从 negative-Softplus 改成 scaled sigmoid,设 g_min = -5。请解释为什么这个改动能让对角块使用 Tensor Core 密集矩阵乘法,而原来不行。如果 g_min 设为 -10 会怎样?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果把 tile 大小从 16 改成 32,g_min 还能保持 -5 吗?需要调到多少?
L1 直接应用全秩输出门

K3 把 KDA 和 GatedMLA 的输出门都从低秩改成了全秩。请说明全秩门和低秩门在参数量、表达能力和计算复杂度上的 trade-off。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:在 2.8T 参数的模型里,全秩门增加的计算量占比大吗?为什么 K3 还是选择了全秩?
L3 构造反例BF16范围

假设你要设计一个新的递归注意力机制,衰减率的累积乘积需要控制在 BF16 安全范围内。你的 tile 大小是 32,累积倒数重缩放因子需要 < e^100。请问每个 token 的 log-decay 下界 g_min 应该设为多少?给出推导过程。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果改成 FP8 训练(动态范围更小),g_min 需要怎么调?
我能解释下界衰减为什么解决数值溢出
我能算出 g_min=-5 时 16-token tile 的安全范围
我能说明全秩输出门的 trade-off

答辩:如果我是审稿人

g_min = -5 意味着单步最低保留率约 0.67%。这比 0 好不了多少——100 步之后信息就只剩下 0.0067^100,约 10^-220,基本等于零。下界衰减真的解决了长序列记忆问题吗?

参考防守(先自己组织语言再看)

下界衰减解决的是数值计算问题,不是记忆容量问题。两个问题是分开的。数值计算方面:没有下界时,倒数 1/Gamma 会溢出 BF16,导致训练崩溃——这是工程上必须解决的。有了下界后,计算可以安全进行。记忆容量方面:KDA 本来就不靠单个 token 的衰减率来记住长序列。它靠的是 Delta 规则的精确覆盖机制——同一个 key 反复出现时,最新 value 会覆盖旧的。此外,K3 的混合注意力在每个 Block 里安排了 1 层 GatedMLA 做全局精确检索,弥补 KDA 在超长距离上的记忆衰减。下界衰减的真正意义是让 16-token tile 的所有计算(包括对角块)都能走 Tensor Core,消除了 intra-chunk 瓶颈。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

K3 对 KDA 做了两个关键改进。下界衰减(g_min=-5)把 cumulative log-decay 约束在有限范围内,让倒数重缩放因子不超过 BF16 的表示范围,从而让对角块也能用 Tensor Core 密集矩阵乘法——消除了 KimiLinear 的 intra-chunk 瓶颈。全秩输出门给每个通道独立的门控信号,提升了表达能力。这两个改动虽然只是参数化层面的调整,却直接影响了 K3 在 2.8T 参数规模下的训练稳定性。

第4章 GatedMLA:全局注意力的压缩术

论文 2.1.2 GatedMLA(第5-6页),公式7

K3 的 backbone 里每 4 层注意力中有 3 层是 KDA(高效但压缩),1 层是 GatedMLA(昂贵但精确)。这 1 层全局注意力是确保长序列信息不丢失的「保险栓」。本章拆解 GatedMLA 的压缩机制和它与 KDA 的互补关系。

学完这一章你应该能做到

  • 解释 MLA 的 latent 压缩机制和它如何节省 KV-cache
  • 说明为什么 K3 在 MLA 层用 NoPE 而不是 RoPE
  • 解释 GatedMLA 的全秩输出门的作用
  • 说出 KDA 和 GatedMLA 各自的分工
建议先读完第2、3章。

4.1 MLA 的核心思想:把 KV 压缩成 latent 向量

标准 Transformer 的注意力需要缓存每个 token 的 key 和 value——序列越长,缓存越大。MLA(Multi-head Latent Attention)的做法是:不缓存完整的 key-value 对,而是缓存一个低维的 latent 向量 c,需要时再通过学习到的上投影矩阵重建 key 和 value。

c_t = W_c x_t — latent 向量,维度远小于隐藏维度 d

这样每个 token 只需要缓存 c_t(维度可能只有 d 的一个零头),而不是完整的 K 和 V。KV-cache 的体积大幅缩小。

MLA 与标准注意力 KV-cache 对比
属性标准多头注意力MLA
每 token 缓存n_heads x (d_k + d_v)d_latent(例如 512 维)
缓存随头数增长
重建 key/value不需要(直接缓存)需要(上投影从 latent 重建)
注意力计算标准 softmax attention标准 softmax attention(重建后)

4.2 NoPE:不给 MLA 加位置编码

这是一个反直觉的设计决策。K2 和 K2.5 的 MLA 层用了 RoPE(旋转位置编码),K3 把它去掉了——所有 MLA 层使用 NoPE(No Position Encoding)。

论文给出的理由很直接:

  • 分工明确:KDA 层通过衰减门控天然编码了位置信息(越近的 token 权重越高),MLA 层只需要做纯内容交互,不需要重复编码位置
  • 扩展方便:用 RoPE 时,扩展上下文长度需要调频率基数或做 YaRN 插值——这是额外工程。用 NoPE 后,扩展上下文只需继续训练,不修改任何位置编码参数
  • 避免冲突:KDA 的递归衰减和 RoPE 的旋转编码如果同时作用,位置信号可能互相干扰
为什么 NoPE 能工作

直觉上,没有位置编码的注意力是「词袋模型」——无法区分 token 顺序。但 K3 的架构解决了这个问题:KDA 层已经处理了位置信息(衰减编码了距离),MLA 层只需要在「已知位置」的基础上做全局内容检索。而且 K3 是混合架构——每 4 层中只有 1 层是 MLA,其余 3 层 KDA 已经充分注入了位置信号。MLA 层的 NoPE 不会导致位置信息丢失,只是把位置编码的职责交给了 KDA。

4.3 全秩输出门

和 KDA 一样,GatedMLA 也升级了全秩输出门(公式7):

y = W_o [Sigmoid(W_g x) * o_tilde]

o_tilde 是未加门的 MLA 输出。Sigmoid 门让每个 token 能动态调制从全局注意力读出的通道——有些通道的信息在当前 token 位置有用,有些没用,门控负责筛选。

4.4 FP32 注意力输出修正

一个工程细节:Flash Attention 在低精度计算时有舍入偏差(biased rounding error)。K3 采用 [98] 的方法,在训练时把注意力输出保持在 FP32。

代价是 on-chip 轨迹缓冲(output tile)翻倍。K3 的解决方案是重新设计训练 kernel,把 FP32 输出缓冲与 KV staging buffer 共享而非占用 query tile 的空间,释放共享内存给更深的 KV pipeline,反而提高了训练吞吐。

打个比方

把 K3 的混合注意力想成一家公司。KDA 是「日常运营团队」——高效、低成本、处理绝大部分工作流,但信息经过层层压缩可能有损耗。GatedMLA 是「审计部门」——定期(每 4 层一次)做全面核查,确保所有关键信息准确无误。审计不需要天天做,但必须定期做,否则错误会累积。

这个比方在哪里不灵了:审计部门是事后检查,GatedMLA 是当场处理——它在 backbone 中是计算路径的一部分,不做事后验证。而且 GatedMLA 不是「检查 KDA 的结果」,而是独立做全局注意力计算,两者是并联的而非串联的。

一句话记住:GatedMLA = MLA 的 latent 压缩(低维缓存 KV)+ NoPE(位置编码交给 KDA)+ 全秩输出门(逐通道动态筛选)。它每 4 层出现 1 次,提供精确的全局注意力,弥补 KDA 的信息压缩损耗。
实验室 4-1:MLA 压缩比可运行
512
点击运行查看结果
说明:K3 的隐藏维度为 7168。调整 latent 维度,观察 KV-cache 压缩比。latent 越小压缩越好,但信息损失越大。K3 的 LatentMoE 专家在 3584 维 latent 空间工作(0.5x 隐藏维度),但 MLA 的 KV-cache latent 维度由架构设计决定。
L1 直接应用MLA压缩

MLA 通过把 key-value 压缩成低维 latent 向量来节省 KV-cache。请解释这个压缩机制,并说明为什么压缩后还能做标准 softmax attention。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 latent 维度设得太低(比如 64),MLA 的注意力质量会怎么变化?有没有一个「太低就不行」的阈值?
L2 变形迁移NoPE

K3 在 GatedMLA 层使用 NoPE(不加任何位置编码),而 K2/K2.5 用了 RoPE。请解释为什么 K3 敢于去掉 RoPE,以及这样做在上下文扩展时有什么好处。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果整个模型都用 NoPE(连 KDA 也不编码位置),模型还能正常工作吗?为什么?
L1 直接应用KDA-MLA分工

K3 的混合注意力里 KDA 和 GatedMLA 各占什么角色?如果改成 1:1(一层 KDA 一层 MLA),会有什么优缺点?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果改成 7:1(七层 KDA 一层 MLA)呢?极端情况下纯 KDA(无 MLA)行不行?
我能解释 MLA 的 latent 压缩机制
我能说明为什么 K3 在 MLA 层用 NoPE
我能说出 KDA 和 GatedMLA 的分工

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

GatedMLA 是 K3 混合注意力中的「精确全局检索」组件。它用 MLA 的 latent 压缩大幅减少 KV-cache,用 NoPE 把位置编码职责交给 KDA 从而简化上下文扩展,用全秩输出门做逐通道动态筛选。每 4 层出现 1 次,与 KDA 形成「高效压缩 + 精确检索」的互补对。接下来看这个 3:1 混合比例的整体设计。

第5章 混合注意力:3:1的默契

论文 2.1 Hybrid Attention(第4页)

K3 的 backbone 有 93 层,其中 69 层 KDA + 24 层 GatedMLA(含末尾 1 层)。这个 3:1 比例不是拍脑袋定的——它是效率与精度的平衡点。本章从全局视角拆解这个混合设计。

学完这一章你应该能做到

  • 算出 93 层 backbone 的 KDA/MLA 分解
  • 解释 3:1 比例背后的效率-精度 trade-off
  • 说明末尾追加 GatedMLA 层的原因
  • 对比 K2 和 K3 的注意力架构差异
建议先读完第2-4章。

5.1 93 层的分解

从 Table 1 可以读到关键数字:

K3 backbone 层分解
组件层数占比
KDA6974.2%
GatedMLA(Block 内)2324.7%
GatedMLA(末尾追加)11.1%
合计93100%

23 个完整 Block 中,每个 Block = 3 KDA + 1 GatedMLA = 4 层。23 x 4 = 92 层,再加末尾 1 层 GatedMLA = 93 层。

5.2 为什么是 3:1

3:1 的比例意味着 75% 的注意力层是高效的线性递归(KDA),25% 是精确的全局注意力(MLA)。这个比例需要从两个角度看:

  • 效率角度:KDA 的状态大小固定(d_k x d_v),不随序列长度增长。MLA 虽然有 latent 压缩,但 KV-cache 仍然随线性增长。3:1 让大部分层的计算和内存开销不随序列长度爆炸
  • 精度角度:KDA 的递归状态会压缩信息——越远的 token 信息衰减越厉害。每 4 层插入 1 层全局注意力,相当于在信息丢失到不可恢复之前「刷新」一次,确保全局信息的精确性
为什么不是 7:1 或 1:1

7:1(7 KDA + 1 MLA):效率更高,但全局注意力出现频率太低。长序列中,如果 7 层 KDA 连续运行都没有全局刷新,信息压缩的累积误差可能超过 MLA 单层能修复的范围。1:1:精度最好,但 MLA 的开销是 KDA 的数倍——每层都有完整 softmax attention 的 O(n^2) 计算(虽然 MLA 有 latent 压缩,但注意力计算本身仍然是全局的)。3:1 是经验上「刚好够用」的全局刷新频率。论文引用 KimiLinear [63] 的消融实验支持这个选择。

5.3 末尾追加的 GatedMLA

一个容易被忽略的细节:backbone 最后额外加了 1 层 GatedMLA。论文说这是为了「确保最后一层始终执行全局注意力」。

为什么重要?如果最后一层是 KDA,它的输出是递归状态读取的结果——信息经过了 3:1 混合中最后一次 KDA 的压缩。如果最后一层是 MLA,输出经过了完整全局注意力的精确处理,可以直接进入下游任务(如词表投影)。在生成任务中,最后一个 token 的表示质量直接影响下一个 token 的预测——这里不能省。

5.4 与 K2 的架构对比

K2 用的是纯 MLA(61 层全都是 MLA),K3 改成了混合 KDA-MLA。这是最大的架构差异之一。

K2 vs K3 注意力架构对比
属性Kimi K2Kimi K3
注意力机制纯 MLA混合 KDA-MLA (3:1)
层数6193
KDA 层数069
MLA 层数6124
位置编码RoPE(MLA 内)NoPE(MLA 内)+ KDA 衰减
训练上下文128K1M(8x 扩展)
总参数1.04T2.78T(2.67x)
激活参数32.6B104.2B(3.2x)
scaling 效率基准2.5x 提升

注意 MLA 层数从 61 降到 24(减少 60%!),但总层数从 61 涨到 93(增加 52%)。增量全部来自 KDA 层。这意味着 K3 用更少的全局注意力层实现了更强的性能——KDA 的效率优势让预算可以用在更深的网络和更宽的 MoE 上。

一句话记住:3:1 的 KDA:MLA 比例 = 75% 效率 + 25% 精度。23 个 Block 各 4 层 + 末尾 1 层 MLA = 93 层。MLA 层数从 K2 的 61 降到 24,省出的预算用来加深网络和扩大 MoE。末尾追加 MLA 确保输出层信息精确。
实验室 5-1:混合比例调参可运行
3
点击运行查看结果
说明:调整每 Block 中 KDA 的层数(MLA 固定 1 层),观察混合比变化。K3 的默认配置是 3:1。试试不同的比例,看看效率和全局注意力占比怎么变。
L1 直接应用层分解

K3 的 backbone 有 93 层,KDA 和 GatedMLA 各有多少层?请解释 23 个 Block 如何组成 93 层,末尾为什么多 1 层 MLA。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果总层数是 80 而不是 93,3:1 分解下 KDA 和 MLA 各多少层?末尾还需要追加 MLA 吗?
L2 变形迁移K2-K3对比

K2 用 61 层纯 MLA,K3 改成 93 层混合 KDA-MLA,MLA 层数反而从 61 降到 24。请分析这个变化为什么能带来 2.5x 的 scaling 效率提升。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 K3 保持纯 MLA 但层数增加到 93,效果会更好吗?代价是什么?
L3 构造反例比例选择

假设你是 K4 的架构师,需要在 K3 的 3:1 基础上调整混合比例。请分析以下两种方案各自的优劣:(a) 5:1(5 KDA + 1 MLA),(b) 1:1(1 KDA + 1 MLA)。你会推荐哪种?在什么场景下?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果目标场景从通用大模型变成「超长文档检索专用模型」,比例应该怎么调?
我能算出 93 层的 KDA/MLA 分解
我能解释 3:1 比例的 trade-off
我能对比 K2 和 K3 的架构差异

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

3:1 的 KDA:MLA 混合是 K3 架构的核心设计决策。75% 的层走高效递归路径,25% 走精确全局路径,末尾追加 1 层 MLA 保证输出质量。相比 K2 的纯 MLA 架构,K3 用更少的全局注意力层实现了更深的网络和更宽的 MoE——省出的预算转化为 2.5x 的 scaling 效率提升和 8x 的上下文窗口扩展。接下来深入 Attention Residuals——K3 解决深度信息流的方案。

第6章 Attention Residuals:深度的信息流

论文 2.2 Attention Residuals(第6-7页),公式8-10

标准残差连接像一个 RNN——所有信息压缩到一个状态里,越深越模糊。Attention Residuals(AttnRes)把这个逻辑搬到深度维度:让每一层都能「回头看」任意之前层的输出,不依赖顺序累积。

学完这一章你应该能做到

  • 解释标准残差连接为什么是深度维度的信息瓶颈
  • 写出 AttnRes 的完整公式(公式8-10)并解释伪查询机制
  • 说明 Block AttnRes 如何把 O(Ld) 内存降到 O(Nd)
  • 理解 K3 为什么选 N=8 个 Block
建议先读完第1、5章。

6.1 问题:标准残差是深度的 RNN

标准 Transformer 的残差连接:h_l = f_l(h_{l-1}) + h_{l-1}。每一层的输出 = 自己的计算结果 + 之前的累积状态。信息只能沿着相邻层逐步累积——第 50 层要「看到」第 3 层的信息,得经过 47 层的中间处理。

论文用了一个精确的类比:这和 RNN 在时间维度上的问题一模一样。RNN 中,h_t 依赖 h_{t-1},长序列信息会衰减。标准残差在深度维度上也有同样的问题——越深的层,对早期层的信息访问越间接。

Transformer 在序列维度上用 attention 解决了 RNN 的问题(每个位置直接访问所有之前位置)。AttnRes 把同样的方案搬到深度维度:每层直接访问所有之前层的输出。

6.2 Full AttnRes:每层都能看所有之前层

公式8-9定义了完整的 AttnRes:

Keys 和 Values(公式8):对于第 l 层,keys 和 values 就是第 0 到 l-1 层的输出(第 0 层是 token embedding):

k_i = v_i = f_i(h_i), i = 0, 1, ..., l-1

伪查询(公式9):q_l = w_l 是一个可学习的、层特定的参数向量,不依赖输入数据。它决定了第 l 层「想要从之前层看什么」。

alpha_{i->l} = phi(q_l, k_i) / sum_j phi(q_l, k_j)
h_l = sum_i alpha_{i->l} * v_i

其中 phi(q, k) = exp(q^T RMSNorm(k)) 是 softmax kernel,RMSNorm 防止输出范数大的层主导权重。

为什么用伪查询而不是数据相关查询

伪查询是纯参数——训练时学习「第 l 层应该从之前层提取什么信息」,不需要依赖当前输入。这简化了计算(不需要额外的投影矩阵),也让每层的检索策略在训练后固定下来。直觉上,每层有自己的「专业领域」——第 30 层可能需要从第 5 层提取底层特征,从第 20 层提取中层语义,伪查询编码了这个偏好。

6.3 Block AttnRes:分块降内存

Full AttnRes 的问题:需要保存所有 L 层的输出在内存中,O(L*d) 的内存开销 + 流水线并行中的跨阶段通信。L=93 时不算太大,但仍然不可忽略。

Block AttnRes 的方案:把 L 层分成 N 个 Block,每 Block 有 S = L/N 层。

  • Block 内:同一 Block 内的层输出求和压缩成单个 Block 表示 b_n
  • Block 间:只在 N 个 Block 表示之间做 attention

公式10定义了值矩阵的组成:

Block n 的第 1 层:V = [b_0, b_1, ..., b_{n-1}]^T — 只看之前 Block 的摘要
Block n 的第 i 层(i>=2):V = [b_0, ..., b_{n-1}, b_n^{i-1}]^T — 也看自己 Block 内到上一层的累积

内存从 O(L*d) 降到 O(N*d)。N=8 时,从 O(93*d) 降到 O(8*d),压缩 11.6 倍。

Full AttnRes vs Block AttnRes
属性Full AttnResBlock AttnRes (N=8)
内存开销O(L*d) = O(93*d)O(N*d) = O(8*d)
通信开销O(L*d) 跨阶段O(N*d) 跨阶段
精度损失基准N=8 恢复大部分收益
推理时完整保留Block 级表示可通过 online softmax 合并

6.4 K3 的具体配置

93 层分成 8 个 Block,每个 Block 约 12 层(93/8=11.625),末尾有一个不完整的 Block。加上 embedding 层作为第 0 个 Block 的起点,总共 9 个 Block 表示参与 attention。

论文指出 N 约 8 就能恢复大部分收益(跨模型规模的消融实验验证),更大的 N 收益递减但内存继续下降。K3 选 N=8 是效率-精度的平衡点。

打个比方

把 93 层网络想象成一个 93 人的公司。Full AttnRes 是任何人都能直接找任何之前入职的同事问信息——沟通顺畅但信息通道爆炸。Block AttnRes 是分成 8 个部门,每个部门有一个「部门摘要」(Block 表示),跨部门只通过摘要沟通,部门内部可以看详细的累积记录。信息损失了一点粒度,但沟通成本降了一个数量级。

这个比方在哪里不灵了:公司里的部门是固定组织结构,AttnRes 的 Block 是层号的等分划分,没有功能上的分组含义。而且部门摘要是人写的文字,Block 表示是层输出的数学求和——后者不丢失所有细节,只是压缩了表征维度。

一句话记住:AttnRes = 深度维度的 attention。伪查询让每层学习「从哪些之前层提取信息」。Block AttnRes 把 93 层分成 8 块,内存从 O(93d) 降到 O(8d),N=8 恢复大部分精度收益。RMSNorm 防止大范数层主导注意力权重。
实验室 6-1:Block 数量调参可运行
8
点击运行查看结果
说明:调整 Block 数 N,观察内存压缩比和每 Block 层数。N=1 等于标准残差(无跨层 attention),N=93 等于 Full AttnRes。K3 的设定是 N=8。
L1 直接应用AttnRes动机

论文说标准残差连接在深度维度上的问题和 RNN 在时间维度上的问题一样。请解释这个类比,并说明 AttnRes 如何用类似 Transformer 解决 RNN 问题的方式来解决它。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果网络只有 5 层,AttnRes 还有意义吗?在多少层以下标准残差就够用了?
L2 变形迁移Block压缩

Block AttnRes 把 93 层分成 8 个 Block。请解释 Block 内和 Block 间的信息流分别怎么处理,以及为什么 N=8 就能恢复大部分收益。如果 N=4 会怎样?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:Block 内的层输出是求和压缩的。如果改成取平均(除以层数)或取最大值,效果会不同吗?
L3 构造反例伪查询

AttnRes 的伪查询是层特定的可学习参数,不依赖输入。请分析这种设计的好处和局限。在什么情况下,数据相关的查询(依赖当前 token)会比伪查询更好?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:伪查询的学习会不会过拟合到特定任务?如果预训练和微调的任务差异很大,伪查询需要重新学习吗?
我能解释标准残差为什么是深度维度的信息瓶颈
我能写出 AttnRes 的公式并解释伪查询
我能说明 Block AttnRes 的压缩机制

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

Attention Residuals 把 Transformer 解决 RNN 序列问题的思路搬到了深度维度:每层通过伪查询直接从所有之前层提取信息,不依赖顺序累积。Block AttnRes 把 93 层分成 8 块,内存从 O(93d) 降到 O(8d),N=8 恢复大部分精度。接下来看宽度维度的解决方案——稀疏专家 MoE。

第7章 稀疏专家:Stable Latent MoE

论文 2.3 Stable Latent Mixture-of-Experts(第6-8页),公式11

K3 有 2.8T 参数,但每个 token 只激活 104B——不到 4%。这是 MoE 的功劳。但把专家池从 384 扩到 896、激活数从 8 翻到 16 后,两个致命问题浮出水面:激活值爆炸和负载不均。本章看 Stable Latent MoE 怎么解决它们。

学完这一章你应该能做到

  • 解释 LatentMoE 如何让 896 专家变得可行
  • 写出 Stable Latent MoE 的完整公式(公式11)并解释 RMSNorm 的位置和作用
  • 说明 Shared Expert 和 Routed Expert 的分工
  • 说出极端稀疏性(sparsity=56)带来的两个失败模式
建议先读完第1、5章。

7.1 为什么需要 LatentMoE

标准 MoE 的做法:每个 token 选 top-k 个专家,每个专家收到完整的 d 维表示,做一次 FFN。问题是,当你想把专家池扩到 896、激活 16 个时,每个 token 要和 16 个专家通信,每个专家都要处理 d=7168 维的输入——通信量和计算量随路由倍数线性增长。

LatentMoE 的解法:把共享路径路由路径分开。共享专家(Shared Expert)始终处理完整的 d 维输入,负责通用变换。路由专家(Routed Expert)在压缩后的 latent 空间(l=3584,只有 d 的一半)工作,通信量和计算量减半。

标准 MoE vs LatentMoE 通信量对比
属性标准 MoELatentMoE (K3)
专家工作维度d=7168l=3584(0.5x)
共享专家2 个,全宽 d 维
路由专家384(K2)896(K3)
每 token 激活816
稀疏度4856
路由专家单次输入维度71683584
一句话记住:LatentMoE 让 896 专家可行:共享专家在 d=7168 维做通用变换,路由专家在 l=3584 维做专门变换。通信量减半,专家空间翻倍。稀疏度 = 896/16 = 56。

7.2 公式拆解

Stable Latent MoE 的完整公式(公式11):

u = sum_{i in T_k(x)} p_i * E_i^{routed}(W_down * x)
y = sum_j E_j^{shared}(x) + W_up * RMSNorm(u)

逐行拆:

  • W_down * x:把 d=7168 维的输入压缩到 l=3584 维的 latent 表示 z
  • T_k(x):路由器选出的 top-k=16 个专家
  • p_i:路由权重,由 Quantile Balancing 规则决定(下一章详述)
  • E_i^{routed}(z):第 i 个路由专家对 latent 表示做 FFN 变换,输出仍在 l=3584 维
  • u:16 个路由专家的加权聚合,l=3584 维
  • RMSNorm(u):对聚合后的 latent 表示做归一化——这是 K3 的关键新增
  • W_up * RMSNorm(u):把归一化后的 latent 表示升回 d=7168 维
  • E_j^{shared}(x):2 个共享专家直接对原始 d 维输入做 FFN
  • y:共享路径和路由路径的输出相加,作为本层最终输出

7.3 RMSNorm 的关键位置

原始 LatentMoE 直接把 W_up 应用于聚合后的 u,但 u 的 scale 会随选中的专家和路由权重变化——有时候大有时小。K3 在 W_up 之前插入 RMSNorm:

y = E_shared(x) + W_up * RMSNorm(u)

这个 RMSNorm 做什么?它把路由路径的输出归一化到固定的 scale,减少路由路径对共享路径的干扰。论文报告它不仅稳定了训练,还持续改善了验证 loss 和下游 benchmark。

为什么在 W_up 之前而非之后归一化

如果在 W_up 之后归一化,W_up 的输出被强制缩放,抹掉了 W_up 学到的 scaling 信息。在 W_up 之前归一化,只控制 latent 表示的 scale,W_up 的权重仍然可以自由学习输出的大小。直觉上:先让 latent 表示「大小一致」,再让 W_up 决定「放大多少」。

7.4 两个失败模式

把专家池扩到 896 后,极端稀疏性放大了两个问题:

失败模式一:激活值爆炸

路由路径是 W_down -> GLU -> W_up 的链式变换,四个近似连续的矩阵乘法。这个结构本身就容易条件不良(ill-conditioned),在 2.8T 参数规模下,内部激活值会出现爆炸性的 outlier。低精度训练(MXFP4)下尤其危险——溢出即崩溃。

失败模式二:负载不均

896 个专家要均匀分配 token。原有的 auxiliary-loss-free 方法用固定步长更新 bias,在 384 专家时勉强够用,到 896 时就不行了——有的专家过热(排队太长),有的垂死(收不到 token)。不均衡的路由拖慢专家并行训练,还让部分专家训练不充分。

这两个问题的解决方案分别是 SiTU-GLU(下一章)和 Quantile Balancing(第9章)。本章先建立对问题本身的理解。

打个比方

把 LatentMoE 想成一个咨询公司。共享专家是「全职核心团队」——2 个人,什么项目都参与,处理通用需求。路由专家是「896 人的自由职业者池」——每个项目只请 16 个人,他们在各自的专业领域(latent 空间)工作。W_down 是「项目简报压缩」,把 d 维的全量信息压缩到 l 维给专家看;W_up 是「成果汇报」,把专家的 l 维输出还原成 d 维的完整方案。RMSNorm 是「汇报格式校验」——不管专家说什么,先统一格式再汇报给管理层。

这个比方在哪里不灵了:咨询公司的简报压缩是人写的(有损的、主观的),W_down 是学习到的线性投影(信息损失的维度由训练优化)。而且自由职业者是独立工作的,路由专家的输出是加权求和的——不是简单的「每人交一份报告」。

一句话记住:Stable Latent MoE = 共享专家(2个,d维,通用)+ 路由专家(896选16,l=3584维,专门)+ RMSNorm(稳定 latent scale)。极端稀疏(56x)带来两个问题:激活爆炸(SiTU-GLU 解决)和负载不均(Quantile Balancing 解决)。
实验室 7-1:专家稀疏度分析可运行
896
16
点击运行查看结果
说明:调整专家总数和激活数,观察稀疏度和路由通信量的变化。K3 的默认配置是 896 专家、16 激活、latent 维度 3584。极端稀疏意味着每个 token 只「见到」不到 2% 的专家。
L1 直接应用LatentMoE压缩

LatentMoE 把路由专家的工作维度从 d=7168 降到 l=3584。请解释这个压缩为什么能让 896 个专家变得可行,以及共享专家为什么不压缩。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 latent 维度 l 设为和 d 相同(不压缩),LatentMoE 退化成什么?还有好处吗?
L2 变形迁移RMSNorm位置

K3 在 W_up 之前插入 RMSNorm,而不是在 W_up 之后。请分析这个位置选择的原因,以及如果在 W_up 之后做 RMSNorm 会有什么不同。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果把 RMSNorm 换成 LayerNorm(带平移参数),效果会更好还是更差?为什么?
L1 直接应用共享专家

K3 固定使用 2 个共享专家(N_s=2)。请解释共享专家和路由专家的分工,以及为什么共享专家始终全宽(d 维)而不走 latent 压缩。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果把共享专家数量从 2 增加到 8,会发生什么?总参数量、激活参数量、模型能力分别怎么变?
我能解释 LatentMoE 的压缩机制
我能写出公式11并解释 RMSNorm 的位置
我能说出极端稀疏带来的两个失败模式

答辩:如果我是审稿人

896 个专家只有 16 个被激活,稀疏度 56 意味着超过 98% 的参数在每个 token 上都在沉睡。这不是浪费吗?为什么不用更少的专家(比如 128 选 16,稀疏度 8),把每个专家训练得更充分?

参考防守(先自己组织语言再看)

稀疏度越高,模型的参数效率越好——每个参数虽然不经常被用,但当它被用时,它学到了非常专门的知识。这是 MoE 相比 dense 模型的核心优势:用参数量换专业知识覆盖面。128 选 16 看似每个专家训练更充分,但 128 个专家能覆盖的「专业领域」远少于 896 个。K3 的目标是 frontier-level 通用能力,需要覆盖从代码到数学到多模态到 agentic 的广泛能力,896 个专家提供了足够的「专业槽位」。此外,LatentMoE 让 896 专家的通信成本只有 384 专家的约 2 倍(因为 latent 维度减半),而不是 2.3 倍。参数沉睡不是浪费——它们随时可以被路由到,只是不在当前 token 上被需要。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

Stable Latent MoE 是 K3 宽度维度的核心设计。共享专家在 d=7168 维做通用变换,路由专家在 l=3584 维做专门变换,RMSNorm 稳定 latent 输出。896 专家选 16 的极端稀疏带来两个问题:激活爆炸和负载不均。接下来两章分别用 SiTU-GLU 和 Quantile Balancing 解决它们。

第8章 SiTU-GLU:给激活值戴上安全帽

论文 2.3.2(第7-8页),公式12,图4

当模型参数量从70亿飙升到280亿,激活函数里一个看似无害的「无界」设计,突然变成了训练崩溃的元凶。SiTU-GLU的故事,就是如何用一顶「安全帽」——既不勒头又不碍事——把爆炸的激活值稳稳地兜住。

学完这一章你应该能做到

  • 解释SwiGLU激活函数的输出为什么无界,以及它在超大模型中造成的问题
  • 写出SiTU-GLU的完整公式,指出每一项的作用和数值范围
  • 推导scaled tanh的局部展开,说明它为何在原点附近等价于线性变换
  • 对比硬截断和软安全帽的差异,解释为什么平滑有界比直接裁剪更好
  • 计算SiTU-GLU的输出上界,并用实验验证
需要理解SwiGLU激活函数的基本形式、GLU(Gated Linear Unit)的gating机制,以及tanh和sigmoid函数的基本性质。

8.1 从SwiGLU的隐患说起

SwiGLU是当前大模型最主流的激活函数,几乎所有旗舰模型——LLaMA、Mistral、Qwen——都采用了它。它的核心思想很简单:用一个sigmoid门控信号来调节线性变换的输出,让信息流可以选择性地通过。

SwiGLU的标量形式可以写成:

SwiGLU(x) = x · σ(x)

其中σ(x) = sigmoid(x) = 1/(1+e-x)。看上去很温和,不是吗?sigmoid的输出在(0,1)之间,x乘以一个0到1之间的数,似乎不会太大。

但问题恰恰出在这里。让我们把SwiGLU的标量行为仔细看一遍:当x = 4时,σ(4) ≈ 0.982,所以SwiGLU(4) ≈ 3.93。当x = 10时,σ(10) ≈ 0.99995,SwiGLU(10) ≈ 9.9995。当x = 100时,σ(100) ≈ 1.0,SwiGLU(100) ≈ 100。

为什么这是问题?sigmoid在x很大时趋近于1,所以SwiGLU(x) ≈ x。这意味着SwiGLU的输出没有上界——它和x本身一样可以无限增长。在70亿参数的模型里,梯度下降能把权重控制住,偶尔有个大激活值也不致命。但当参数量膨胀到28亿(2.8T),模型深度和宽度都大幅增加,中间激活值的方差也在累积。一个无界的激活函数就像一根没有保险丝的电线——平时没事,但一旦过载,整栋楼都跳闸。

K3团队在训练2.8T参数模型时亲历了这个问题:SwiGLU的激活值在部分层突然爆炸,导致训练不稳定甚至崩溃。这不是偶发事件,而是架构层面的结构性风险。

SwiGLU的输出无界:|SwiGLU(x)| = |x · σ(x)| 可以任意大,因为在|x| → ∞时,σ(x) → 1,SwiGLU(x) ≈ x。在2.8T参数规模的模型中,这会导致激活值爆炸和训练崩溃。

8.2 SiTU-GLU:带安全帽的激活

解决思路很直观:既然问题是无界,那就加一个界。但怎么加,大有讲究。

最粗暴的做法是直接硬截断:把超过某个阈值的值裁掉。但这会带来一个严重问题——梯度消失。想象一下,你用一把锋利的剪刀把超出100的值全部剪成100。在那个被剪掉的区域里,梯度变成了零。模型学到「输出不能超过100」,但代价是丧失了在那个区域的微调能力。这就好比你给弹簧加了一块硬铁板——碰到铁板就停了,但弹簧也因此失去了在边界附近继续调节的自由度。

SiTU-GLU(Sigmoid-Tanh Unit GLU)采用了更优雅的方案:用scaled tanh替代原始的线性项,实现平滑有界。公式如下:

SiTU-GLU(x) = β1 · tanh(Wgx / β1) ⊙ σ(Wgx) · β2 · tanh(Wux / β2)

让我们逐项拆解:

含义数值范围
β1 · tanh(Wgx / β1)门控分支(gate),缩放tanh替代原始线性[−β1, β1] = [−4, 4]
σ(Wgx)sigmoid门控信号(0, 1)
β2 · tanh(Wux / β2)上投影分支(up),缩放tanh替代原始线性[−β2, β2] = [−25, 25]

关键参数设置:β1 = 4(门控分支),β2 = 25(上投影分支)。

SiTU-GLU的输出上界为 β1 × β2 = 4 × 25 = 100。无论输入多大,输出都不会超过这个值。这就是它的「安全帽」。

想象一条河流,SwiGLU是一条没有堤坝的河——水量小的时候没事,水量大的时候泛滥成灾。SiTU-GLU是给这条河修了堤坝,但堤坝不是一堵死墙,而是有弹性的橡胶坝——水少的时候完全感觉不到它的存在(河流自由流动),水大的时候它逐渐变硬,把水位兜住,而且水还能在坝面上缓缓流过,不会突然断流。

类比局限:橡胶坝是物理阻挡,水流会被完全截住;而scaled tanh是数学上的渐近有界,输出永远渐近但永远达不到上界。此外,橡胶坝对所有方向一视同仁,但SiTU-GLU的门控和上投影分支可以独立调节。

8.3 为什么用scaled tanh?

现在关键的问题是:为什么选择 scaled tanh 而不是别的有界函数?答案在局部展开里。

考虑函数 f(z) = β · tanh(z / β)。当z ≈ 0时,对它做泰勒展开:

f(z) = β · tanh(z/β)

= β · [z/β − (z/β)3/3 + ...]

= z − z3/(3β2) + O(z54)

= z + O(z32)

这意味着在原点附近,scaled tanh 一阶等价于恒等函数,也就是等价于原始的线性变换!当β足够大时(β1=4, β2=25),在大部分正常工作的输入范围内,SiTU-GLU和SwiGLU的行为几乎一模一样。只有当输入真的冲到极端值时,tanh的饱和特性才把它兜住。

为什么一阶等价如此重要?因为预训练模型中,绝大多数激活值都分布在原点附近(标准差通常在1-2的量级)。如果我们用一个和SwiGLU行为差异很大的替代函数,那就等于把所有预训练权重都废掉了——模型需要重新学习全新的激活模式。而SiTU-GLU保证了:在正常工作区间内,它是SwiGLU的「透明替身」;只有在危险区域,它才露出安全帽的真面目。

论文附录B进一步证明:当 β1, β2 → ∞ 时,SiTU-GLU逐点收敛到SwiGLU。换句话说,SwiGLU是SiTU-GLU在安全帽「无限宽松」时的极限情况——安全帽变成了空气。

limβ12→∞ SiTU-GLU(x) = SwiGLU(x)

这个收敛性质意味着:SiTU-GLU不是对SwiGLU的「推翻」,而是对它的「推广」。它多了一个有界的保证,但不改变核心行为。

8.4 安全帽 vs 硬截断:梯度视角

硬截断(hard clamping)和SiTU-GLU的scaled tanh都可以把输出限制在有限范围内,但它们的梯度行为截然不同。

硬截断的梯度在边界处为零:

d/dz [clamp(z, -c, c)] = 0    当 |z| ≥ c

这意味着一旦某个神经元的输出被截断,梯度反向传播到此处就断了——权重收不到任何更新信号。在极端情况下,大量神经元被截断,模型的很大一部分实际上停止了学习。

而scaled tanh的梯度:

d/dz [β · tanh(z/β)] = sech2(z/β)

当 |z| ≫ β 时 → 0(渐近)

但当 |z| ≈ β 时 → sech2(1) ≈ 0.42(非零)

当 |z| ≪ β 时 → 1(几乎无损)

关键区别在于:在|z| ≈ β的「安全帽边缘」区域,梯度仍然是非零的。模型在这个区域依然可以微调权重,逐步把激活值从边界拉回来。这是一个自我修复机制——而不是像硬截断那样直接切断了反馈回路。

属性硬截断Scaled Tanh(SiTU-GLU)
输出有界
边界处梯度严格为零渐近趋零但非零
原点附近行为线性(未截断区)近似线性(一阶等价)
可微性不可微(边界点)处处光滑可微
梯度修复能力

图4对比了GLU、SwiGLU、SiTU-GLU三种激活函数的标量响应曲线。可以清楚看到:GLU和SwiGLU的响应随输入无界增长,而SiTU-GLU的曲线在远处平滑地饱和到水平线——输出被兜住了,但曲线没有折角,梯度还在。

8.5 输出上界的精确推导

让我们严格推导SiTU-GLU的输出上界。

对于每个输出分量,SiTU-GLU的形式为:

output = [β1 · tanh(g/β1)] · σ(g) · [β2 · tanh(u/β2)]

其中g和u分别是门控分支和上投影分支的pre-activation值。逐项分析范围:

  • 1 · tanh(g/β1)| ≤ β1 = 4
  • 0 < σ(g) ≤ 1
  • 2 · tanh(u/β2)| ≤ β2 = 25

因此:

|SiTU-GLU(x)| ≤ β1 × 1 × β2 = 4 × 25 = 100
输出上界 |SiTU-GLU(x)| ≤ 100,这是输入任意大时的最坏情况保证。在实际训练中,绝大部分激活值远小于此上界,但这个100的「天花板」确保了训练永远不会因为激活爆炸而崩溃。

注意,β1和β2的选择不是任意的。β1=4是为了让门控分支在正常工作区间内几乎不受影响(4倍标准差已覆盖99.99%的高斯分布),β2=25是因为上投影分支的输出方差更大,需要更宽松的安全帽。它们的乘积100是一个经验上兼顾「不勒头」和「兜得住」的上界。

实验室 8-1:SiTU-GLU激活值可视化可运行
50
点击运行查看结果
说明:对比SwiGLU和SiTU-GLU在不同输入幅度下的输出值。观察SwiGLU随x线性增长而SiTU-GLU被有界兜住。调节滑块从0到200,观察两条曲线的分化点。
L1 直接应用SiTU-GLU基本结构

写出SiTU-GLU的完整公式,并标注每一项的数值范围。计算输出的无穷范数上界。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果将β1改为2、β2改为50,输出上界是否改变?对正常工作区间的近似程度有何影响?
L2 推导分析Scaled tanh局部展开

对 f(z) = β · tanh(z/β) 在 z=0 处做泰勒展开到三阶项。证明当 β ≫ z 时,f(z) ≈ z,即一阶等价于恒等函数。并解释这为什么对SwiGLU到SiTU-GLU的迁移至关重要。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果用 β · (2/(1+e-2z/β) - 1) 替代 β · tanh(z/β),泰勒展开是否相同?为什么?
L3 综合评价有界激活的设计哲学

假设你要设计一个新的有界激活函数替代SiTU-GLU,你会选择什么形式?讨论至少三种候选方案(如sigmoid乘积、softplus有界变体、分段线性有界函数),从梯度特性、实现复杂度和与SwiGLU兼容性三个维度进行比较。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:SiTU-GLU的β1和β2是否应该可学习?如果可学习,训练过程中它们会趋向无穷大还是有限值?
我能解释SwiGLU的输出为什么无界,以及它在2.8T模型中导致的具体问题
我能写出SiTU-GLU的完整公式,指出β1=4和β2=25的取值理由,以及输出上界为100
我能推导scaled tanh的泰勒展开,解释一阶等价的意义,并说明硬截断在梯度上的缺陷

答辩:如果我是审稿人

「SiTU-GLU引入了额外的tanh运算,这会增加计算开销和推理延迟。在有足够工程手段(如梯度裁剪、混合精度loss scaling)的情况下,是否真的需要在激活函数层面做有界化?」

参考防守(先自己组织语言再看)

首先,梯度裁剪和loss scaling是全局手段,它们对所有梯度一视同仁,无法针对特定层的激活值做精细控制。当某层激活值爆炸时,全局裁剪会同时伤害正常层的梯度信号。其次,SiTU-GLU的额外计算量极小——两次tanh运算相对于矩阵乘法(特别是2.8T模型的巨大隐藏层)的开销几乎可以忽略。第三,SiTU-GLU是有架构层面的保证:无论训练发生什么,激活值永远不会超过100。这种确定性的安全保证,是全局裁剪等经验性手段无法提供的。最后,K3团队的实际训练经验已经证明:没有SiTU-GLU,2.8T模型的训练会崩溃;有了它,训练稳定。这是实证性最强的反驳。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

SwiGLU的输出无界在2.8T参数模型中造成了激活值爆炸和训练崩溃。SiTU-GLU用scaled tanh替代线性项,给门控分支和上投影分支分别戴上β1=4和β2=25的「安全帽」,输出上界为100。scaled tanh在原点附近一阶等价于恒等函数(泰勒展开:f(z) = z + O(z32)),保证正常工作区间内行为与SwiGLU几乎一致。与硬截断不同,scaled tanh处处光滑可微,在安全帽边缘区域梯度非零,模型仍能自我修复。当β→∞时SiTU-GLU逐点收敛到SwiGLU,说明SiTU-GLU是SwiGLU的有界推广而非替代。

第9章 Quantile Balancing:让896个专家雨露均沾

论文 2.3.3(第8-9页),公式13-14,图5

896个专家,每个token只选16个——这是MoE模型的核心困境。如果某个专家被大家抢着用,它就会过载;如果某个专家无人问津,它就在浪费参数。Quantile Balancing是一种「不需要辅助损失」的负载均衡方法,它的数学优雅之处在于:把专家侧的负载问题,转化为了token侧的分位数问题。

学完这一章你应该能做到

  • 解释MoE路由中的负载不均衡问题及其对训练的影响
  • 写出Quantile Balancing的路由公式和偏置更新公式
  • 说明固定步长偏置更新在大规模专家下的缺陷
  • 推导Top-(k+1)路由如何自然给出分位数截断点
  • 解释直方图估计在大规模分布式训练中的应用
需要理解Mixture of Experts的基本架构、Top-k路由机制、以及分位数(quantile)的统计概念。

9.1 896个专家的调度难题

K3的MoE层有896个专家,每个token只选Top-16。这意味着每个token的「注意力」集中在1.8%的专家上。这本身没问题——稀疏选择是MoE效率的来源。但问题在于:如果所有token都偏爱少数几个「明星专家」,这几个专家就会变成瓶颈,而大量「冷门专家」则白白占用参数却不参与计算。

传统做法是加辅助损失(auxiliary loss),惩罚负载不均衡。但这有一个根本性矛盾:辅助损失太弱,均衡效果不够;辅助损失太强,会干扰主训练目标——模型被迫均匀使用专家,即使某些专家天生更擅长某些任务。

为什么辅助损失有根本缺陷?因为辅助损失和主损失在竞争同一个梯度信号。辅助损失要求「均匀分配」,主损失要求「按能力分配」。两者拔河的结果往往是两头不讨好——既没有完全均衡,又损害了路由质量。K3团队选择的是另一条路:彻底去掉辅助损失,改用偏置项直接调节路由选择。

9.2 无辅助损失路由:偏置项的思路

核心思想是给每个专家j加一个可调偏置bj。路由选择时,在原始打分上加上偏置:

选择:Ti = argtopk(si,j + bj)

但关键的是,偏置不参与混合权重的计算:

权重:pi,j = si,j / ∑r∈Ti si,r

这意味着偏置只影响「谁被选中」,不影响「选中后分到多少权重」。这是一种纯粹的「调度工具」,不会干扰模型对专家能力的判断。

偏置项 bj:附加在专家j路由分数上的标量,仅用于Top-k选择,不参与混合权重计算。过载的专家获得负偏置(降低被选概率),闲置的专家获得正偏置(增加被选概率)。

偏置的更新规则是核心。最早的方法使用固定步长更新:

bj(t+1) = bj(t) + γ · sign(avgload − loadj(t))

当专家j的负载低于平均时,bj增加(鼓励更多token选它);高于平均时,bj减少( discourage过度使用)。步长γ是固定的。

固定步长更新的致命问题:在896个专家的规模下,步长γ太小则收敛极慢(需要数千步才能显著改变负载),γ太大则剧烈震荡(偏置在正负之间反复跳)。无论怎么调γ,都无法同时满足快速响应和平稳收敛。

9.3 Quantile Balancing:从固定步长到自适应步长

Quantile Balancing(QB)的核心洞见是:与其用固定步长试探性地调整偏置,不如直接计算「要让第j个专家恰好达到目标负载,偏置应该设在哪里」。

先建立完整的路由公式(公式13):

si,j = σ(Wr · xi)   (router分数,sigmoid输出)

Ti = argtopk(si,j + bj)   (选择Top-k专家)

pi,j = si,j / ∑r∈Ti si,r   (混合权重,不含偏置)

现在的问题是:bj应该如何更新?QB的答案是(公式14):

bj(t+1) ← quantile1−k/n(s:,j − αi(t))   然后减去均值

这个公式看起来复杂,让我们逐层拆解。

9.4 Top-(k+1)的妙用:分位数截断点的自然来源

公式中的αi(t)是token i的「截断点」——即第k大的(si,j + bj)值。恰好选了Top-k个专家时,第(k+1)大的值就是自然的截断线。所以如果我们同时做Top-(k+1)路由,就能免费得到这个αi,无需额外计算。

想象一个高考录取系统。896所大学,每个考生填16个志愿。每所大学有一个「录取线」bj——考分低于线的考生不会被这所大学考虑。如果某所大学报名人数超标,就提高录取线(增大bj,实际是减小,因为bj是加在考生分上的);如果招不满,就降低录取线。Quantile Balancing做的事就是:根据今年的报名数据,自动计算明年每所大学应该设的录取线,使得每所大学恰好招到目标人数。

类比局限:高考录取中大学容量是硬约束(教室就那么多),而MoE专家的计算能力是按batch动态分配的,负载目标q是一个统计期望而非物理极限。

让我们用论文的图5来具体化这个过程。图5展示了一个小规模示例:m=8个token,n=4个专家,k=1(每个token选1个专家),目标负载q = mk/n = 8×1/4 = 2(每个专家应被2个token选中)。

QB的更新逻辑:

  • 对每个专家j,收集所有token对它的「余量」:s:,j − αi,即「如果偏置为0,这个token会以多大的余量选择/不选择专家j」
  • 取这些余量的第(1-k/n)分位数。在图5的例子中,k/n=1/4,所以取第75%分位数
  • 这个分位数的含义:如果设bj等于这个值,恰好有q=2个token的(si,j+bj)超过αi,即恰好2个token选择专家j
  • 最后减去所有bj的均值,避免偏置整体偏移
Quantile Balancing的核心数学洞见:令偏置bj等于余量分布的特定分位数,可以精确地控制每个专家被选中的token数量等于目标负载q=mk/n。这是自适应的——偏置大小由数据分布决定,而非人为固定的步长。

9.5 大规模下的直方图估计

在K3的实际训练中,全局batch包含数百万个token。对896个专家中的每一个,计算数百万个余量值的精确分位数,计算和通信成本都不可接受。

QB的解决方案是用直方图近似分位数

  • 每个GPU维护本地直方图(几百个bin),统计余量值的分布
  • 用all-reduce sum聚合所有GPU的直方图
  • 在聚合直方图上用线性插值估计分位数

几百个bin的直方图,每个bin一个整数,896个专家总共不到1MB的数据量。一次all-reduce sum的通信成本微乎其微,而分位数的估计精度对路由质量来说完全足够。

方法每步通信量收敛性精度
固定步长更新896个浮点数(可忽略)慢/震荡低(步长与负载差距无关)
QB精确分位数数百万×896个浮点数(不可行)一步到位精确
QB直方图估计~896×几百bin(<1MB)一步到位高(直方图足够精细)
为什么直方图只需几百个bin?因为分位数估计的精度需求很低。偏置bj的目标是让每个专家的负载接近q,不需要精确到小数点后几位。一个偏置偏差0.01可能只影响1-2个token的路由选择,这在百万级batch中是可忽略的噪声。所以几百个bin提供的精度远超需求。

训练完成后,偏置bj被冻结,推理时直接使用训练结束时的值。这是因为推理时没有「更新偏置以均衡负载」的需求——偏置已经收敛到了让负载大致均衡的值。

推理时偏置冻结:bj在训练中通过QB逐步调整到稳态,推理时固定不变。不需要在推理时做负载均衡计算。
实验室 9-1:MoE负载均衡模拟可运行
896
16
点击运行查看结果
说明:模拟不同规模MoE的负载分布。对比固定步长更新和QB的收敛速度。观察896个专家下固定步长的震荡现象。
L1 直接应用QB路由公式

写出Quantile Balancing的路由公式(选择和权重两部分),并解释为什么偏置bj只参与选择而不参与权重计算。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果偏置也参与权重计算(pi,j ∝ si,j + bj),会有什么问题?
L2 推导分析分位数截断推导

在m=8个token、n=4个专家、k=1的设定下,目标负载q=mk/n=2。推导为什么bj设为余量分布的第75%分位数时,恰好有2个token选择专家j。用数值示例说明。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果k=2(每个token选2个专家),目标负载q=mk/n=4,应该取余量分布的第几分位数?
L3 综合评价QB与辅助损失的对比

对比Quantile Balancing和辅助损失(auxiliary loss)两种负载均衡方法的优劣。从以下维度分析:(1)对主训练目标的干扰程度;(2)超参数敏感性;(3)大规模下的可扩展性;(4)推理时的额外开销。在什么场景下你仍然会倾向于使用辅助损失?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果将QB和辅助损失结合使用(QB控制偏置 + 轻量辅助损失微调),可能有什么优势或风险?
我能解释MoE路由中负载不均衡的问题,以及辅助损失方法的根本矛盾
我能写出QB的偏置更新公式,并解释分位数如何精确控制每个专家的负载
我能说明Top-(k+1)路由如何自然提供截断点αi,以及直方图估计在大规模下的可行性

答辩:如果我是审稿人

「Quantile Balancing在推理时冻结偏置。但在分布外输入(out-of-distribution)上,训练时学到的偏置可能不再适合新的负载模式。这是否意味着QB在推理阶段失去了负载均衡能力?」

参考防守(先自己组织语言再看)

首先,推理时的负载均衡需求与训练时不同。推理通常batch较小(甚至batch=1),负载不均衡的影响远小于训练时的大batch场景——单个请求的专家选择本身就是确定的,不存在「其他token抢占了专家」的问题。其次,偏置bj反映的是专家的「受欢迎程度」,这在训练中已经稳定收敛,对分布外输入也有一定泛化能力——更强大的专家天然会被更多输入偏好。第三,如果确实出现极端分布偏移,可以采用推理时动态更新偏置的变体(在线QB),但这通常不必要。第四,实验中QB在各种benchmark上表现稳定,未见负载崩溃,说明冻结偏置在实践中是足够的。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

K3的896专家MoE层需要无需辅助损失的负载均衡方案。原始的固定步长偏置更新在大规模下收敛慢且易震荡。Quantile Balancing的核心洞见是:将偏置bj设为余量分布(s:,j − αi)的特定分位数,可以精确控制每个专家被选中的token数等于目标负载q=mk/n。Top-(k+1)路由自然提供截断点αi,无需额外计算。在大规模分布式训练中,用直方图近似分位数,通信成本低于1MB而精度远超需求。推理时偏置冻结,无需在线均衡。QB彻底摆脱了辅助损失与主损失的梯度竞争,实现了「调度归调度,学习归学习」的解耦。

第10章 原生视觉:MoonViT-V2从零训练

论文 2.4(第9-10页),图6

多模态大模型的一个根本问题是:视觉编码器该从哪里来?先用对比学习预训练一个视觉模型,再接入语言模型——这是K2.5的做法。但K3走了一条更彻底的路:视觉编码器从零训练,和语言模型一起做next-token prediction。结果是:不仅训练更稳定,效果也不逊于对比学习初始化。这意味着,对比学习预训练作为多模态LLM初始化的必要性,被K3的实验结果打了一个问号。

学完这一章你应该能做到

  • 解释多模态LLM中视觉编码器的两种初始化策略及其优劣
  • 说明MoonViT-V2的架构设计,包括时空分解注意力、时间池化和像素混洗
  • 分析从零训练比对比学习初始化更稳定的原因(梯度范数视角)
  • 计算不同分辨率下的视觉token数量,理解3584×3584像素在1M上下文中的可行性
  • 讨论「对比学习预训练是否必要」这一问题的实验证据和理论解释
需要理解ViT(Vision Transformer)的基本架构、对比学习(contrastive learning如CLIP/SigLIP)的预训练范式、以及next-token prediction的训练目标。

10.1 两种视觉编码器的诞生之路

多模态大模型需要把图像「翻译」成语言模型能理解的token序列。这个翻译器就是视觉编码器。问题是:这个编码器从哪里来?

路线A——对比学习初始化:先用对比学习(如SigLIP)在一个巨大的「图像-文本对」数据集上训练视觉编码器,让它学会把图像映射到一个与文本对齐的语义空间。然后把预训练好的编码器权重「嫁接」到语言模型上,再联合微调。K2.5走的就是这条路。

路线B——从零训练:视觉编码器不经过任何预训练,直接和语言模型一起从随机初始化开始,用next-token prediction目标联合训练。K3的MoonViT-V2走的就是这条路。

为什么路线A看起来更安全?因为对比学习给了视觉编码器一个「好起点」——它已经学会了提取图像的语义特征。如果从零训练,视觉编码器初期可能输出随机噪声,语言模型得在一片嘈杂中学习如何理解图像,训练似乎更难收敛。这是大多数多模态模型选择路线A的直觉。

但K3团队的实验发现了一个反直觉的事实:路线A虽然起点好,但训练过程反而更不稳定。

10.2 梯度范数告诉我们的真相

论文图6对比了两种初始化方式在训练过程中的梯度范数变化:

  • SigLIP初始化的MoonViT-3D:梯度范数整体更高,且出现明显的尖刺(spikes)。这些尖刺意味着某些训练步的梯度突然放大,可能导致参数更新过大,训练不稳定。
  • 从零初始化的MoonViT-V2:梯度范数更低,且全程平稳无尖刺。训练过程像一条平静的河流,没有急流险滩。

为什么会这样?原因在于特征分布不匹配

SigLIP预训练的视觉编码器输出的是「对比学习对齐」的特征——这些特征在一个与文本共享的语义空间中,分布紧凑、范数相对固定。而语言模型期待的是「next-token prediction对齐」的特征——这些特征的分布更宽、范数变化更大。当两种分布不匹配的特征被迫在同一个前向传播中协作时,梯度信号就会出现剧烈振荡。

想象一个公司并购:A公司(对比学习编码器)有自己成熟的工作方式,B公司(语言模型)也有自己成熟的工作方式。并购后强行整合,两套体系的摩擦导致效率下降甚至冲突——这就是梯度尖刺。而如果是「从零创业」(从零训练),团队从一开始就磨合,虽然起步慢一点,但发展过程更平稳。

类比局限:公司并购中有文化融合、人员冲突等软因素,而模型训练中主要是梯度统计特性的匹配。此外,并购也可能产生协同效应(正迁移),正如对比学习初始化在某些场景下确实有优势——只是K3的规模下,不稳定性超过了优势。

训练稳定性胜过初始化优势:在K3的规模和训练设置下,从零训练的MoonViT-V2全程梯度平稳,而SigLIP初始化的MoonViT-3D梯度范数更高且出现尖刺。稳定性是大规模训练的硬性约束——一次梯度爆炸可能毁掉几小时的训练进度。

10.3 MoonViT-V2的架构设计

MoonViT-V2的架构需要同时处理图像和视频,且要和文本token在同一个Transformer主干中流动。它的设计围绕三个核心问题展开:时空如何解耦、token如何压缩、分辨率如何扩展。

架构参数

参数
层数27
参数量~0.4B
归一化RMSNorm
线性层偏置
输入图像/视频像素
输出视觉token序列

27层、0.4B参数——与语言模型数十亿参数的体量相比,这是一个轻量级的视觉编码器。它的职责不是「深度理解」图像,而是把像素信号编码成语言模型能消化的高质量token序列。

RMSNorm:Root Mean Square Normalization,与LayerNorm类似但去掉均值中心化步骤,只做缩放。计算更快,且在K3的语言模型中统一使用。

10.4 时空分解注意力:拆开空间和时间

视频是三维信号:空间(宽×高)×时间(帧数)。如果把所有像素展平成token,注意力矩阵的复杂度是O(T²),其中T = H × W × F(高×宽×帧数)。这对于高分辨率视频是不可接受的。

MoonViT-V2的做法是分解注意力

  • 帧内空间注意力:在同一帧内做自注意力,捕捉空间结构(哪里有物体、边缘在哪里)
  • 帧间时间注意力:跨帧做注意力,捕捉时间动态(物体如何运动、场景如何变化)

这样每步注意力的复杂度从O((HWF)²)降为O(HW) + O(F),分别处理空间和时间维度。

为什么分解是合理的?因为视觉信号有一个天然的分解结构:同一帧内的像素之间有强相关性(相邻像素属于同一物体),不同帧的同一位置像素之间也有相关性(运动轨迹连续)。完全分解会丢失跨维度交互(如「运动物体在哪里」),但这些信息可以在后续的语言模型层中通过跨token注意力补回来——语言模型本身就是处理任意token间关系的专家。

10.5 时间池化与像素混洗:压缩token的两把刀

视觉信号会产生大量token,必须压缩才能送入有限上下文的语言模型。MoonViT-V2用了两把「压缩刀」:

时间池化(Temporal Pooling):沿时间维度合并相邻帧的token。比如4帧池化为1帧,时间维度的token数减少4倍。这对于视频特别重要——30fps的视频有大量冗余帧,相邻帧几乎相同。

像素混洗下采样(Pixel-shuffle with 2×2 downsampling):空间维度的压缩。将2×2的空间块重组为1个token,视觉token总数减少4倍。与简单的平均池化不同,pixel-shuffle保留了更多空间细节,因为它是通过线性变换实现的重组而非信息丢弃。

视觉token压缩总倍率 = 时间池化倍率 × 像素混洗空间倍率

举例:一个3584×3584像素的图像,经过2×2像素混洗后变为1792×1792的空间网格,再展平为token。在patch size为14×14(常见ViT设置)的情况下,token数量为(1792/14) × (1792/14) = 128 × 128 = 16,384。加上视频帧的时间池化,token数还可以进一步压缩。

K3支持最高3584×3584像素的视觉输入,在1M token上下文窗口内可以容纳。这在多模态LLM中是领先的分辨率支持。

10.6 对比学习预训练真的必要吗?

MoonViT-V2最重要的发现不是架构创新,而是一个实验结论:从零训练的视觉编码器,在多模态评测上与对比学习初始化的基线性能持平

这意味着什么?

在K3之前,主流观点是:对比学习预训练为视觉编码器提供了「语义先验」,是高质量多模态理解的必要前提。这个观点有直觉支撑——对比学习让视觉编码器学会了「猫的图片」和「cat」文本之间的映射,这个映射对下游任务有正迁移。

但K3的实验结果暗示了另一种可能性:在足够大的语言模型和足够多的多模态数据下,next-token prediction目标本身就足以让视觉编码器学会高质量的特征表示。对比学习的「语义先验」在训练初期可能有帮助,但随着训练的推进,两种初始化最终收敛到相似的能力水平。

为什么这个发现重要?因为它简化了多模态模型的训练流程。去掉对比学习预训练阶段,意味着少了一个工程复杂度很高的组件:不需要单独收集图像-文本对数据、不需要单独训练SigLIP/CLIP模型、不需要处理两个预训练模型的接口对齐问题。训练流水线从「两阶段」简化为「一阶段」,工程成本大幅下降。

当然,这个结论的适用范围需要谨慎理解:

  • 它适用于K3的规模和训练设置——0.4B参数视觉编码器 + 数十亿参数语言模型 + 大量多模态数据。在更小规模下,对比学习初始化的正迁移可能更显著。
  • 它适用于next-token prediction目标——如果训练目标不同(如图文匹配),结论可能不同。
  • 它是一个实验性结论而非理论证明——不能排除在特定条件下对比学习初始化仍有优势。

10.7 原生多模态的威力:视觉token与文本token同流

MoonViT-V2输出的视觉token和文本token在同一个Transformer主干中流动,共享注意力机制。这意味着:

  • 模型可以同时理解图像中的视觉内容和文本中的语义内容
  • 模型可以生成代码来处理视觉信息(如写Python脚本分析截图中的数据)
  • 模型可以检查截图并根据截图内容迭代调整自己的输出
  • 视觉和语言的交互不是事后对齐,而是原生融合——在每一个Transformer层中,视觉token和文本token都可以互相attend

这是K3多模态能力的基础架构保障。从零训练不是偷懒——它是一种更彻底的原生多模态策略。

实验室 10-1:视觉Token数量计算器可运行
27
点击运行查看结果
说明:给定ViT层数,估算不同分辨率下的参数量、视觉token数量、以及在1M上下文中的占比。观察3584×3584分辨率是否在上下文预算内。
L1 直接应用MoonViT-V2架构

列出MoonViT-V2的关键架构参数(层数、参数量、归一化方式、偏置设置),并解释为什么选择无偏置线性层和RMSNorm。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果将ViT层数从27增加到48,参数量大约增加到多少?对视觉编码质量和训练速度分别有何影响?
L2 推导分析时空分解注意力

假设视频分辨率为224×224,8帧。计算:(1)不分解时的全注意力token数和注意力矩阵大小;(2)帧内空间注意力+帧间时间注意力分解后的token数和注意力矩阵大小;(3)计算量减少的倍数。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果视频帧数为1(纯图像),分解注意力退化为哪种形式?此时还有计算量节省吗?
L3 综合评价对比学习预训练的必要性

K3的实验表明从零训练的MoonViT-V2与SigLIP初始化基线性能持平。请分析:(1)这个结论在什么条件下成立?(2)在什么场景下对比学习预训练仍然可能有优势?(3)如果未来模型和数据规模继续增长,你认为从零训练会完全取代对比学习初始化吗?给出你的理由。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果多模态训练目标从next-token prediction改为图文对比学习(如FLIP),从零训练还能成功吗?
我能解释两种视觉编码器初始化策略(对比学习初始化 vs 从零训练),以及K3选择从零训练的原因
我能说明MoonViT-V2的架构设计,包括时空分解注意力、时间池化、像素混洗下采样
我能从梯度范数角度分析为什么从零训练比SigLIP初始化更稳定,并理解这个发现对多模态LLM训练范式的影响

答辩:如果我是审稿人

「从零训练与SigLIP初始化性能持平,这只能说明在K3的特定规模下对比学习预训练的边际收益为零。但在更少数据或更小模型的场景下,对比学习预训练的head-start可能至关重要。论文是否过度推广了这个结论?」

参考防守(先自己组织语言再看)

审稿人的担忧是合理的,论文确实需要更谨慎地界定结论的适用范围。但可以从几个角度辩护:第一,论文的核心贡献不是「对比学习无用」,而是「在大规模多模态训练中,从零训练是一条可行且更简单的替代路线」。这是一个存在性证明,而非普遍否定。第二,从工程角度看,简化训练流水线(去掉对比学习阶段)的价值是实实在在的,即使小规模下对比学习仍有优势,了解「大规下可以不用」本身就是有价值的工程知识。第三,论文给出的梯度稳定性证据(图6)提供了机制性解释——不仅仅是「性能持平」的经验结论,还有「为什么不使用对比学习初始化反而更好」的因果分析。第四,未来工作可以系统测试不同规模下的交叉点,论文已为此奠定了基础。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

K3的视觉编码器MoonViT-V2选择了从零训练而非对比学习预训练初始化。27层、0.4B参数的ViT架构,使用RMSNorm、无偏置线性层、时空分解注意力、时间池化和像素混洗下采样。核心发现是:从零训练的梯度范数更低且无尖刺,训练全程稳定;而SigLIP初始化的编码器梯度范数更高且出现尖刺,训练不稳定。尽管起点不同,两者在多模态评测上最终性能持平。这表明在大规模训练中,对比学习预训练作为初始化并非必要,next-token prediction目标本身就足以学到高质量视觉特征。MoonViT-V2的视觉token与文本token在同一Transformer主干中流动,支持3584×3584像素输入在1M上下文窗口内,实现了真正的原生多模态融合。

第11章 预训练策略:2.8T参数怎么练

论文 3(第10-12页),图7,Table 1

2.8T参数、896个路由专家、1M上下文——K3的预训练不是简单地把K2放大,而是一场从架构到数据到优化器的系统性重构。这一章拆解每个设计选择背后的「为什么」,让你看懂这些数字不是凑出来的,而是每一步都有道理。

学完这一章你应该能做到

  • 说出K3相对K2的每一项架构变化及其动机
  • 解释Rephrasing Recipe的三个步骤及其解决的核心问题
  • 对比Cosine Decay与WSD调度器的优劣,理解为何K3选择前者
  • 解释Per-Head Muon优化器如何解决全矩阵正交化的尺度失衡问题
  • 画出四阶段上下文扩展的课程表,说明NoPE在其中扮演的角色
  • 描述长上下文数据的合成管线:去重、质量过滤、上采样、多模态拼接
前置条件:理解MoE架构基础(第3-4章)、K2架构细节(第5章)、Scaling Law直觉(第9章)。

11.1 数据版图:四域文本加全域视觉

K3的预训练数据由两大板块构成:文本域和视觉域。文本域划分为四个子域——Web Text(网页文本)、Code(代码)、Mathematics(数学)、Knowledge(结构化知识)。视觉域则是一个大规模语料库,涵盖六大类型:图像描述(captions)、图文交错(interleaved image-text)、OCR数据、感知数据、视频数据、以及视觉编程数据(visual coding data)。

为什么要把视觉数据分这么细?直觉是这样的:如果你只用图像描述数据,模型学会的是「看到图→说一句话」这种浅层映射;但真实世界的视觉理解远不止于此。OCR要求模型从像素中提取文字结构,感知数据要求模型理解空间关系和物理属性,视频数据要求模型跨越时间维度建立因果链,视觉编程数据则要求模型把视觉信息转化为可执行的操作。每一种视觉能力对应一种不同的「看」的方式,混在一起喂反而让模型在能力之间互相干扰。

类比:多语种厨师

想象训练一个厨师。如果你只给他中餐菜谱(类比 captions),他只会做中餐。但如果你同时给他法餐、日餐、烘焙、分子料理的教材,并且标注清楚每种烹饪体系的原理,他就能融会贯通。关键不是把所有菜谱搅成一锅,而是每种菜系都有一套体系化的训练材料。视觉数据的六类划分就是这套体系化思路。类比在此失效的地方:厨师学的是同一套刀工火候,而不同视觉能力需要的底层表征差异很大——OCR需要细粒度纹理特征,视频需要时序建模,它们在特征空间中的「坐标」差距远大于不同菜系之间的差距。

类比失效点:烹饪技能共享大量基础动作,而OCR和视频理解在特征层面几乎没有共享的底层计算。

K3的一个核心设计决策是原生多模态训练Native Multimodal Training):语言和视觉从预训练第一天就联合优化,而不是先训好语言模型再通过后对齐(post-hoc alignment)接入视觉。这意味着模型不需要在后期经历一个「翻译层」来把视觉表征对齐到语言空间——视觉和语言的表征从一开始就在同一个优化目标下共同进化。代价是训练更复杂、调参更难,但收益是模态之间的对齐深度远超后对齐方案。

11.2 Rephrasing Recipe:让模型从「背」到「懂」

大规模语料库有一个顽疾:知识密集型文本(如百科、教科书)和数学推导文本的分布极其不均匀。同一个知识点可能被数万篇质量参差不齐的文章重复表述,模型很容易陷入「死记硬背」模式——记住特定表述方式,而非理解知识本身。

K3从K2继承了Rephrasing Recipe(改写配方),并在规模和保真度上做了升级。这个配方有三个步骤:

Rephrasing Recipe 三步法

  1. 风格多样化提示Style/Perspective-Diverse Prompting):对同一知识片段,使用不同风格和视角的提示词进行改写。风格维度包括学术严谨、通俗解说、对话式、苏格拉底问答等;视角维度包括初学者视角、专家视角、批判性视角等。这确保模型看到同一知识的多种表达方式。
  2. 逐块自回归生成Chunk-Wise Autoregressive Generation):不是一次性改写整篇文档,而是将原文切分为语义连贯的块(chunks),逐块生成改写。这样做的好处是每个块的改写都以前序块的改写结果为条件,保证上下文连贯性,同时避免长文本改写中的语义漂移。
  3. 保真度校验Fidelity Verification):改写后的文本必须通过保真度检查——核心事实不能增删,关键逻辑不能歪曲。这一步是防止改写引入「幻觉」的最后一道防线。

这三步解决的不是一个「数据量」问题,而是一个「数据质量分布」问题。即使你有一亿篇高质量文章,如果它们的表述方式高度同质,模型学到的更多是统计上的措辞模式,而非深层语义。Rephrasing通过增加表述多样性来打破这种同质性,让模型被迫在语义层面而非措辞层面进行泛化。

为什么不能直接用数据增强?
常规数据增强(如回译、同义词替换)改的是表面形式,不改深层结构。Rephrasing的多样性提示明确引导改写者从不同认知视角出发——同样是解释「梯度下降」,学术视角会从凸优化理论出发,通俗视角会用「下山」做类比,苏格拉底视角会通过追问引导读者自己推导。这种认知层面的多样性远超表面形式的多样性。

11.3 Scaling Law:效率的2.5倍跃升

图7给出了K3相对K2的Scaling Law对比。核心结论是:在相同计算预算下,K3的总体Scaling效率比K2高出约2.5倍

什么是「Scaling效率」?简单说,就是每投入一单位FLOPs,模型性能提升多少。2.5倍意味着:如果K2需要100个计算单位达到某个性能水平,K3只需要40个计算单位就能达到同等水平。这是一个巨大的效率飞跃。

Scaling Efficiency Gain = \frac{\text{FLOPs}_{K2} \text{ to reach target}}{\text{FLOPs}_{K3} \text{ to reach target}} \approx 2.5

这个2.5倍从哪里来?不是单一因素,而是多项架构和训练决策的叠加效果:更宽的MoE(896个路由专家vs K2的384个)提供了更细粒度的知识路由,原生多模态训练消除了模态对齐的信息损失,Rephrasing提升了数据效率,Per-Head Muon改善了优化动态。每个改进单独看可能是10%-30%的效率提升,但它们之间有正向交互作用——更宽的MoE让Rephrasing的多样性表达更充分,Muon优化器让深层网络(93层)的训练更稳定——最终叠加出2.5倍的整体效率跃升。

11.4 学习率调度:Cosine Decay胜出

学习率调度器的选择看似是工程细节,实际上对大模型训练的最终性能有显著影响。K3对比了两种调度器:Cosine Decay(余弦衰减)和WSD(Warmup-Stable-Decay,升温-稳定-衰减)。

表11.1 Cosine Decay vs WSD 学习率调度器对比
特性Cosine DecayWSD
学习率曲线从峰值平滑衰减至近零快速升温→长时间恒定→最后衰减
稳定期长度无显式稳定期需要手动设定稳定期比例
超参敏感度低(衰减曲线形状固定)高(稳定期/衰减期比例影响大)
最终性能在各自最优超参下更优略逊
训练中断恢复需从中断点继续衰减稳定期中断影响较小

实验结论:在各自的最优超参数下,Cosine Decay一致优于WSD。这可能违反一些人的直觉——WSD看起来更灵活,为什么反而不如Cosine Decay?

为什么更灵活的WSD反而更差?
关键在于「最优超参」这个词。WSD多出来的自由度(稳定期比例、衰减期比例)在原理上是优势,但在实践中这些额外超参的搜索空间极大,很难找到真正的最优组合。Cosine Decay虽然曲线形状固定,但恰恰因为超参少、搜索空间小,更容易找到接近最优的配置。这类似于正则化的逻辑——约束本身就是一种保护,防止你在高维超参空间中过拟合到某个局部最优。

11.5 架构跃迁:从K2到K3的每一项变化

Table 1完整列出了K2到K3的架构参数变化。这不是简单的「每项都加大」,而是有选择性的扩展:

表11.2 K2到K3架构参数对比
参数K2K3变化倍率
层数61931.52x
总参数量1.04T2.78T2.67x
激活参数量32.6B104.2B3.19x
路由专家数3848962.33x
激活专家数8162.00x
共享专家数122.00x
注意力头数64961.50x
上下文长度128K1M8.00x
每专家MoE隐层204830721.50x
LatentMoE维度03584(0.5x)新增
激活函数SwiGLUSiTU-GLU替换

仔细看变化倍率,你会发现扩展不是均匀的。上下文长度扩展了8倍(从128K到1M),这是最大的单项扩展;激活参数量扩展了3.19倍,大于总参数量的2.67倍——说明K3在MoE路由上做了更积极的激活(激活专家从8个增加到16个),让每个token利用更多的专家容量。LatentMoE维度从0变为3584,这是K3新增的组件,用0.5x的压缩比在路由前对隐状态做低维投影,降低路由计算的FLOPs开销。

激活函数从SwiGLU换为SiTU-GLU也值得注意。SwiGLU是当前MoE模型的主流选择,但SiTU-GLU在深层网络中表现出更平滑的梯度流动特性——这对93层的K3尤为重要,因为更深的网络对梯度消失/爆炸更敏感。

K3的架构扩展遵循「按需放大」原则:上下文长度扩展8倍是因为长上下文是K3的核心能力目标;激活专家翻倍是因为更宽的MoE需要更多并行路由才能发挥专家多样性;LatentMoE是新引入的效率组件,用维度压缩换取路由速度。

11.6 Per-Head Muon优化器:让每个头都有话语权

Muon是一种基于矩阵正交化的动量优化器。它的核心思想是:对动量矩阵做正交化后更新参数,这比传统的SGD动量在条件数差的问题上有更好的收敛性。但K3发现,直接对整个QKV投影矩阵做全矩阵正交化有一个问题:大尺度的头会支配更新方向

直觉是这样的:在多头注意力中,不同头学到的特征尺度差异很大。某些头可能学到了非常强的模式(大的动量值),而其他头还在探索(小的动量值)。全矩阵正交化会把这些头混在一起处理,结果正交化后的更新方向被尺度大的头主导,尺度小的头几乎得不到有效更新。

类比:合唱团的音量平衡

全矩阵正交化就像合唱团里只有一个人拿着麦克风——他的声音盖过了所有人,听众只能听到他唱的旋律。Per-Head Muon相当于给每个人单独配麦克风和调音台,每个人的声音被独立处理后再混合,确保每个声部都能被听到。类比失效点:合唱团的各声部最终要融合成一个和声,而注意力头的目标恰恰是各自学到不同的特征——它们不需要在输出上融合,只需要在参数更新上得到公平对待。

类比失效点:合唱团追求声部和谐,而注意力头追求特征多样性,两者对「公平对待」的需求本质不同。

Per-Head Muon的做法是:将QKV动量矩阵按头维度切分,每个头独立做正交化。数学上:

M^{(h)}_t = \beta_1 M^{(h)}_{t-1} + g^{(h)}_t \quad \text{(per-head momentum)}
U^{(h)}_t = \text{Orthogonalize}(M^{(h)}_t) \quad \text{(per-head orthogonalization)}
\theta^{(h)}_{t+1} = \theta^{(h)}_t - \eta \cdot U^{(h)}_t \quad \text{(per-head update)}

其中上标 (h) 表示第h个注意力头。这样每个头的更新尺度由自身的动量决定,不受其他头的影响。

其他超参数:权重衰减0.1贯穿全训练过程,线性预热(linear warmup)占前1%的训练步数。

11.7 四阶段上下文扩展:从8K到1M的课程

K3的上下文长度从8K一路扩展到1M,分四个阶段进行。这不是简单的渐进式增长,而是一门精心设计的课程(curriculum):

表11.3 四阶段上下文扩展课程
阶段上下文长度训练阶段核心任务
18K预训练前期基础语言能力、知识记忆
264K预训练中期中等长度文档理解
3256K冷却期前期长文档推理、跨段落依赖
41M冷却期后期超长上下文检索、多文档聚合

为什么需要分阶段?因为长上下文训练的显存开销与上下文长度的平方成正比(自注意力的计算复杂度)。如果从第一天就用1M上下文训练,大部分显存会浪费在处理填充(padding)上——因为大部分训练样本远不到1M token。分阶段训练让你在短上下文阶段用高吞吐训练核心能力,只在最后阶段才为长上下文能力付出额外成本。

但分阶段扩展通常有一个头疼的问题:如果使用RoPE(旋转位置编码),扩展上下文需要对位置编码做缩放或插值,这会破坏已经学到的位置模式。K3的NoPE架构在这里发挥了关键作用:因为不使用显式位置编码,上下文扩展时不需要修改任何位置相关的参数,只需要调整注意力掩码和训练数据的长度分布。这使得阶段间的过渡完全平滑,没有任何「重新适应」的成本。

为什么NoPE不需要位置编码修改?
NoPE(No Positional Encoding)不意味着模型没有位置信息——它通过注意力模式本身隐式编码位置关系。在训练中,模型通过数据中的顺序性和因果性自然学到位置敏感性。扩展上下文时,新长度范围内的位置模式只是原有模式的自然延伸,不需要像RoPE那样做频率缩放或位置插值。

11.8 长上下文数据:清洗、上采样与合成

1M上下文的能力不是凭空出现的,它需要对应长度的训练数据来支撑。K3的长上下文数据管线包含三层处理:

  • 去重与质量过滤dedup & quality filtering):原始长文档中存在大量重复内容(模板文字、版权声明重复等)和低质量内容(乱码、截断)。去重使用MinHash+LSH进行模糊去重,质量过滤使用轻量分类器打分后阈值截断。
  • 上采样长文档upsample long docs):自然语料中长文档的比例远低于短文档,如果直接按自然分布训练,模型见到长文档的机会太少。上采样让长文档在训练中出现得更频繁,保证模型有足够的梯度信号来学长上下文能力。
  • 合成多模态长文档:这是最关键的创新。K3通过排列(permuting)和拼接(concatenating)多模态文档来合成需要跨全文1M上下文进行信息检索的任务。例如,将若干篇图文交错的文章拼接成一个1M token的超长文档,然后在文档末尾放置一个需要综合前文多处信息才能回答的问题。这迫使模型学会在整个1M上下文范围内进行信息路由。

这里有一个精妙的设计:排列的随机性确保模型不能依赖固定的文档顺序来定位信息,而必须真正理解内容后进行检索。拼接的多模态性确保模型需要在文本和图像之间跨模态跳转。这种合成方式直接针对了长上下文的核心挑战——不是「能不能处理1M token」(这更多是工程问题),而是「能不能在1M token中精准找到需要的信息」。

实验室 11-1:四阶段上下文扩展模拟器可运行
1
点击运行查看结果
说明:选择不同训练阶段,查看该阶段的上下文长度、对应训练数据分布、注意力计算量和NoPE适配成本。阶段越高,上下文越长,但训练成本也越高。观察NoPE架构在阶段过渡时的零适配成本优势。
L1 直接应用架构参数

K3的路由专家数、激活专家数、共享专家数分别是多少?相比K2各变化了多少倍?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果K3的激活专家数保持8个不变(其他参数不变),你预期激活参数量会变为多少?对训练效率有什么影响?
L2 机制分析Per-Head Muon

全矩阵Muon正交化为什么会让大尺度头支配更新方向?用线性代数的直觉解释,并说明Per-Head方案如何解决这个问题。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果不用Per-Head切分,而是对动量矩阵做行归一化(每行除以自身范数)后再正交化,能否达到类似效果?可能的副作用是什么?
L3 设计思考长上下文数据合成

K3合成1M长上下文数据的方式是「排列+拼接多模态文档,末尾放综合问题」。请分析这种合成策略可能引入的三种偏差(bias),并提出缓解方案。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果不用排列而是按原始顺序拼接,模型可能会学到什么样的捷径?这对真实长上下文场景有什么风险?
能说出K3四域文本加六类视觉的数据版图,解释原生多模态训练与后对齐的核心区别
能复述Rephrasing Recipe三步法,并解释每一步解决什么问题
能画出四阶段上下文扩展课程表,说明NoPE在阶段过渡中的零成本优势

答辩:如果我是审稿人

2.5倍Scaling效率提升的声称非常惊人,但论文只展示了K2和K3的对比曲线,没有控制变量实验来分离每个改进因素的贡献。你如何回应「2.5倍可能主要来自更大的模型规模,而非你声称的架构/训练改进」这一质疑?

参考防守(先自己组织语言再看)

Scaling Law曲线的横轴是FLOPs(计算量),不是参数量。两条曲线比较的是「在相同计算预算下,哪个架构能达到更好的性能」。如果2.5倍提升仅来自规模扩大,那在相同FLOPs下K3和K2应该有相同的表现——但图7显示K3在相同FLOPs下显著优于K2,说明效率提升是真实的。不过,审稿人的质疑有道理:缺乏消融实验确实让归因不够精确。理想的回应是补充关键组件的消融(如移除Rephrasing、切换回WSD、切换回全矩阵Muon),论文在这一点上确实有改进空间。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

第11章拆解了K3预训练的全景策略。数据层面,四域文本加六类视觉构成版图,原生多模态训练从第一天就联合优化,拒绝后对齐的信息损失。质量层面,Rephrasing Recipe通过风格多样提示、逐块自回归生成和保真度校验三步法,让模型从「背」到「懂」。效率层面,Cosine Decay在最优超参下一致胜过WSD,2.5倍Scaling效率跃升来自多项改进的正向叠加。架构层面,K2到K3的跃迁遵循「按需放大」原则,LatentMoE和SiTU-GLU是新增效率组件。优化层面,Per-Head Muon通过按头正交化解决大尺度头支配问题。上下文层面,四阶段课程(8K-64K-256K-1M)配合NoPE的零迁移成本和长上下文数据的三层处理管线(去重、上采样、多模态合成),让1M上下文能力从设计走向现实。

第12章 后训练流水线:从SFT到九合一

论文 4(第12-17页),图8

预训练给模型装上了引擎,后训练才是决定这辆车能跑多远的调校。K3的后训练不是传统的SFT加RLHF三板斧,而是一套九路专家并行训练再蒸馏合一的全新范式——从数据合成到奖励模型,从部分回放到多教师蒸馏,每一个环节都重新定义了「后训练」这个词的边界。

学完这一章你应该能做到

  • 画出K3后训练三阶段(SFT->RL->MOPD)的完整流程图
  • 解释9个RL专家的划分逻辑(3域x3努力层级)及其训练机制
  • 描述Partial Rollouts如何解决样本效率与数据新鲜度的矛盾
  • 说明Agentic GRM的锦标赛式比较协议和冗长惩罚机制
  • 理解MOPD如何将9个专家蒸馏为单一模型,包括逐token OPD奖励的数学形式
  • 解释MXFP4 QAT如何在SFT和RL全程保持训练-推理一致性
  • 概述EAGLE-3推测解码的架构和训练方法
  • 列举七类RL任务合成策略及其验证机制
前置条件:理解RLHF基础(第7-8章)、MoE蒸馏原理(第6章)、量化训练基础(第9章)。

12.1 全景:三阶段范式

K3的后训练流水线分为三个阶段:

  • SFT(监督微调):为复杂智能体任务扩展数据集,使用领域专精模型合成轨迹,引入XTML对话模板,从SFT阶段开始就启用QAT(量化感知训练)。
  • RL(强化学习):训练9个专家模型(3个领域 x 3个努力层级),使用Partial Rollouts和Per-Problem预算控制等新机制。
  • MOPD(多教师在线策略蒸馏):将9个专家的知识蒸馏到单一模型中。

这个三阶段范式和传统后训练的关键区别在于:传统做法是训练一个通用模型,在所有任务上折中平衡;K3的做法是先让9个专家各自做到极致,再用蒸馏将极致能力融合到单一模型中。这是一种「先分治、再统一」的策略,避免了单模型在多任务间的负迁移(negative transfer)。

类比:特种部队与全能战士

传统RLHF像训练一个全能战士——要他同时擅长狙击、爆破、通讯、医疗,结果每样都只会七成。K3的做法像先训练9个特种兵——狙击手只练射击练到极致,爆破手只练爆破练到极致——然后把9个人的经验写成手册,教给一个新兵。这个新兵虽然不是每个领域的顶级专家,但比那个什么都只学了七成的全能战士强得多。类比失效点:特种兵的经验可以通过手册传递,但神经网络的知识只能通过蒸馏损失函数间接传递——蒸馏过程有不可逆的信息损失,不是简单的「复制粘贴」。

类比失效点:人类经验可以精确书写传递,但神经网络蒸馏涉及高维空间的概率匹配,存在不可消除的蒸馏间隙。

12.2 SFT阶段:复杂智能体的数据工程

K3的SFT不是简单的「人工写答案、模型学答案」。它做了三件关键的事:

第一,为复杂智能体任务扩展数据集。传统SFT数据多为单轮问答,但K3的核心场景是长程智能体任务——需要在多轮交互中规划、执行、反思、修正。SFT数据必须覆盖这些长程行为模式。

第二,使用领域专精模型合成轨迹synthesized trajectories)。某些领域(如代码调试、深度研究)的专家演示数据极其稀缺,K3的做法是用已经在该领域达到较高水平的专精模型来生成轨迹,再经过质量过滤后作为SFT数据。这是一种「模型教模型」的自举方式。

第三,从SFT开始就启用QAT。K3使用MXFP4权重和MXFP8激活进行量化感知训练,这意味着模型在SFT阶段就在低精度下优化参数,而不是训完后再量化——消除了训练-推理的精度不匹配。XTML对话模板也在SFT阶段引入,统一了多轮对话的格式标准。

12.3 RL阶段:九路专家的矩阵式训练

RL阶段的核心创新是3x3专家矩阵:3个任务领域 x 3个努力层级 = 9个专家模型。

表12.1 九路RL专家矩阵
Low EffortHigh EffortMax Effort
通用任务快速回答日常问题深度推理和搜索极致可靠的知识工作
通用智能体简单助手任务深度研究/长文写作长程自主助手
代码智能体经验性代码补全SWE/Kernel优化全栈Web开发

三个领域的详细拆解:

  • 通用任务General Tasks):涵盖经验、视觉、推理、忠实性、搜索和知识工作六类子任务。这是最广泛的域,覆盖日常使用场景。
  • 通用智能体General Agents):长程助手、深度研究、写作三类任务。核心挑战是需要多步规划和工具调用,交互链路长,容易累积错误。
  • 代码智能体Coding Agents):SWE(软件工程)、代码经验、Kernel优化、Web开发四类。代码是最可验证的领域,也是RL信号最干净的领域。

三个努力层级的设计动机是:不同的使用场景对延迟和质量的权衡不同。简单问题需要快速回答(Low Effort),复杂推理需要深度思考(High Effort),关键决策需要极致可靠(Max Effort)。通过Per-Problem预算控制(详见12.4节),K3能在训练中让同一个prompt的不同完成走向不同的努力层级,从而在推理时通过温度采样或路由选择合适的努力层级。

12.4 Partial Rollouts与Per-Problem预算控制

RL训练中有一个核心矛盾:样本效率数据新鲜度不可兼得。如果你等所有轨迹都完成再更新模型,样本效率高但数据在等待中变得陈旧;如果你不等就更新,新鲜度高但大量未完成的轨迹被浪费。

Partial Rollouts(部分回放)的解决方案是:为N个prompt采样K个完成(共N*K条轨迹),在训练过程中动态管理这些轨迹——当比例lambda的轨迹完成时,暂停该batch的训练,在下一个迭代中恢复暂停的轨迹。这意味着单条轨迹可以跨越多个训练迭代,不存在「未完成就丢弃」的浪费。

\text{Active trajectories: } N \times K
\text{Pause when: } \frac{\text{completed}}{N \times K} \geq \lambda
\text{Resume paused trajectories at next iteration}

但跨迭代的轨迹引入了新问题:数据陈旧性data staleness)。一条轨迹开始时的模型参数是theta_t,但到它完成时模型已经更新到theta_{t+k},用旧策略生成的数据来更新新策略是有偏的。K3通过逐token正则化来处理:对每个token施加一个重要性权重(importance weight),校正策略偏移带来的分布偏差。

Per-Problem预算控制是另一个精巧的机制。核心思想:不同问题的难度不同,应该分配不同的token预算。预算的确定方式是:先用冷启动模型估算每个问题x的基础预算b0(x),然后在训练中监控实际token消耗T(y)。如果T(y)超过tau * b0(x),强制将奖励设为-1(惩罚),从而阻止模型在难题上无限制地消耗资源。

b_0(x) = \text{token budget estimated from cold-start model}
\text{Override reward to } -1 \text{ if } T(y) > \tau \cdot b_0(x)

tau的调度是一个课程学习过程:先用大的tau(宽松预算),训练high-effort和max-effort专家;再逐渐缩小tau(收紧预算),训练low-effort专家——因为low-effort专家需要在有限预算内给出尽可能好的回答。这种从宽松到严格的预算退火让模型先学会「做到最好」,再学会「在约束下做到最好」。

12.5 Agentic GRM:锦标赛裁判

传统的奖励模型(Reward Model)给每个回答打一个绝对分数,但绝对分数在不同问题之间不可比,而且容易受到长度偏差的影响。K3使用了Agentic GRM(生成式奖励模型),采用锦标赛式二值比较:

Agentic GRM 评审协议

  1. 读取结果Read Outcome):GRM首先读取待比较的两个候选回答以及原始问题。
  2. 生成评分准则Generate Rubric):GRM根据问题类型自主生成评分维度和权重,而不是使用固定模板。这确保不同类型的问题有不同的评审标准。
  3. 逐项打分Score Each Candidate):按照生成的rubric,对每个候选逐维度评分。
  4. 记录评分表Record in Scorepad):将评分结果记录到结构化评分表中,确保可审计和可回溯。

这个「强制协议」的设计是关键——它要求GRM必须走完「读->想->评->记」的完整流程,不能跳步。这类似于要求法官必须写判决书——你不能只给结论不给理由,理由的书写过程本身就是一种正则化,防止GRM走捷径。

此外,Agentic GRM还有基于预算的冗长惩罚Budget-Based Verbosity Control):如果候选回答的token数超过sigma * l0(其中l0是问题的参考长度估计),该候选直接判负。这从根本上解决了奖励模型常见的「长回答得高分」偏差。

\text{Candidate loses if } |y| > \sigma \cdot l_0

12.6 MOPD:九师归一

9个专家训好了,怎么合成一个模型?简单的方法是加权平均,但这丢失了专家之间差异化的知识。K3采用MOPD(多教师在线策略蒸馏),让9个专家同时作为教师,通过在线策略蒸馏将知识注入一个学生模型。

MOPD的核心是逐token OPD奖励

r_{\text{OPD}}(x, y_t) = \text{clip}\left(\text{sg}\left(\log\frac{\pi_{\text{teacher}}(y_t | x)}{\pi_{\text{policy}}(y_t | x)}\right), -R_{\max}, R_{\max}\right)

解读这个公式:对于每个token y_t,计算教师模型和政策模型在该token上的对数概率差,停止梯度(sg,stop gradient)作用于教师一侧确保梯度只更新学生,clip到[-R_max, R_max]防止单个token的蒸馏信号过大导致训练不稳定。

这个逐token的密集奖励可以直接集成到RL框架中——它和任务奖励(来自Agentic GRM)是同一种形式,都是在每个token上提供标量信号。这意味着蒸馏过程不需要额外的训练阶段,而是融合在RL训练中同步进行。9个教师的OPD奖励可以取平均或取最大值,K3选择了取平均——让所有教师的声音都被听到,而不是只听最自信的那一个。

为什么用在线策略蒸馏而非离线蒸馏?
离线蒸馏是「用教师生成数据,让学生学这些数据」,问题是学生只能看到教师分布内的数据,无法从自己的错误中学习。在线策略蒸馏是「让学生自己生成数据,用教师来评判这些数据的优劣」,学生能从自己的探索中学习,修正自己的偏差。形式上,离线蒸馏的梯度信号只有教师分布的KL散度,在线蒸馏还包含了学生策略的梯度——更丰富的信号带来更好的收敛。

12.7 MXFP4 QAT:全程低精度训练

量化感知训练(QAT)在K3中不是训练后加的补丁,而是从SFT第一天就贯穿始终的设计决策。K3的量化方案:

  • MoE专家权重:MXFP4(4-bit浮点,每块共享指数)
  • 激活值:MXFP8(8-bit浮点)
  • 非专家组件(注意力、LayerNorm等):更高精度

这个分层精度策略的直觉是:MoE专家占了绝大部分参数量(2.78T中的约90%),4-bit量化带来的显存和带宽节省最大;而非专家组件参数量小但对精度更敏感(如LayerNorm的缩放参数),保持高精度的额外开销可忽略。

最关键的一点是:rollout(推理)和训练使用完全相同的量化。这消除了传统QAT的「训练-推理不匹配」问题——传统做法是训练用FP32,推理时量化,导致推理时的舍入行为在训练中从未见过。K3让模型在训练中就活在4-bit的世界里,推理时不需要任何适应。

K3的QAT策略是「在哪里推理,就在哪里训练」——训练和推理的数值行为完全一致,不存在量化后的性能退化。这是K3能在4-bit量化下仍保持接近全精度性能的根本原因。

12.8 EAGLE-3推测解码:三层特征喂草案模型

推理加速的另一条路线是Speculative Decoding(推测解码):用一个小模型(草案模型)快速生成多个候选token,再由大模型(目标模型)并行验证。K3使用EAGLE-3作为草案模型。

EAGLE-3的架构基于预训练的MTP(Multi-Token Prediction)层进行微调,目标模型完全冻结。它的独特之处在于输入特征的三层设计:

  • 低层特征:来自第1个AttnRes(注意力残差)块——捕捉浅层模式
  • 中层特征:来自第4个AttnRes块——捕捉中等抽象的模式
  • 高层特征:来自最后一个AttnRes块——捕捉深层语义

这三层特征让草案模型同时看到低级和高级的表征,就像一个助手在写草稿时,既能参考原始素材(低层),也能理解核心论点(高层),还能把握行文节奏(中层)。

训练目标是LK损失——负对数接受率:

\mathcal{L}_K = -\log p(\text{accept}) = -\log \min\left(1, \frac{\pi_{\text{target}}(y_t|x)}{\pi_{\text{draft}}(y_t|x)}\right)

训练时使用7步草案——即草案模型每次生成7个token后由目标模型验证。这个数字是速度和准确率的权衡:步数太少加速比不够,步数太多后期token的接受率下降导致浪费。

12.9 RL任务合成:七类战场

RL训练的效果取决于任务的质量和多样性。K3设计了七类任务合成策略,覆盖从代码到助手到自主执行的完整光谱:

第一类:统一白盒RL环境。智能体的装备带(harness)被设计为可配置模块——工具接口、系统提示、上下文管理、技能、记忆、子智能体。通过不同配置可以实例化多种智能体框架:Kimi Code、Claude Code、Codex、OpenClaw、Hermes。这意味着RL训练不再依赖单一环境,而是在多种智能体框架下都能获得经验。

第二类:知识图谱引导的任务合成Self-evolving hierarchical knowledge graph(自进化层级知识图谱)是任务合成的导航器。智能体通过网络探索扩展知识图谱,然后在不同粒度上采样节点来指导材料检索和任务生成。这确保了任务的覆盖面和难度梯度——知识图谱的层级结构自然提供了从易到难的任务路径。

第三类:可验证问题。多步信息检索、专业工作(投行分析、数据分析、法律)、多步视觉推理(配合Python沙箱验证)——这些任务有客观正确的答案,RL信号零噪声。

第四类:Kernel优化任务。这是最硬核的代码任务:CUDA/Triton/CuTeDSL/Gluon/ThunderKittens/TileLang六种框架,BF16/FP8/FP4三种精度。奖励 = 正确性 + 相对专家实现的性能比。还专门设计了黑入检测系统(hacking detection),防止模型通过作弊(如硬编码输出、绕过计算)来获取高奖励。

第五类:个人助手任务。模拟Gmail/Notion/Slack/Canvas环境,构建持久化演化的环境——环境跨越多个模拟天数持续变化,单个任务可能涉及数千次工具调用和数百万上下文token。这测试的是智能体的持久性和长期记忆能力。

第六类:自主执行任务AET,Autonomous Execution Tasks)。最接近AGI测试的任务类型:智能体只看到目标、约束和验证函数,没有参考轨迹。黑盒系统复制、量化因子发现、税务审计——模型必须自己探索解法。验证在回路中(verify-in-the-loop):每一步都可以运行验证来检查进度,但不给任何关于如何达到目标的提示。

第七类:Web开发任务。专家策划的题目集,容器化沙箱执行,多样化脚手架,确定性检查加模型评判的双重验证,构建失败直接零分。

为什么要设计这么多类任务?
单一类型的RL任务会让模型在该类型上过拟合。例如,只做可验证数学题的模型会变得过于保守(不敢尝试没有把握的推理),只做开放性写作的模型会变得过于发散(推理逻辑不严谨)。七类任务从「完全可验证」到「完全开放」覆盖了整个光谱,让模型在不同风格间找到平衡。
实验室 12-1:九路专家蒸馏模拟器可运行
1
1
点击运行查看结果
说明:选择不同的任务域(1=通用任务,2=通用智能体,3=代码智能体)和努力层级(1=Low,2=High,3=Max),观察MOPD蒸馏过程中OPD奖励的分布、预算控制的阈值变化和GRM评分的差异。不同组合代表九路专家中的一路,每路专家的蒸馏动态各有特点。
L1 直接应用九路专家矩阵

K3的RL阶段训练了9个专家模型。列出3x3矩阵中每个单元格对应的领域和努力层级组合,并用一句话描述每个组合的训练目标。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果只训练3个专家(每个领域1个High Effort专家)而非9个,蒸馏到单一模型后你预期性能会差多少?分析哪些能力最可能受影响。
L2 机制分析Partial Rollouts

Partial Rollouts让单条轨迹可以跨越多个训练迭代。解释逐token正则化如何校正策略偏移带来的分布偏差,并与传统PPO中裁剪目标函数的机制做对比。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果Partial Rollouts的lambda值设得非常小(如0.05),训练动态会发生什么变化?极端情况下lambda趋近于0时等同于什么训练方式?
L3 设计思考MOPD蒸馏

MOPD使用9个教师的OPD奖励取平均作为蒸馏信号。请分析取平均相比取最大值的优劣,并提出一种可能优于两者的替代方案。考虑:不同教师在不同token上的可信度不同,某些教师可能是该领域的专家但不是该token的专家。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果某个教师模型在特定领域的表现远优于其他8个教师,取平均的蒸馏信号会稀释该教师的强信号。在不引入额外计算(如动态权重)的前提下,有什么简单方法能缓解这种稀释?
能画出SFT->RL(9专家)->MOPD三阶段流程图,标注每阶段的关键创新
能解释Partial Rollouts如何平衡样本效率与数据新鲜度,以及Per-Problem预算控制的tau退火课程
能写出MOPD的逐token OPD奖励公式,解释clip和sg的作用

答辩:如果我是审稿人

9个专家模型的RL训练成本是单模型的9倍,再算上MOPD蒸馏的额外训练。你声称蒸馏后的单一模型比直接训练一个通用模型好,但你没有给出训练总FLOPs的对比——也许用9倍的算力直接训一个更大的通用模型效果更好?

参考防守(先自己组织语言再看)

这是一个公平的质疑。9路专家的并行训练确实是9倍RL计算成本,但要注意几点:(1) 9个专家是并行训练的,总墙钟时间与训练1个专家相近;(2) MOPD蒸馏的额外计算远小于RL训练(蒸馏只需要前向传播来获取教师logits);(3) 最关键的是,9路专家各自优化的搜索空间远小于一个通用模型的搜索空间——分治降低了每个子问题的难度,每个专家能收敛到更好的解。但如果审稿人追问「9倍RL FLOPs vs 1倍RL FLOPs加上更大模型」,论文确实应该补充这个消融实验来证明分治+蒸馏的效率优势不是来自9倍算力堆叠。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

第12章完整拆解了K3的后训练流水线。三阶段范式(SFT->RL->MOPD)的核心思想是「先分治、再统一」——9路专家各自做到极致,再通过蒸馏合一。SFT阶段用领域专精模型合成轨迹并全程启用QAT,消除了训练-推理精度不匹配。RL阶段的3x3专家矩阵覆盖通用任务、通用智能体、代码智能体三个领域和Low/High/Max三个努力层级。Partial Rollouts和Per-Problem预算控制解决了样本效率与数据新鲜度的核心矛盾。Agentic GRM的锦标赛式二值比较和强制评审协议消除了绝对分数的长度偏差。MOPD通过逐token OPD奖励将9个教师的知识密集注入单一模型。MXFP4 QAT从SFT贯穿到RL,训练即推理。EAGLE-3用三层特征喂草案模型实现推测解码加速。七类RL任务合成从可验证问题到自主执行任务覆盖完整能力光谱。

第13章 基础设施:让3T参数跑起来

论文第5节(第17-25页),图11-12

训练一个3万亿参数的混合专家模型,不是「堆GPU」三个字能概括的。从注意力机制的定制内核到百万级沙箱的并发调度,K3的基础设施是一套工程与算法深度耦合的系统——每一层优化都不是锦上添花,而是「不做就跑不起来」的硬约束。

学完这一章你应该能做到

  • 解释KDA注意力在系统层面的三重挑战:内核效率、跨设备并行、投机解码回退
  • 阐述MoonEP的冗余专家均衡证明及其在线规划机制
  • 对比统一激活管理器的三种存储策略(重计算、量化、卸载)的适用场景
  • 画出KDA前缀缓存的两级查找流程(物理块 vs 哈希端点)
  • 说明百万级Agent RL训练中的KV缓存池与沙箱调度方案
需要掌握第4-6章的KDA机制、第8-9章的MoE与Block AttnRes、第12章的MLA压缩基础。

13.1 三道系统难题

K3的架构选择带来了三道独特的系统工程难题,它们环环相扣,缺一不可:

表13-1 K3的三大系统挑战
挑战根源后果
混合KDA注意力状态递推依赖+稀疏投影标准FlashAttention内核无法直接使用
3T级稀疏多模态训练MoE负载不均+多模态计算量差异大专家并行需要均衡保证,流水线气泡浪费算力
百万token智能体负载RL训练需要海量沙箱+超长上下文GPU显存放不下全部KV缓存,沙箱调度影响吞吐

这三道难题不是独立的——KDA的递推状态需要特殊的上下文并行策略,而MoE的均衡又受KDA注意力模式的影响。K3的解决方案是算法-系统协同设计:不是先定算法再做系统,而是两者同步迭代,让每一层设计都为对方留出优化空间。

为什么不能直接用标准FlashAttention?

FlashAttention的核心技巧是分块计算:把QKV切成小块,每块算完立即写回输出,不让中间的S矩阵占满显存。但KDA的递推状态 S 是跨块依赖的——第 i 块的输出依赖于第 i-1 块算完的状态。标准FlashAttention的「算完即丢」策略在这里失效,必须重新设计分块方式。

13.2 FlashKDA:为递推注意力定制的内核

FlashKDA是K3为KDA注意力写的专用CUDA内核,基于CUTLASS框架实现。它的核心创新是分块递推+流水重叠

FlashKDA分块递推推导

  1. 将输入序列切为固定大小的块(chunk),每块包含若干token
  2. 对每个块内部(intra-chunk),按标准FlashAttention方式计算:块内的QKV交互不依赖外部状态,可以完全并行
  3. 块间(cross-chunk)状态传播:第 i 块开始时,需要第 i-1 块输出的递推状态 Si-1
  4. 关键洞察:intra-chunk计算和cross-chunk状态传播可以流水线重叠——当第 i 块在做块内计算时,第 i-1 块的状态可以并行传播到第 i 块的SM上

实测中,FlashKDA比Triton参考实现快出显著幅度。原因不仅是CUTLASS的底层优化,更在于流水重叠消除了状态传播的等待时间——在标准实现中,每个块必须等前一块状态就绪才能开始,形成串行瓶颈;FlashKDA通过精心安排SM调度,让计算和数据传输同时进行。

FlashKDA是CUTLASS分块内核,核心创新是块内计算与块间状态传播的流水线重叠,消除了递推注意力的串行瓶颈。

13.3 设备内与跨设备上下文并行

K3面对的超长序列(百万token级别)远超单卡显存容量,必须做上下文并行(Context Parallelism, CP)。但KDA的递推状态让标准CP方案失效——你不能简单地把序列切成N段分给N张卡,因为每段的初始状态取决于前面所有段。

13.3.1 设备内CP:单卡多SM并行

设备内CP的思路是:在单个rank的多个SM之间分配序列段。每段独立评估段内转移,然后合并以恢复初始状态。关键优势是零跨设备通信——所有段都在同一张GPU上,状态传递通过片上共享内存完成。

类比:接力赛的「时间回溯」

想象一场接力赛,4个选手各跑一段,但每个选手不知道前一位选手的配速。设备内CP的做法是:让4人同时出发,各自以自己的配速跑完,然后根据终点时间反推每个人的起始状态——就像「时间回溯」一样还原出完整的状态链条。

类比局限:接力赛中选手可以事后补跑,但GPU上状态合并必须精确对应到原始token位置,不能有任何时间错位。

13.3.2 KDA上下文并行(KCP)

跨设备的KCP更复杂。K3的核心观察是:KDA递推效应可以分解为两个分量——

Mi = Mi-1 · Ti ,Ŝi = locali + Mi · init

其中 Mi 是累积转移矩阵,i 是局部状态估计。这种分解使得跨设备的通信变成了前缀扫描(prefix scan)+ all-gather操作:

  1. 每个rank计算本段的 Tilocali
  2. 通过前缀扫描聚合所有rank的 Mi
  3. All-gather广播结果,每个rank恢复完整状态
为什么前缀扫描能解决递推依赖?

递推依赖的本质是:第 i 段的状态 = f(第1段) ⊕ f(第2段) ⊕ ... ⊕ f(第i段)。前缀扫描恰好就是计算这种「从左到右依次累积」的操作,而且可以用O(log N)步并行完成。通信量是固定大小的(只传转移矩阵,不传KV),所以扩展性是线性的。

13.4 KDA投机解码的状态难题

投机解码(speculative decoding)是加速推理的常用手段:先用小模型猜多个token,再用大模型并行验证。但KDA的递推状态在这里出了问题——

标准KDA解码是原地更新(in-place update):每生成一个token,就把新状态覆盖到旧状态上。这在自回归解码中没问题,因为token是逐个确认的。但在投机解码中,如果大模型拒绝了小模型的猜测,你必须回滚到猜测之前的状态。原地更新意味着旧状态已经被覆盖了,回滚不可能。

KDA投机解码的解决方案:不缓存状态,而是缓存投影输入——投影输入比状态小得多,需要回滚时用投影输入在片上重建状态。

为什么缓存投影输入比缓存状态更省空间?因为KDA的递推状态 S 的维度是 dmodel × dstate,而投影输入 zproj 的维度只有 dproj(其中 dproj ≪ dmodel)。缓存前者意味着每个token要占用 dmodel × dstate 个浮点数,后者只需 dproj 个——差距可达数十倍。

13.5 MoonEP:完美均衡的专家并行

3T参数的MoE模型必须做专家并行(Expert Parallelism, EP),但MoE的天生问题是不均衡——不同token可能涌向不同的专家,导致某些GPU过载而另一些空闲。K3的解决方案是MoonEP,核心思想是引入冗余专家来实现完美均衡。

MoonEP均衡性证明(简化版)

  1. E 为专家总数,R 为rank数,每个rank负责 E/R 个原始专家
  2. Wr 为分配给rank r 的工作量(该rank上所有专家收到的token数之和)
  3. 添加冗余专家:允许热门专家被复制到多个rank
  4. 定理:存在一个均衡分配方案,使得每个rank的冗余专家数不超过 E/R,且所有rank的 Wr 相等
  5. 直觉:把「过剩」的token通过冗余专家分散到空闲rank,因为总工作量守恒,所以均衡方案一定存在

MoonEP的在线规划通过GPU内核实现,实时计算最优冗余分配。还有几项关键优化:

  • 零拷贝通信:冗余专家的参数通过NCCL的零拷贝机制传输,避免额外显存分配
  • 同步无关执行:静态形状(static shapes)使得每层的计算图在编译期确定,无需逐层host同步
  • 负载感知GEMM调度:根据每个rank的实际负载动态调整GEMM内核的调度顺序
类比:餐厅的「共享厨师」

想象一家餐厅有8个档口,每个档口有1位厨师(专家)。某道菜突然爆单,负责它的档口排起长队。MoonEP的做法是:让空闲档口的厨师临时「复制」一份爆单菜谱过来帮忙——这位厨师不需要永久调岗,只需要会做这道菜就行。冗余专家就是这些临时帮忙的厨师。

类比局限:真实厨师不能分身,但GPU上的冗余专家是参数拷贝,占用额外显存。冗余越多,显存开销越大,所以上界的 E/R 很关键——它保证了冗余不会无限膨胀。

13.6 统一激活管理器与显存优化

3T参数模型的训练瓶颈往往不是计算,而是显存。K3设计了统一激活管理器(Unified Activation Manager),提供三种可插拔的存储策略:

表13-2 三种激活存储策略对比
策略原理优势代价
重计算(Recompute)前向时不存激活,反向时重新算零额外显存额外计算量(约1.5倍前向)
量化(Quantization)将激活从FP32/BF16压缩到更低精度显存减少4-8倍精度损失,需要校准
卸载(Offload)将激活暂存到CPU DRAMGPU显存释放最多CPU-GPU传输延迟

管理器根据每层的特性自动选择策略:计算密集层适合重计算,通信密集层适合卸载,精度敏感层用量化。此外还有几项MoE特有的显存优化:

  • MoE反向梯度改写:标准MoE的反向传播需要保存专家路由的中间结果来计算梯度,K3改写了梯度公式,消除了这个依赖
  • Block AttnRes检查点:用检查点包装替代逐块存储,增量块传输减少峰值显存
  • PipelineZeRO-2:将梯度分片卸载到CPU,释放GPU显存给激活
  • P2P Muon正交化:优化器状态通过点对点通信完成正交化,避免全局同步
为什么MoE反向传播需要改写梯度?

标准MoE前向:token路由到专家 → 专家计算 → 合并输出。反向时需要知道「每个token被路由到了哪些专家」来分配梯度。但路由决策本身(Router的输出)是浮点张量,存下来占显存。K3的改写方案是:利用路由的稀疏性(每个token只去1-2个专家),把路由矩阵表示为稀疏索引而非稠密张量,反向时通过索引重构路由,无需保存原始路由输出。

13.7 多模态编码器的动态上下文并行

图像和视频的token数量差异极大——一张低分辨率图片可能只有几百token,而一段高帧率视频可能产生数十万token。K3为多模态编码器设计了动态上下文并行(Dynamic CP):根据输入的实际token数量动态调整CP的度数。

另一个精妙的优化是在流水线气泡中做ViT计算。流水线并行(PP)天然会产生气泡——在等待其他rank完成时,GPU空闲。K3让前几个微批次(micro-batch)的ViT前向在气泡中同步执行,剩余微批次则插入到PP气泡里异步执行。这样ViT的计算几乎「免费」,不增加额外时间步。

13.8 百万级Agent RL基础设施

K3的RL训练需要同时管理数千个沙箱环境,每个环境执行一个agent任务,上下文长度可达百万token。这带来了两个核心问题:显存不够放KV缓存、沙箱调度影响吞吐。

13.8.1 外部KV缓存池

K3采用写回式(write-back)KV缓存池:活跃的KV块留在GPU上,空闲的前缀块卸载到CPU DRAM。KDA的递推状态与MLA的KV块一起被卸载——因为KDA状态是压缩过的(维度远小于原始KV),额外开销很小。

类比:图书馆的「热门书架」

想象图书馆有一个热门书架(GPU显存)和一个大库房(CPU DRAM)。经常被借阅的书放在热门书架上,取书不用等;很久没人借的书移入库房,需要时再取。写回式KV缓存池的工作方式完全一样:活跃的KV块在GPU上,空闲的移到CPU,需要时再取回来。

类比局限:图书馆取书是手动过程,KV缓存的取回是自动的,且有预取机制——系统会预测哪些块即将被用到,提前加载到GPU。

13.8.2 沙箱调度与资源复用

K3的沙箱基于Firecracker微虚拟机,支持暂停/恢复/快照/分支,启动时间亚秒级,内存超配6.5倍。整个训练过程共创建了5100万个沙箱,横跨150万次镜像。

调度层面的关键设计:

  • Rollout自动节流:根据运行时信号(GPU利用率、内存压力、网络带宽)动态调整并发rollout数量,避免资源争用导致整体吞吐下降
  • 梯度缓冲区复用:参考模型的权重由策略模型的FP32梯度缓冲区背书,避免额外显存分配
K3的Agent RL基础设施:5100万沙箱 + 150万次镜像,基于Firecracker微虚拟机,支持暂停/恢复/快照/分支,内存超配6.5倍,启动亚秒级。

13.9 KDA前缀缓存与高效内核

推理服务中,长上下文的KV缓存复用是提升吞吐的关键。K3设计了KDA感知的前缀缓存,统一了KDA状态和MLA KV缓存的页面布局。

核心创新是哈希块与物理块解耦

  • 哈希块:512个token为一个哈希单元,用于快速匹配
  • 物理块:6144个token为一个物理存储单元

两级查找流程:

  1. MLA路径:先匹配物理块(6144-token粒度),再在块内匹配哈希端点(512-token粒度)
  2. KDA路径:必须在哈希端点处有检查点(checkpoint),因为KDA状态的恢复点只存在于稀疏的端点位置

这种设计的优势是:KDA的缓存命中可以发生在任意512-token边界上,而不是被强制对齐到6144-token的物理块边界。一个百万token的请求,可能90%的前缀都在缓存中,只需要从某个512-token边界开始重新计算。

哈希块 = 512 tokens(细粒度匹配),物理块 = 6144 tokens(粗粒度存储),KDA检查点在哈希端点处

13.10 高性能内核集锦

K3的推理优化还包括一系列定制内核:

  • KDA解码内核:投影输入缓存 + 单次融合内核,一次调用完成投影、状态更新、注意力计算
  • Block AttnRes内核:预填充阶段用序列并行(SP),解码阶段用侧流(side stream)并行
  • Stable Latent MoE内核:融合下投影与路由、多记忆存储、WarpDecode小批量优化

13.11 缓存感知的舰队调度

K3的推理集群使用缓存感知亲和调度(Cache-Aware Affinity Scheduling):通过一致性哈希将请求路由到最可能持有其前缀缓存的节点。每个请求有一主一备两个候选节点,主节点优先调度。此外,还有基于预算的准入控制(Budget-Based Admission Control),为不同请求类别分配独立的资源预算,防止长上下文请求挤占短请求的资源。

实验室 13-1:KDA前缀缓存命中率模拟可运行
512
6144
点击运行查看结果
说明:调整哈希块和物理块大小,观察在不同上下文长度下KDA前缀缓存的命中率变化。哈希块越小,缓存匹配越精细但管理开销越大;物理块越大,存储效率越高但内部碎片越严重。K3选择512:6144=1:12的比例是经过大量实验验证的平衡点。
L1 直接应用FlashKDA内核

FlashKDA相比标准FlashAttention的核心改进是什么?用一句话概括其流水重叠机制。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果把块间状态传播改为异步执行,可能出现什么一致性问题?
L2 概念推演MoonEP均衡性

MoonEP证明了「至多E/R个冗余专家」的均衡方案存在。请解释这个上界的直觉含义——为什么是E/R而不是更小的数?如果token分布完全均匀,冗余专家数是多少?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果某个专家吸引了50%的token,MoonEP如何分配冗余?此时需要多少冗余副本?
L3 系统设计KDA前缀缓存

K3的KDA前缀缓存将哈希块(512 tokens)和物理块(6144 tokens)解耦。请分析:如果反过来,让物理块更小(比如512 tokens),会有什么性能影响?从缓存命中率、管理开销、显存碎片三个维度讨论。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果KDA检查点不是在哈希端点处,而是每隔固定token数放置,缓存系统需要怎样修改?
能解释FlashKDA的流水重叠机制,说明它为何优于标准Triton参考实现
能画出KCP的前缀扫描流程,指出通信量为固定大小的关键原因
能说明KDA投机解码为何缓存投影输入而非状态,并估算空间节省比

答辩:如果我是审稿人

MoonEP声称「完美均衡」,但冗余专家的参数拷贝会占用额外显存。在3T参数规模下,冗余专家的显存开销到底有多大?这是否与「显存是训练瓶颈」的观察相矛盾?

参考防守(先自己组织语言再看)

冗余专家的显存开销是可控的:上界证明保证每个rank至多增加E/R个冗余专家,即显存增加不超过原始EP的1倍。而且冗余专家的参数只在需要时加载(零拷贝通信),不需要常驻显存。更重要的是,不均衡的代价远大于冗余的开销——一个过载rank会拖慢整个流水线,浪费的GPU时间比冗余参数的显存宝贵得多。因此这不是矛盾,而是用少量显存换大量计算效率的合理权衡。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

K3的基础设施是算法与系统深度协同的产物。FlashKDA为递推注意力定制了流水重叠的CUDA内核,消除串行瓶颈;设备内CP利用SM并行实现零通信状态合并,KCP用前缀扫描把跨设备通信变成固定大小的线性操作;投机解码通过缓存投影输入而非状态实现高效回滚。训练侧,MoonEP以冗余专家实现完美均衡的EP,统一激活管理器在重计算/量化/卸载之间灵活切换,PipelineZeRO-2和P2P Muon进一步释放显存。推理侧,KDA前缀缓存的哈希-物理块解耦设计让百万token请求的缓存命中可达512-token粒度,缓存感知调度保证亲和性。Agent RL的5100万沙箱、写回式KV缓存池和自动节流调度,则让百万级上下文的RL训练从理论变为现实。整套系统的设计哲学是:每一个组件都不是孤立的优化,而是为上下游留出接口的协同设计。

第14章 评估与案例:K3到底有多强

论文第6-7节(第25-34页),图13-15

数字会说话,但需要正确的听众。K3的评估不只是一堆benchmark分数——它揭示了一个更深层的故事:一个开放模型如何在推理、编程、智能体、视觉等多个维度上逼近甚至超越最先进的闭源模型,同时以远低于后者的成本运行。而七个案例研究则展示了这些数字背后的真实能力——从GPU内核优化到芯片设计到天体物理研究,K3证明了3T参数的稀疏架构不是纸上谈兵。

学完这一章你应该能做到

  • 对比K3与Claude Fable 5、GPT-5.6 Sol在五大能力维度的表现差异
  • 解释K3在网络安全评估中的双层级结果及其安全含义
  • 计算K3相对竞品的成本效率比,说明「1/3成本匹配Opus 4.8」的来源
  • 从七个案例中归纳出K3擅长解决的「杀手级场景」特征
  • 评估K3作为首个登顶WebDevArena的开放模型的意义
需要了解前几章的K3架构设计(KDA、MoE、MLA、Block AttnRes),以及第13章的基础设施细节。

14.1 主评估结果总览

K3在论文表2中报告了五大维度的综合评估,对标五个竞品模型:Claude Fable 5、GPT-5.6 Sol、Claude Opus 4.8、GPT-5.5、GLM-5.2。核心结论:

K3整体表现紧随Claude Fable 5和GPT-5.6 Sol之后,持续超越Claude Opus 4.8、GPT-5.5和GLM-5.2。它是一个开放权重模型,达到了闭源顶级模型的90-95%水平。

但这只是表面数字。深入每个维度,故事更加微妙:

表14-1 K3五维评估关键指标
维度最强项与天花板差距超越Opus 4.8?
推理GPQA Diamond 93.5%HLE-Full 43.5%(研究级有差距)
编程ProgramBench 77.8%(最佳)SWE-Marathon差7分达CF5
智能体BrowseComp 91.2%(最佳)GDPval-AA Elo差约50分达G5.6S
视觉OmniDocBench 91.1%(最佳)WorldVQA仅51%部分
综合多维度稳定CritPt 23.4%落后领先者

14.2 推理能力:硬核推理的差距

在GPQA Diamond上,K3拿到93.5%,这是一个令人印象深刻的数字——它是研究生级别的专家问答,涵盖物理、化学、生物等领域。但真正的硬核测试是HLE-Full(Humanity's Last Exam),这个benchmark专门收集了研究前沿的难题,连人类专家的正确率都不高。

GPQA Diamond: 93.5%  |  HLE-Full: 43.5%(无工具)/ 56.0%(有工具)  |  CritPt: 23.4%

关键观察:K3在HLE-Full上给工具后提升了12.5个百分点(43.5% → 56.0%),说明它的推理瓶颈部分在于「没有合适的工具」而非「逻辑能力不足」。但CritPt只有23.4%,距离领先者差距较大——CritPt专门测量模型对「关键转折点」的识别能力,即在一长串推理中准确找到决策分叉点。这暗示K3在需要深度反思和自我纠错的推理链中还有提升空间。

为什么给工具后HLE提升了12.5个百分点?

HLE中的许多问题需要数值计算、代码执行或文献检索。没有工具时,模型必须纯靠「脑内计算」,这对涉及精确数值的问题是不利的。给工具后,模型可以调用Python计算器、搜索引擎等,把不擅长的精确计算外包给工具,专注于推理规划。这也说明了K3的工具使用能力很强——它不是一个只会「闭门造车」的推理器。

14.3 编程能力:实战代码的胜利

编程是K3表现最抢眼的维度之一,多项指标达到或接近最佳:

  • ProgramBench 77.8%:所有模型中最高,这是综合性编程benchmark
  • SWE-Marathon 42.0%:比Claude Fable 5高出7个百分点,这是长时间跨度的真实软件工程任务
  • Terminal-Bench 88.3%:几乎追平GPT-5.6 Sol的88.8%,测试终端命令行操作能力
  • DeepSWE 67.5%:深度软件工程理解
  • FrontierSWE 81.2%:第二,仅次于Claude Fable 5的86.6%

值得特别关注的是SWE-Marathon。这个benchmark的任务不是写几行代码,而是需要模型理解整个代码库的架构、定位跨文件的bug、设计并实施修复方案——每个任务可能涉及数十个文件的修改。K3在此领先CF5达7个百分点,说明它在长时间跨度的代码理解上具有独特优势,很可能得益于KDA带来的超长上下文处理能力。

类比:编程考试的不同类型

ProgramBench像是「课堂小测」——每个题目独立,考查单点知识。SWE-Marathon像是「毕业设计」——需要理解整个项目结构,在数十个文件中定位和修改问题。K3在课堂小测和毕业设计上都表现出色,说明它的编程能力不是靠模板匹配,而是有深度的代码理解。

类比局限:真实软件工程的复杂度远超任何benchmark。SWE-Marathon的「长时间跨度」仍以小时计,而真实的软件维护以月甚至年计。

14.4 智能体能力:开放式任务的统治力

智能体(Agentic)评估是K3最突出的维度,多项指标达到最佳:

  • BrowseComp 91.2%:所有模型中最高,测试浏览和信息检索能力
  • DeepSearchQA 95.0% F1:深度搜索问答
  • MCPMark 94.5%:工具调用规范
  • Swarm Bench 76.3%:多智能体协作

但GDPval-AA Elo 1686排名第三,AA-Briefcase 1548排名第二——在需要高度自主决策的开放式任务中,K3略逊于GPT-5.6 Sol和Claude Fable 5。这暗示K3在「需要在多种策略间做判断」的场景中仍有差距,可能与CritPt的低分同源——两者都涉及「决策转折点的识别」。

14.5 视觉能力:文档理解强,世界理解弱

K3的视觉能力呈现出有趣的分裂:

  • OmniDocBench 91.1%:最佳,文档图像理解能力顶级
  • Math-Vision 94.3%/97.8%(+Python):强,给工具后进一步提升
  • ZeroBench 23.0%/41.0%:与Claude Fable 5并列
  • WorldVQA 51.0%:第二名,但绝对分不高
为什么OmniDocBench高而WorldVQA低?

OmniDocBench测试的是文档图像(表格、图表、公式)的理解,这本质上是一种「结构化信息提取」——文档有固定的排版规则,模型学会了这些规则就能高效解读。WorldVQA测试的是对真实世界照片的常识推理(「图中的水会往哪流?」「这个人大概在做什么?」),这需要物理常识和社会理解,不是简单的模式匹配。K3在文档理解上强,说明它的视觉编码器在结构化信息提取上训练充分;在常识推理上弱,说明它的世界知识编码还有欠缺。

14.6 内部评估与第三方验证

论文报告了KCB 2.0(Kimi内部代码benchmark)和第三方评测的结果:

表14-2 内部评估关键数据
指标K3Claude Fable 5含义
KCB 2.0 (Claude Code)73.776.9差3.2分,但接近
编程体验59.959.8微弱领先!
Swarm Bench76.3最佳
DeepResearchBench90.0最佳
WebDev Arena偏好+31.0 over Opus 4.83D/WebGL +59.1%

第三方验证更具说服力:

  • Artificial Analysis:Intelligence Index v4.1 = 57.1,排名4/580(如果把GPT-5.6 Sol的变体算作一个,则排第3)
  • ValsAI:Vals Index 74.7%,排名2/39
  • WebDevArena:Elo 1678,排名1/99——首个登顶的开放模型
  • TextArena:Elo 1486,排名8/200
  • AgentArena:9.1分,排名4/37
K3是首个在WebDevArena上登顶的开放权重模型,Elo 1678,排名1/99。这意味着在真实用户的盲评中,K3生成的网页质量超越了所有其他开放模型和大部分闭源模型。

14.7 网络安全:双层级评估

K3的安全评估采用了双层级设计:

Tier 1 - 漏洞发现:K3发现的漏洞约70%被确认是真实的,其中16个是此前未知的漏洞,横跨6个项目。最惊人的发现包括Linux内核的堆越界写入和RDMA中类似Dirty-COW的漏洞——这些都是高质量的安全研究成果。

Tier 2 - 漏洞利用开发:K3完成了36个任务中的14个(38.9%),而GLM-5.2只完成了8个(22.2%)。14个成功利用中,10个来自用户态。UK AISI和NIST的联合评估中,K3在ExploitBench上得分32%,GLM-5.2得分24%。

为什么安全能力值得关注?

安全能力是「双刃剑」:发现漏洞有助于防御,开发利用则可能被滥用。K3的38.9%利用成功率意味着它确实具备了一定水平的攻击能力——这解释了为什么论文要专门报告AISI和NIST的评估。从安全角度看,关键不在于「能不能」,而在于「如何控制」。K3的开放权重意味着任何人都可以部署它,安全防护必须靠部署层的guardrail而非模型本身的能力限制。

14.8 成本效率:性价比的杀手锏

如果说K3的性能是「准一流」,那么它的成本效率就是「超一流」:

表14-3 K3成本效率对比
维度K3表现K3成本对比
KCB 2.0差4分达CF5CF5的38%2.6x性价比
KCB 2.0匹配Opus 4.8Opus 4.8的~1/33x性价比
BrowseComp91.2%$2.03/任务G5.6S的一半,CF的1/10
GDPval-AAElo差50分达G5.6S成本低13%CF5的2.6x
K3性价比核心:以38%成本达到CF5的96%水平,以1/3成本匹配Opus 4.8,以一半成本超越GPT-5.6 Sol在BrowseComp上的表现

这个成本优势的来源是什么?首先,K3是3T参数的MoE模型,激活参数远小于3T,推理时每token的计算量只有稠密模型的一小部分。其次,MLA压缩和KDA前缀缓存大幅降低了KV缓存的显存占用和通信开销。第三,K3的推理基础设施(缓存感知调度、高效内核)提升了硬件利用率。

类比:性能与成本的「甜点」

想象买车:一辆100万的车跑300km/h,一辆30万的车跑285km/h。后者不是最快的,但每花1万元获得的性能远超前者。K3就是这辆30万的车——95%的速度,30%的价格。对于大多数实际应用,285km/h已经够用了,省下的70万可以买三辆。

类比局限:车的性能是线性的(速度快就是好),但AI模型的性能是多维的——某些场景下5%的差距可能是「能用」和「不能用」的区别,不是简单的性价比取舍。

14.9 案例研究:七个真实的「压测」

论文的第七节展示了七个案例,它们不是精心挑选的demo,而是K3在真实场景中的压力测试。每个案例都展示了K3在长时间、高复杂度任务中的能力。

14.9.1 GPU内核优化

K3被要求优化K3自身的推理内核——这是一个「自己优化自己」的元任务。结果:AttnRes延迟从283.6ms降到114.4ms,降低60%。此外,DSA(动态稀疏注意力)降低55.1%,KDA降低73.6%,MLA利用率超过峰值TFLOPS的一半。这个结果匹配了Claude Fable 5,超越了Opus 4.8和GPT-5.6 Sol。

K3优化自身内核的效果:AttnRes -60%,KDA -73.6%,达到CF5水平。一个模型能优化自身的底层内核,说明它对GPU编程的理解已经深入到架构层面。

14.9.2 MiniTriton编译器

K3从零编写了一个紧凑的类Triton编译器,包含Python前端、MLIR中间层和PTX代码生成。这个编译器的张量核心矩阵乘法达到了cuBLAS约90%的性能,能够端到端训练GPT模型。更有趣的是,它的KDA预填充内核击败了Triton的参考实现——这与第13章FlashKDA的动机一致,说明K3「理解」了KDA的计算模式,能自动生成高效的内核代码。

14.9.3 芯片设计(nano-kpu)

这是最令人惊叹的案例之一:K3自主设计了一款推理芯片原型,遵循K3自身的架构(混合KDA+NoPE-MLA,Block AttnRes块大小2,sigmoid MoE)。整个设计过程在48小时内自主完成,无需人类干预。最终结果:100MHz主频,8700 tokens/s吞吐,1.46M单元,0.277MiB SRAM,INT4 MAC阵列。

为什么芯片设计案例特别重要?

芯片设计是一个需要跨学科知识的极其复杂的任务——前端逻辑设计、物理设计、时序分析、功耗优化,每个环节都需要专业工具和深厚经验。K3能在48小时自主完成,说明它不仅仅是「写代码」,而是能够进行多步骤的工程规划、自我验证和迭代优化。这可能是通向AI自主设计硬件的第一步。

14.9.4 天体物理研究(I-Love-Q)

K3被要求研究中子星的状态方程(EoS),这是核物理的前沿问题。K3在约2小时内完成了:审阅20+篇论文,分析300+个EoS模型,编写3000+行Python代码,生成交互式HTML仪表盘。同样的工作,人类研究者需要1-2周。

I-Love-Q是中子星物理中的三个可观测量(惯量I、潮汐形变Love、四极矩Q)之间的普适关系。K3不仅复现了已知结果,还生成了可交互探索的数据可视化,研究者可以直接在浏览器中调整参数观察EoS对I-Love-Q关系的影响。

14.9.5 AI ASIC研究网站

K3构建了一个覆盖42年AI芯片产业的研究网站。过程:120+轮精炼,87份季度报告,99个PDF(11000+页),2800+次网络搜索,1100+次终端查询。这个案例展示了K3在超长时间跨度任务中的坚持——120轮精炼意味着它不断自我审视和改进,而不是一次性生成就停止。

14.9.6 引力波分析

K3分析了391个GWTC-5目录中的引力波事件,协调20+个并发子智能体,生成了7个可视化图表和2个数据表,综合了10+篇论文的结果。并发子智能体的协调是关键——每个子智能体负责不同类型的分析(参数估计、天体物理推断、统计检验),K3作为总调度确保它们不冲突、不遗漏。

14.9.7 3Blue1Brown风格视频

K3生成了一个关于自身架构的动态图形解说视频:从56个片段中剪辑,运动匹配剪辑(motion-matched cuts),节拍同步(beat sync)。对一位经验丰富的视频编辑者来说,这类作品通常需要1-2天。K3的能力表明,它不仅能处理文本和代码,还能理解和生成时间序列的多媒体内容。

七个案例的关键数据:
GPU内核:AttnRes -60%,KDA -73.6%
MiniTriton:~90% cuBLAS
nano-kpu:48h自主设计,100MHz,8700 tok/s
I-Love-Q:2h vs 1-2周(人)
AI ASIC网站:120+轮,42年产业
引力波:391事件,20+子智能体
视频:56片段,节拍同步

14.10 综合反思:K3的真实位置

回到本章开头的核心问题:K3到底有多强?综合评估和案例,答案可以这样概括:

K3是一个在性能-成本平面上占据了独特位置的模型。它不是最强的——在推理深度和自主决策上,Claude Fable 5和GPT-5.6 Sol仍领先。但它以远低于后者的成本提供了接近的性能,在编程、智能体和文档理解上甚至超越了某些闭源对手。七个案例则证明,这种能力不是benchmark上的数字游戏——K3在真实的研究和工程任务中确实能产出有价值的成果。

更重要的是,K3是开放权重的。这意味着它的能力可以被任何人部署、审计和改进。WebDevArena上的登顶不仅仅是一个排名——它证明了开放模型在用户盲评中可以达到闭源模型的水平,这为整个开源社区提供了一个重要的存在性证明。

实验室 14-1:K3成本效率模拟器可运行
1
点击运行查看结果
说明:拖动滑块选择不同模型,查看在KCB 2.0、BrowseComp、GDPval-AA三个维度上的性能和成本对比。K3在性价比维度上显著优于闭源竞品——以更低的成本提供接近的性能。注意:成本数据为论文报告值,不同部署环境可能有差异。
L1 直接应用主评估结果

K3在五个评估维度中,哪个维度达到了所有模型中的最佳?列出具体的benchmark名称和分数。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:K3在哪个维度表现最弱?分析其可能的技术原因。
L2 概念推演成本效率分析

K3以CF5的38%成本达到了96%的性能(KCB 2.0)。请从K3的架构角度解释这种成本优势的三个技术来源,并说明每个来源贡献的大致比例。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果K3的激活参数比例从当前的稀疏率变为稠密(全参数激活),成本效率会如何变化?
L3 系统设计案例深度分析

nano-kpu案例中,K3自主设计了一款遵循自身架构的推理芯片。请分析:这个案例中K3需要具备哪些跨领域能力?从逻辑设计、物理实现、验证三个环节列举所需的具体知识,并评估K3的自主程度(哪些步骤必须有人类干预?)。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果把nano-kpu案例的约束改为「必须兼容现有GPU生态(CUDA)」,K3的自主设计流程需要增加哪些步骤?
能说出K3在五大维度中各自的最佳指标和与天花板模型的差距
能计算K3相对CF5和Opus 4.8的成本效率比,解释三个技术来源
能从七个案例中归纳K3擅长的「杀手级场景」特征(长上下文+多步骤+自我验证)

答辩:如果我是审稿人

K3在网络安全评估中完成了14/36个漏洞利用开发任务(38.9%)。作为开放权重模型,这种能力的公开发布是否应该受到限制?如果限制,如何在不阻碍防御性安全研究的前提下控制攻击性能力的扩散?

参考防守(先自己组织语言再看)

这是一个没有标准答案的困境。正方观点:开放权重让防御者也能用K3做漏洞扫描,实际上提升了整体安全水平;攻击者已经有了专用工具,K3的38.9%并不比现有攻击工具更高明。反方观点:K3降低了攻击门槛——以前需要资深安全研究员才能开发的漏洞利用,现在一个初学者加K3就能完成;而且随着模型能力提升,这个比例只会上升。可能的折中方案:开源模型权重,但在部署层提供可配置的安全过滤(guardrail),由部署者根据自身场景决定开放哪些能力;同时,对安全研究社区提供不带过滤的访问渠道,但需要身份验证和用途声明。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

K3的评估描绘了一个在性能-成本平面上占据独特位置的模型。推理维度,GPQA Diamond 93.5%亮眼但HLE-Full 43.5%/56.0%和CritPt 23.4%暴露了深度反思的短板。编程维度,SWE-Marathon领先CF5达7个百分点,ProgramBench最佳,实战代码能力突出。智能体维度,BrowseComp 91.2%和DeepSearchQA 95.0% F1登顶,但GDPval-AA的Elo差距暗示自主决策仍需加强。视觉维度,OmniDocBench 91.1%最强但WorldVQA 51.0%偏弱,文档理解远强于常识推理。成本效率是杀手锏:38%成本达CF5的96%水平,1/3成本匹配Opus 4.8。七个案例——从GPU内核优化到芯片设计到天体物理——证明K3的能力在真实场景中能产出有价值成果,特别是需要长上下文、多步骤推理和自我验证的任务。作为首个登顶WebDevArena的开放模型,K3为开源社区提供了重要的存在性证明:开放权重可以追平闭源模型。

已经是最后一章

名词索引 / Glossary

KDAKim Delta AttentionK3的核心注意力机制,基于Delta规则的通道遗忘门递归,O(1)每token复杂度,固定大小KV cache。每3层使用一次。第2章
GatedMLAGated Multi-head Latent Attention门控多头潜在注意力,将KV压缩到低秩latent空间并加sigmoid门控调节输出。每4层中1层使用,提供全局注意力。第4章
Hybrid AttentionHybrid AttentionK3的3:1混合注意力策略:每3层KDA接1层GatedMLA,兼顾局部递归效率和全局注意力能力。全模型93层中约70层KDA、23层GatedMLA。第5章
AttnResAttention Residuals注意力残差机制,将之前层的注意力输出缓存为残差,在后续层中通过跨层连接检索复用,防止深层网络中早期信息被覆写。第6章
Block AttnResBlock Attention Residuals分块注意力残差,将93层残差分为8块,块内独立做注意力检索,将跨层检索复杂度从O(N^2)降为O(N^2/64)。第6章
Delta规则Delta RuleKDA递归更新核心:S_t = S_{t-1}(I - alpha*kk^T) + v*k^T,本质是先减去旧关联再加新关联,通过通道遗忘门控制保留比例。第2章
通道遗忘门Channel-wise Forget GateKDA中d维向量g,每个通道独立衰减率g_i,通过sigmoid(k_i)生成。取值(0,1),控制每个通道对历史信息的保留程度。第2章
下界衰减Lower-bounded DecayKDA中g_min=-5的机制,sigmoid输入下限-5对应最小衰减率约0.7%,确保即使最激进的遗忘也不会完全清零信息。第3章
全秩输出门Full-rank Output GateKDA输出时将低秩latent状态投影回全秩d_model维度,补偿KV cache压缩造成的信息瓶颈,确保输出表达力。第3章
Stable Latent MoEStable Latent Mixture of ExpertsK3的MoE设计:896路由专家+2共享专家,每token激活Top-16。latent维度3584(0.5x压缩),RMSNorm前置+SiTU-GLU+Quantile Balancing实现训练稳定。第7章
SiTU-GLUSigmoid-Tanh Unit Gated Linear UnitK3自研激活函数,输出有界(上界beta1*beta2=100),通过scaled tanh软截断替代SwiGLU的无界输出。beta趋无穷时收敛到SwiGLU。第8章
Quantile BalancingQB / Quantile BalancingK3的MoE负载均衡方法,通过直方图估计余量分布的分位数来调整偏置,无需辅助损失,一步到位精确控制每个专家的负载。第9章
NoPENo Positional Encoding无位置编码。K3全程不使用任何显式位置编码(不用RoPE/ALiBi等),通过注意力模式隐式编码位置,上下文扩展时零迁移成本。第4章
MoonViT-V2MoonViT-V2K3的视觉编码器,27层ViT约0.4B参数,从零训练(random init)与语言模型联合做next-token prediction,不需对比学习预训练。第10章
Per-Head MuonPer-Head Muon OptimizerK3的优化器创新,将QKV动量矩阵按注意力头维度切分,每个头独立做正交化,避免大尺度头支配更新方向。第11章
Rephrasing RecipeRephrasing Recipe预训练数据改写三步法:1.风格多样化提示 2.逐块自回归生成 3.保真度校验。提升数据多样性同时保证语义不变。第11章
原生多模态训练Native Multimodal TrainingK3从预训练第一天就联合视觉和语言做next-token prediction,而非先训练文本再接视觉模块,实验证明对比学习预训练非必要。第10章
Partial RolloutsPartial RolloutsK3 RL训练技术,单条agent轨迹可跨越多个训练迭代,解决样本效率与数据新鲜度的矛盾,不存在未完成轨迹被丢弃的浪费。第12章
MOPDMulti-teacher Online Policy Distillation多教师在线策略蒸馏,K3后训练第三阶段。逐token OPD奖励clip到[-R_max,R_max],将9个RL专家能力蒸馏回统一模型。第12章
Agentic GRMAgentic Generative Reward ModelK3的生成式奖励模型,采用锦标赛式二值比较:读取两个候选回答,自主生成评分准则,逐项打分,选出胜者。用于RL训练的reward信号。第12章
MXFP4 QATMXFP4 Quantization-Aware TrainingK3量化感知训练:MoE专家权重MXFP4(4-bit),激活值MXFP8(8-bit),非专家组件更高精度。训练和推理使用完全相同的量化配置。第12章
EAGLE-3EAGLE-3 Draft ModelK3投机解码的草案模型,使用7步草案:每次生成7个token后由目标模型并行验证,平衡速度和接受率。用LK loss训练。第12章
FlashKDAFlashKDA KernelKDA的Flash Attention实现,基于CUTLASS分块递推,核心创新是块内计算与块间状态传播的流水线重叠,消除KDA递归的串行瓶颈。第13章
MoonEPMoon Expert ParallelismK3的完美均衡专家并行方案,通过冗余专家(将热门专家复制到空闲rank,每个rank冗余数不超过E/R)实现负载均衡,无需辅助损失。第13章
KCPKDA Context ParallelismKDA上下文并行,将递推依赖分解为前缀扫描+all-gather,通信量为固定大小,解决KDA递归的跨设备通信问题。第13章
KV缓存池KV Cache PoolK3推理系统的写回式KV缓存策略:活跃KV块留GPU,空闲前缀块卸载到CPU DRAM,KDA递推状态与MLA KV块一起卸载。第13章
KDA前缀缓存KDA-aware Prefix CacheK3推理优化:哈希块512 tokens(细粒度匹配)与物理块6144 tokens(粗粒度存储)解耦,比例1:12,兼顾匹配精度和存储效率。第13章
哈希块/物理块Hash Block / Physical BlockKDA前缀缓存的两级块设计:哈希块512 tokens用于细粒度前缀匹配,物理块6144 tokens用于粗粒度KV cache存储,二者解耦设计。第13章
Per-problem BudgetPer-problem Budget ControlK3 RL训练中每个问题独立控制计算预算,避免简单问题浪费资源和难题资源不足,提高训练效率。第12章
九路专家9 RL ExpertsK3 RL阶段训练的9个专家模型:3领域(通用任务、通用智能体、代码智能体)x 3努力层级(Low/High/Max)= 9个专家,后通过MOPD蒸馏合并。第12章
Cosine DecayCosine DecayK3选择的学习率调度器,实验表明在各自最优超参下一致优于WSD(Warmup-Stable-Decay)。第11章
Scaling效率Scaling EfficiencyK3相对K2的Scaling效率约提升2.5倍,即相同计算预算下K3能达到K2需要2.5倍算力才能达到的性能。第11章
四阶段上下文扩展Four-stage Context ExtensionK3的上下文从8K渐进扩展到1M的四阶段:8K->64K->256K->1M,每阶段逐步增长,NoPE使阶段间过渡平滑。第11章
RMSNorm前置Pre-norm RMSNormStable Latent MoE在W_up之前插入RMSNorm,稳定latent空间的数值范围,是SiTU-GLU之外的第二道稳定性保障。第7章
共享专家Shared ExpertsK3有2个共享专家,始终全宽(d维)激活不走latent压缩,处理所有token,保持通用知识表达完整性。第7章
Latent维度压缩Latent Dimension CompressionStable Latent MoE在路由投影前将d_model压缩到3584维(0.5x),降低路由和专家计算量,输出时再投影回全宽。第7章
自动限速调度器Auto-throttling SchedulerK3推理系统根据GPU显存压力自动调节并发请求数,显存紧张时排队等待,避免OOM。第13章
AgentENV沙箱AgentENV MicroVM SandboxK3 Agent RL训练基于Firecracker微虚拟机创建5100万个沙箱,横跨150万次镜像,为每个agent任务提供隔离执行环境。第13章
内存高效训练Memory-efficient TrainingK3的内存优化三件套:统一activation manager、内存高效MoE、AttnRes checkpoint,在有限GPU内存下训练2.78T参数模型。第13章
Scaled TanhScaled TanhSiTU-GLU中f(z)=beta*tanh(z/beta)的软截断函数,原点附近等价恒等函数f(z)=z,边界处梯度渐近趋零但非零,比硬截断更可导。第8章

来源 / Sources

论文原文 / Paper (arXiv) 模型权重 / Weights (HuggingFace) 项目主页 / Project
本精读页面由 AI 生成,内容仅供参考,以论文原文为准。
This page is AI-generated for reference only. Always refer to the original paper.