K3 / REPRESENTATIONS · MECHANISMS · TRADE-OFFS

K3 架构图解

从一个 token 的计算,
理解专家、注意力与深度信息的演进。

K3 把几条研究路线组合在一起:KDA 与 MLA 处理历史信息,Stable LatentMoE 让一部分前馈参数按需工作,AttnRes 组织深层网络中的信息传递。理解它们,先要分清位置、专家与层这三个对象。[1] [4]

阅读起点:知道神经网络用矩阵处理数字即可。文中的 token 指分词后的一个符号;它在模型内部对应一条特征向量。公式采用列向量约定,⊙ 表示逐坐标相乘。

token 与序列表示专家与前馈变换同一位置的深度来源投影、归一化与聚合
CHAPTER 00

先看全景:第 1–9 章在架构中的位置

从文本主干到一层,再定位注意力、专家和深度连接。

先沿上方看完整流程,再看下方放大的一层。第 1 章说明层的骨架,第 3 章说明深度连接;第 2、4–6 章展开前馈,第 7–9 章展开序列混合。点击图中的章节标签即可跳转。

FIG 00第 1–9 章的架构定位图查看大图 ↗
把第 1–9 章放回完整架构文本输入经过词嵌入、93个完整层、最终深度读取与归一化、词表投影,得到下一个token的分布。第8章定位KDA与MLA的层间排布。下方放大一个块内MoE层:第1章说明序列混合后接前馈的骨架,第3章在两个子层入口分别组合同一位置的早期块与当前累计。序列混合中,第7章解释MLA缓存与MHA/GQA/MQA对照,第9章解释KDA的顺序线索与后续MLA使用NoPE。前馈中,第2章说明Router选择与合并专家,第6章控制选择偏置,第5章将路由专家放在降维和升维之间,第4章说明专家内部的门控函数。共享支路保持全宽。图为章节定位总览,省略归一化和残差累计的细部连线。 把第 1–9 章放回完整架构 实线:主要计算顺序;虚线:局部放大、读取来源或控制。点击章节标签跳转。 输入 token 序列 词嵌入 转成特征向量 08 · 93 层中的 KDA / MLA 排布 · FIG 21–25 08 93 层中的 KDA / MLA 排布 KDA KDA KDA MLA … MLA 每格是完整层;此处只标序列混合器类型。 最终深度读取 + 归一化 词表投影 下一个 token 的概率 放大其中一个完整层 01 · 一层:先序列混合,再前馈 · FIG 01–03 01 一层:先序列混合,再前馈 以块内的 MoE 层为例;第 1 层的前馈部分使用稠密 FFN。 03 · AttnRes:读取同一位置的不同深度 · FIG 05–06 03 AttnRes:读取同一位置的不同深度 已保存的早期块 + 当前块累计 → 在两个子层入口分别读取,再归一化。 先:序列混合,利用上下文 本层类型由层号确定:KDA 或 MLA。 KDA 固定形状的记忆状态 递推 + 短卷积 按先后顺序更新 MLA 07 · 缓存与压缩 · FIG 19–20 07 缓存与压缩 逐位置联合压缩 K/V MHA / GQA / MQA 作为共享方式的对照 09 · 顺序信息:RoPE 与 NoPE · FIG 26–30 09 顺序信息:RoPE 与 NoPE KDA 的顺序线索随 token 表示传到后续层。 后续 MLA 使用 NoPE Q/K 不显式旋转;因果可见性仍保留。 KDA 状态与 MLA 缓存由各层分别维护。 再 02 · MoE:选择并合并专家 · FIG 04 02 MoE:选择并合并专家 全宽输入 h Router 选 896 个专家中的 16 个 原始分数用于混合权重 06 · 负载均衡 / QB · FIG 14–18 06 负载均衡 / QB 训练时调整选择偏置 b 05 · LatentMoE:低维路由支路 · FIG 11–13 · Animation 01 05 LatentMoE:低维路由支路 降维:全宽 → 半宽 04 · 专家内部的门控 · FIG 07–10 04 专家内部的门控 K3:SiTU-GLU;对照 GLU / SwiGLU 加权合并 → RMSNorm → 升维 共享专家 全宽支路 每个 token 都用 + MoE 子层输出 两个子层分别完成后,新输出加回当前块累计,再进入下一步。 细部连线见第 1、3 章;总图用于定位各章,不展开全部运算。 继续下一层;最后一层转到上方的输出端。
这张总图聚焦文本主干。MHA/GQA/MQA、GLU/SwiGLU 和 RoPE 是对应章节中的对照路线,不代表 K3 同时采用所有方案。层数、路由结构与计算路径依据发布配置和参考实现。[2] [3] [4]

文本输入经过词嵌入、93个完整层、最终深度读取与归一化、词表投影,得到下一个token的分布。第8章定位KDA与MLA的层间排布。下方放大一个块内MoE层:第1章说明序列混合后接前馈的骨架,第3章在两个子层入口分别组合同一位置的早期块与当前累计。序列混合中,第7章解释MLA缓存与MHA/GQA/MQA对照,第9章解释KDA的顺序线索与后续MLA使用NoPE。前馈中,第2章说明Router选择与合并专家,第6章控制选择偏置,第5章将路由专家放在降维和升维之间,第4章说明专家内部的门控函数。共享支路保持全宽。图为章节定位总览,省略归一化和残差累计的细部连线。

CHAPTER 01

一层 Transformer 里发生什么

先看完整模块,再理解层数、子层与深度块的计数。

FIG 01一个 token 的三个信息方向查看大图 ↗
一个 token,从哪三处取信息
历史位置提供上下文;早期深度提供同一位置已经产生的表示;被选中的前馈专家返回特征变换结果。三路影响当前表示,但各自的计算机制、发生位置与先后顺序不同。共享专家在后面的 MoE 结构中展开。[1] [3] [4]

先认清来源,再分清作用:读历史位置、取回早期深度、接受前馈加工。 FIG 01 / 信息来源 一个 token,从哪三处取信息 先认清来源,再分清作用:读历史位置、取回早期深度、接受前馈加工。 表示 专家 深度 计算 同一 token 的更早深度 更早块 b₁ 更早块 b₂ 更早块 b₃ 取回早期表示 AttnRes 历史 token 序列 读历史位置 x₁ x₂ x₃ … xₜ₋₁ 当前 token 表示 xₜ MoE 路由专家 被选中的前馈参数加工它 E1 E2 E3 E4 E5 E6 E7 E8 返回加工结果 专家不参与 token 间的 attention 横向:序列位置 三路影响同一份表示 左边读位置,上边读深度,右边由专家做前馈变换。 三路的作用机制不同;箭头不表示三路在同一时刻简单相加。 依据:Kimi K3 技术报告 §2.1–2.3。专家数量为示意,完整层位置见 FIG 02。

固定一个 token 来看: 左边是历史位置,上边是更早深度,右边是被选中的专家。接下来先把这三路放回一层的计算顺序,再逐步拆开函数、状态、缓存和资源开销。

设一句话有 T 个 token,每个 token 由 d 个数表示,输入就可以排成一张 T×d 的表。每一行对应一个 token,每一列对应一个特征坐标。 每一层接收这张表,更新每一行的特征,输出仍保持 T×d。序列混合子层允许信息沿位置流动;前馈子层逐个位置加工特征。两者再配合归一化与深度信息通路。[6] [3]

FIG 02一层中的序列混合、前馈与深度读取查看大图 ↗
放进一层:先读上下文,再做前馈变换
橙色:组合同一位置的早期块与当前累计。灰色旁路:保留旧累计,与本次输出相加。其他 token 也参与计算,连线省略。此图示意块内流程;跨块时先保存旧块。首层前馈使用 Dense FFN。[2] [3]

FIG 02,一层中的序列混合、前馈与深度读取。示意块内流程。第一次深度读取组合已保存的早期块与当前累计,归一化后进入 KDA 或 MLA;子层输出与旁路保留的旧累计相加。第二次深度读取使用更新后的累计与早期块,归一化后进入 MoE;输出再次与旧累计相加。固定同一 token 位置读取不同深度;其他 token 也参与计算,图中省略其连线。跨块时先保存旧块再开始新累计。首层前馈使用 Dense FFN。

把层内流程与坐标放在一起看:沿着多个矩形移动,改变的是 token 位置;沿着层向下移动,改变的是处理深度;进入一个矩形内部,才是在看它的特征坐标。

FIG 03序列位置、网络深度与特征分量查看大图 ↗
三个维度:序列位置、网络深度、特征分量
多个矩形横向排列,表示多个 token 位置;固定位置向下,表示网络深度的变化;放大一个矩形,里面的小格才是这个 token 的特征分量。小格数量只作示意,实际特征宽度依模型配置决定。[2] [3] [6]

固定一层看横向;固定一个 token 位置看纵向;放大一个矩形再看它内部的数值。 FIG 03 / 三个维度 三个维度:序列位置、网络深度、特征分量 固定一层看横向;固定一个 token 位置看纵向;放大一个矩形再看它内部的数值。 表示 专家 深度 计算 token 序列 位置 1 位置 2 位置 3 位置 t 较浅层 x₁ x₂ x₃ xₜ 中间层 x₁ x₂ x₃ xₜ 更深层 x₁ x₂ x₃ xₜ 当前层 x₁ x₂ x₃ xₜ 网络深度 固定位置 t 放大当前 token 的完整向量 xₜ 内部小格 = 特征分量 它们属于同一个 token。 这里的 8 格只是示意, 小格表示特征分量。 横向换位置,纵向换深度,框内部才是特征维度。 蓝色矩形是一份完整 token 表示;橙色标出同一位置在更早深度的表示。 维度示意:特征格数量不对应 K3 的实际隐藏维数。

X′ = X + Mixer(Norm(X))
X下一层 = X′ + FFN(Norm(X′))
这是普通残差层的教学公式。Mixer 在 K3 中选择 KDA 或 MLA;K3 实际深度输入由 AttnRes 聚合。

“93 层”按完整 Transformer 层计数。在 K3 中,每个完整层都有一个序列混合子层和一个前馈子层。KDA/MLA 决定前半部分的类型,稠密 FFN/MoE 决定后半部分的类型。每个层号下会同时出现这两种信息。[2] [3]

名称它指什么K3 中如何计数
Transformer 层一个序列混合子层 + 一个前馈子层,含相应归一化与深度连接共 93 层
MoE 专家前馈子层内部的一套可训练矩阵每个 MoE 子层有自己的专家集合
AttnRes 深度块把若干完整层的子层输出汇成一个摘要每 12 个完整层一块;末块 9 层
CHAPTER 02

MoE:每个 token 选择少数前馈网络

先理解一个小型八选二模型,再看 896 选 16。

普通前馈网络让所有 token 使用同一套矩阵。混合专家(Mixture of Experts,MoE)准备多套前馈网络,并增加一个路由器 Router。路由器根据当前 token 的表示为每个专家打分,选中少数专家执行计算,最后把它们的输出加权合并。这里讨论的是 token 选择专家的稀疏 MoE。[14] [15]

FIG 04MoE 的容量动机与四步计算查看大图 ↗
MoE:扩大总容量,每个 token 只算一部分
一个 token 依次经历打分、选择、专家变换与加权聚合。示例用 8 个专家选 2 个,E₂、E₇ 的原始分数为 0.9、0.6,归一化后权重为 0.6、0.4。此例选择偏置设为零;共享支路与负载偏置在后文单独展开。[14] [15] [3]

不同 token 可以调用不同的前馈子网络;这就是按输入选择计算的条件计算。 FIG 04 / 条件计算 MoE:扩大总容量,每个 token 只算一部分 不同 token 可以调用不同的前馈子网络;这就是按输入选择计算的条件计算。 表示 专家 深度 计算 总容量要大,单次计算要省 Dense FFN / 稠密前馈 xₜ 本层同一套 FFN 每个 token 都使用这一整套前馈参数 MoE / 稀疏专家前馈 xₜ 选择 扩大专家池,每次只调用其中少数 总参数容量与单次激活量可以分开扩展。 专家分工由训练形成,无需手工命名。 01 打分 xₜ 路由器 1 2 0.9 3 4 5 6 7 0.6 8 8 个专家的示例分数 02 选择 选前 k 个:E2、E7(k = 2) 03 变换 E2 E7 E₂(xₜ) E₇(xₜ) 04 聚合 yₜ = 0.6 E₂(xₜ) + 0.4 E₇(xₜ) 条件计算让总容量更大,同时让单个 token 只调用少数专家。 专家无需预设“数学组”“写作组”;分工和路由一起从训练中形成。 示例为 8 选 2,分数与权重为教学设置;实际 K3 为 896 选 16,并另有共享支路。

sⱼ = scoreⱼ(xₜ) > 0,A = Top-k(s)
pⱼ = sⱼ / Σᵢ∈A sᵢ,yₜ = Σⱼ∈A pⱼ Eⱼ(xₜ)
示例:p₂ = 0.9 / 1.5 = 0.6,p₇ = 0.6 / 1.5 = 0.4
sⱼ 表示非负匹配分数;本例用正分数并省略选择偏置。Router 决定参与的专家,Eⱼ 是第 j 个前馈网络,聚合权重控制输出贡献。共享支路的连接见第五章,负载偏置的更新见第六章。

为什么 MoE 值得单独学

它解决的核心矛盾

模型想要更多参数容量,算力预算却有限。MoE 提供一条折中路:准备很多前馈参数,但让单个 token 只调用其中一小部分。

它真正依赖的前提

输入分布本身具有差异。不同 token 对变换的需求并不完全一样,路由器才能把它们送往不同专家,让专家逐渐出现专门化。

它的现实代价

专家多了,负载均衡、跨设备通信和工程实现会变复杂。MoE 的账,从来不只是一条 FLOPs 公式,还包括路由是否均匀、内核是否高效。

“专家”是训练产生的功能分工。每个 Eⱼ 都有自己的权重,经过路由分到不同的输入,逐渐形成不同的处理偏好。这个名字无需对应“数学专家”“法律专家”等人工标签,单个专家也没有独立的聊天过程。

稀疏计算节省哪部分?

假设每个专家的计算量相近,准备 N 个专家、每次激活 k 个:专家总参数随 N 增加,每个 token 的专家计算主要随 k 增加。训练一批 token 时,不同 token 可以激活不同专家,因此多数专家仍可能在这一批中得到训练。

关注的问题主要取决于什么
模型能容纳多少专家参数全部 N 个专家的权重规模
一个 token 实际经过多少专家计算选中的 k 个专家,另加 Router、共享支路与投影
权重需要多少存储或跨设备部署空间全部专家及部署方式;低激活比例不会自动免除权重存储
实际运行速度矩阵大小、批量、设备通信、负载均衡与内核效率

K3 在每个 MoE 子层配置 896 个路由专家,每个 token 激活 16 个,并保留两个全宽共享专家的等效前馈容量,供每个 token 使用。专家先读哪种宽度的向量、共享支路如何连接,将在 LatentMoE 章节展开。[2] [3]

CHAPTER 03

AttnRes:重新读取较早深度的信息

先理解残差累加,再看按内容选择,以及为什么需要分块。

普通残差连接写作 h下一步 = h + F(h)。F(h) 是当前子层产生的新信息,h 保留之前的信息。连续展开后,深度输入可以写成输入嵌入与各个早期子层输出的总和。这条直接相加的通路有助于训练深层网络,但所有来源逐渐汇入一条状态,后续子层对来源的选择不够直接。[22] [25]

FIG 05普通残差累加与按内容读取深度来源查看大图 ↗
AttnRes:同一位置,怎样取回早期表示
普通残差以固定系数累加已经产生的子层输出。AttnRes 对不同深度来源按内容赋权,读取对象保持同一个 token 位置。图右采用块表示作直观示意;下面先用 uᵢ 统一表示候选来源,再展开完整形式与分块形式的关系。[22] [25] [3]

固定 token 位置 t,只沿网络深度比较:已有信息是直接累计,还是按内容重新加权。 FIG 05 / 深度读取 AttnRes:同一位置,怎样取回早期表示 固定 token 位置 t,只沿网络深度比较:已有信息是直接累计,还是按内容重新加权。 表示 专家 深度 计算 全图固定同一 token 位置 t 普通残差:直接累加 子层输出随输入变化,加法系数为 1 AttnRes:按内容加权 权重随输入内容改变 已有表示 h₀ 累计表示 h₁ 当前表示 h₂ + 子层输出 f₀(h₀) × 1 + 子层输出 f₁(h₁) × 1 深度 更早块 b₀ 更早块 b₁ 当前块累计 b₂ 按内容加权 Σ αᵢ bᵢ 当前子层输入 读取同一位置的块表示 AttnRes 回取同一个 token 的不同深度表示,不读取别的 token。 普通残差的加法系数固定;AttnRes 按内容计算权重。K3 使用块内累计、跨块加权的分块版本。 依据:Attention Residuals、K3 报告 §2.2、官方 _apply_attn_res。

Attention Residuals(AttnRes)让每个子层读取较早深度的输出,并给这些来源分别赋权。它沿深度进行选择。普通序列注意力的候选来源是不同 token,AttnRes 的候选来源是同一 token 在不同深度留下的表示。[22] [25]

eᵢ,ₗ,ₜ = wₗᵀ RMSNorm(uᵢ,ₜ)
aᵢ,ₗ,ₜ = exp(eᵢ,ₗ,ₜ) / Σⱼ exp(eⱼ,ₗ,ₜ)
hₗ,ₜ = Σᵢ aᵢ,ₗ,ₜ uᵢ,ₜ
t 为 token 位置,l 为将要执行的子层,i 枚举可读取的深度来源。wₗ 是该子层学到的查询向量;它随训练更新,a 还随 token 内容变化。
一个数值读法:候选来源为 u₀、u₁、u₂ 时,普通累加给出 h=u₀+u₁+u₂;若某次 AttnRes 读取的权重为 0.2、0.6、0.2,则 h=0.2u₀+0.6u₁+0.2u₂。这里的权重是教学值,实际权重由模型参数与当前来源内容计算。

注意权重的产生方式:同一个子层可以对不同 token 给出不同的深度权重,因为 uᵢ,ₜ 不同。RMSNorm 用于计算匹配分数,减弱大幅度来源对分数的支配;加权合并时使用对应的原始来源向量。[25]

为什么把若干层汇成一个块?

逐一保存所有早期子层输出,会增加激活存储与跨设备传递的负担。Block AttnRes 将一段深度内的子层输出相加,保存为一个块摘要;同时维护当前块尚未完成的部分和。下一个子层读取“输入嵌入、已完成块摘要、当前部分和”这些来源。[4] [25]

FIG 06机制图解查看大图 ↗
Block AttnRes的来源是嵌入、完成块摘要和当前块部分和,每个子层前进行权重读取
这里展示两个完成块与一个进行中的块。一次读取后,Attention 或 FFN 产生的新输出会继续加入当前部分和;跨块边界时,将该块摘要保存,再开始新的部分和。[3] [25]

这里展示两个完成块与一个进行中的块。一次读取后,Attention 或 FFN 产生的新输出会继续加入当前部分和;跨块边界时,将该块摘要保存,再开始新的部分和。[3] [25]

K3 的“每 12 层一块”规定摘要的分组边界。实际读取可以发生在每个 Attention 子层和 FFN 子层之前;两次读取使用各自学到的查询向量。[3]

K3 的 93 层分成 7 个完整的 12 层块与最后一个 9 层块。再计入输入嵌入,最终聚合可以看到 9 个深度来源。这些深度摘要仍然保留 token 轴,逐个 token 位置分别计算,整句不会在这里被压成一个向量。[2] [4]

CHAPTER 04

一个专家内部:GLU → SwiGLU → SiTU

沿着两条分支看函数如何改变,先把“门”具体化。

在一个专家内部,输入 x 经过两次不同的线性投影,得到同样长度的 a = Wg x 与 b = Wu x。把 b 当作要传递的值,门控函数 g(a) 用来逐坐标调节它。对应坐标相乘后,还要经过输出矩阵 Wd,回到输入宽度。下面统一省略偏置项。[17] [18]

FIG 07机制图解查看大图 ↗
GLU、SwiGLU与SiTU-GLU的门控和值分支变化
三行保持相同的双分支骨架。GLU 用 Sigmoid 门;SwiGLU 在门内引入 a;SiTU-GLU 同时压缩门控和值支路的动态范围。[17] [18] [1]

三行保持相同的双分支骨架。GLU 用 Sigmoid 门;SwiGLU 在门内引入 a;SiTU-GLU 同时压缩门控和值支路的动态范围。[17] [18] [1]

σ(a) = 1 / (1 + e−a)
GLU 中间量:z = σ(a) ⊙ b
SiLU(a) = a ⊙ σ(a)
SwiGLU 中间量:z = SiLU(a) ⊙ b
完整 FFN:E(x) = Wd z
若输入宽度为 d、中间宽度为 m,则 Wg、Wu 的形状均为 m×d,Wd 为 d×m。门控与值各有一块矩阵,所以总计三块主矩阵。
FIG 08函数曲线 · 单支路查看大图 ↗
Sigmoid、SiLU与SiTU门控函数曲线,纵轴是门控值,非整个GLU输出
曲线由所示公式计算。SiLU 的大正输入近似线性增长;SiTU 的大正输入平滑接近 4。两者的门控值可以为负,不能直接当作概率使用。[18] [1]

曲线由所示公式计算。SiLU 的大正输入近似线性增长;SiTU 的大正输入平滑接近 4。两者的门控值可以为负,不能直接当作概率使用。[18] [1]

门控输入 a(值分支固定 b=3)GLU 的 zSwiGLU 的 zSiTU-GLU 的 z
-20.358-0.715-0.658
01.5000.0000.000
22.6425.2854.861
82.99923.99211.509

例如 a=2、b=3 时,GLU 用 σ(2)≈.881 调节值;SwiGLU 用 2σ(2)≈1.762 调节值,输出因此可以大于 b。SwiGLU 保留更大的正向动态范围,同时也允许两条大数分支在同一坐标相乘。这一放大路径是 K3 希望控制的对象。[18] [1]

SiTU-GLU 在相乘之前限制两条支路

softcap(v;β) = β tanh(v/β)
SiTU(a) = 4 tanh(a/4) ⊙ σ(a)
z = SiTU(a) ⊙ [25 tanh(b/25)]
E(x) = Wd z
对有限实数输入,门控支路绝对值小于 4,值支路绝对值小于 25,中间每个坐标 |zᵢ| < 100。
FIG 09机制图解查看大图 ↗
SiTU-GLU 两支限幅,100 的界只约束相乘后的中间坐标,不约束整个 FFN 输出
双支路限幅约束相乘后的中间坐标。Wd 会重新组合这些坐标,完整专家的输出还取决于 Wd 的权重大小。[1] [3]

双支路限幅约束相乘后的中间坐标。Wd 会重新组合这些坐标,完整专家的输出还取决于 Wd 的权重大小。[1] [3]

FIG 10函数计算 · 固定 a=b查看大图 ↗
同向预激活的中间乘积:无界增长与平滑饱和
为隔离函数形状,令 a=b 且取正值。a=40 时,SwiGLU 中间乘积约 1600,SiTU-GLU 约 92.17;纵轴为对数刻度。[1]

为隔离函数形状,令 a=b 且取正值。a=40 时,SwiGLU 中间乘积约 1600,SiTU-GLU 约 92.17;纵轴为对数刻度。[1]

硬截断在阈值外的局部导数为 0;softcap 的实数导数为 sech²(v/β),会平滑变小。浮点实现仍可能在极端输入下数值饱和。作者报告在同样界限下 softcap 通常表现更好,这属于相应实验设置下的观察。[1]

CHAPTER 05

LatentMoE:把宽度预算换成更多专家

专家数量、每次激活数量与单个专家宽度,需要放在一起计算。

Latent 表示在一个更小的特征空间里处理输入。LatentMoE 在路由专家外共享一次降维和一次升维:先把 d 维输入投影到 d/2,在低维空间运行专家,再回到 d。保持专家中间宽度不变,单个专家的三块主矩阵参数量随输入输出宽度减半。[16]

FIG 11机制图解查看大图 ↗
标准 MoE、LatentMoE 与 Stable LatentMoE 的真实路由输入、低维专家和共享支路
标准方案作为预算对照。Router 从原始输入选择专家;降维后的特征进入被选中的专家;共享支路保持全宽。Stable 版本在路由输出聚合之后、升维之前增加 RMSNorm。[1] [3] [16]

标准方案作为预算对照。Router 从原始输入选择专家;降维后的特征进入被选中的专家;共享支路保持全宽。Stable 版本在路由输出聚合之后、升维之前增加 RMSNorm。[1] [3] [16]

下面跟随同一个 token 的连续演示,把上图的几条支路接起来;随后再计算这条路径的参数预算。

动画 01从全宽路由到低维专家,再与共享支路汇合

先看路由器读取完整输入,再看降维后的表示进入被选中的专家;专家输出加权聚合,经 RMSNorm 与升维后,与全宽共享支路相加。末尾保持网络参数不变,只更换输入,观察专家选择与最终输出如何变化。

35 秒 · 中文字幕 · 无配音。片中采用 8 维输入、4 维专家、8 选 2 的可复算教学示例;下方预算再用 d=7168、m=3072 等参数,比较全宽与低维两种专家方案。[2] [3]

u = Σⱼ∈A pⱼ Eⱼ(W↓x)
y = W↑ RMSNorm(u) + Shared(x)
本式只展开 MoE 子层。外层还有子层归一化及 AttnRes;此处新增的 RMSNorm 专门控制低维路由输出。

取 K3 的宽度 d=7168、中间宽度 m=3072:全宽专家需要 3dm 个主矩阵参数,低维专家需要 3(d/2)m。于是,448 个专家选 8 个,与 896 个低维专家选 16 个,在路由专家的主矩阵预算上恰好相等。新增投影的成本还需要另算。[2]

FIG 12参数预算 · 零起点柱图查看大图 ↗
路由专家主矩阵预算相等,新增降维与升维投影仍需计入
柱形长度表示每个 token 涉及的主矩阵参数量。新增两次投影约 51.4M,约为路由专家激活主矩阵的 9.7%;图中另列两组方案相同的共享专家容量。Router、Norm 和通信未计入。[2] [16]

柱形长度表示每个 token 涉及的主矩阵参数量。新增两次投影约 51.4M,约为路由专家激活主矩阵的 9.7%;图中另列两组方案相同的共享专家容量。Router、Norm 和通信未计入。[2] [16]

额外的 Norm 控制什么?

低维路由链增加了降维和升维两个线性投影,中间还有专家自身的矩阵与门控。多个映射的幅度可能相互放大。RMSNorm 让升维矩阵先收到一个整体尺度受控的向量,以减少这条链上的幅度累积。[1]

RMSNorm(u) = γ ⊙ u / √[ mean(u²) + ε ]
γ 为可学习增益,ε 为数值稳定用的小量。忽略 ε 且整体缩放为正时,输入的共同尺度会被分母抵消。
FIG 13几何示意 · 简化归一化查看大图 ↗
RMSNorm 对二维向量的径向归一化:不同模长可映射到同一方向与模长;忽略epsilon且gamma等于1
二维教学例设 γ=1,并忽略 ε。u 与 3u 映射到相同的方向和幅度;真实训练中仍需考虑可学习增益、方向与梯度等因素。[1] [3]

二维教学例设 γ=1,并忽略 ε。u 与 3u 映射到相同的方向和幅度;真实训练中仍需考虑可学习增益、方向与梯度等因素。[1] [3]

作者报告:这一位置的 Norm 能稳定训练,某些下游评测也会改善。路由与共享输出的比例、归一化带来的非线性、优化动态,都可能参与其中。观察到收益与确定收益机制,是两项不同的证据任务。[1] [4]

CHAPTER 06

Loss-Free 与 QB:让专家获得合适的负载

从一条训练反馈回路,走到根据分布求阈值。

路由器可能偏爱少数专家,造成部分专家拥堵、另一些专家缺少训练信号。传统做法常在主任务损失之外添加均衡损失,写成 L = Ltask + λLbalance。Loss-Free 采用另一条控制通路:根据负载调整专家选择偏置 b。主任务损失与模型训练继续保留。[19]

FIG 14机制图解查看大图 ↗
Loss-Free的主任务反向传播和专家负载偏置反馈是两条通路
上方是前向计算,下方区分主任务反向传播与负载偏置反馈。偏置影响 Top-k 选择,合并权重仍由入选专家的原始分数归一化得到。[19] [3]

上方是前向计算,下方区分主任务反向传播与负载偏置反馈。偏置影响 Top-k 选择,合并权重仍由入选专家的原始分数归一化得到。[19] [3]

A = Top-k(s + b)
pⱼ = sⱼ / Σᵢ∈A sᵢ,j∈A
SignSGD 式反馈:bⱼ ← bⱼ + u · sign(目标负载 − 实际负载)
偏置只进入选择分数。u 为偏置更新步长:越大调整越快,也可能在目标附近来回波动。

这里的“Loss-Free”指避免额外的均衡损失项。路由改变后,参与计算的专家发生变化,主任务梯度也会随之改变。由于输入不同,均衡目标通常针对一批 token 的统计,单个 token 无需平均使用所有专家。[19]

QB 把偏置更新写成分位数问题

假设有 N 个专家,每个 token 选 k 个,单个专家希望拿到约 k/N 的 token。QB 先为每个 token 找出当前入选门槛,再看一个专家面对整批 token 时的“离门槛有多远”,根据这个分布确定新的偏置。这样不再需要 SignSGD 的更新步长 u。[4]

FIG 15机制图解查看大图 ↗
QB 分两条轴求阈值:token侧第k+1名,专家侧分位数;当前batch仍用旧偏置
左侧沿专家轴找一个 token 的 cutoff,右侧沿 token 轴给某个专家找分位数。示例固定当前 cutoff,并忽略并列分数;真实更新使下一步的 cutoff 也可能改变。[4]

左侧沿专家轴找一个 token 的 cutoff,右侧沿 token 轴给某个专家找分位数。示例固定当前 cutoff,并忽略并列分数;真实更新使下一步的 cutoff 也可能改变。[4]

αᵢ = 第 (k+1) 大的 [sᵢ + b旧]
mᵢⱼ = sᵢⱼ − αᵢ
b̂ⱼ = −Q₁₋ₖ/ₙ(m[:,j])
b新 = b̂ − mean(b̂)
Q 表示分位数。当前训练步使用旧偏置,新偏置从下一步开始使用;有限样本需要规定排序、边界与并列处理。

固定当前 token 门槛时,分位数给出目标入选份额对应的偏置。所有专家偏置一起变化后,各个 token 的门槛也可能变化。因此,该更新会跨步继续调整;无需学习率式步长,并不能单独保证每一步或任意输入分布下都达到完美均衡。

全球分布怎样汇总?

FIG 16机制图解查看大图 ↗
局部分位数不能平均,直方图计数可以相加;两个机器的中位数反例
局部中位数的平均无法恢复整体中位数。直方图保留各个区间的计数,计数相加后能够还原合并分布的区间累计量。[1] [4]

局部中位数的平均无法恢复整体中位数。直方图保留各个区间的计数,计数相加后能够还原合并分布的区间累计量。[1] [4]

K3 的报告附录 D 给出具体做法:统计 rᵢⱼ=αᵢ−sᵢⱼ 的直方图,范围取 [min(b)−1, max(b)+1],再读出 k/N 分位数。这个范围利用了 Sigmoid 分数在 (0,1) 内的性质。跨机器和梯度累积先合并计数,再在命中的 bin 内线性插值。[4]

FIG 17可复算模拟 · 41 个观测点查看大图 ↗
固定分布下QB与两种SignSGD步长的负载偏差曲线,来自可复算教学模拟
随机种子为 20260909。QB 精确分位数与 1000-bin 估计在这 41 个观测点上的 MaxVio 最大差为 0.02734。曲线描述固定分布下的一个教学实验;不同分数分布、批次与更新规则可能产生不同结果。

随机种子为 20260909。QB 精确分位数与 1000-bin 估计在这 41 个观测点上的 MaxVio 最大差为 0.02734。曲线描述固定分布下的一个教学实验;不同分数分布、批次与更新规则可能产生不同结果。

独立分析还给出一个需要警惕的情形:在特定分位数约定下,交替更新可能停在次优不动点。一个可枚举的 3×3 示例,其不动点的对偶目标为 5,而最优一一分配得分为 4,二者仍有间隙。这说明“某组模拟调整很快”和“一般收敛保证”需要分别判断。[24]

现在回看专家技术的传承

FIG 18专家结构、数值稳定与负载均衡的三条脉络查看大图 ↗
专家技术的演化:三条脉络,三类问题
第一行改变专家的组织与工作宽度;第二行改变专家内部的激活函数;第三行改变路由负载的控制方式。共享专家提供公共计算,QB 调节路由专家的忙闲,两者承担不同职责。三行在 Stable LatentMoE 中组合,箭头表达设计联系,不要求所有模型经历同一顺序。[14] [15] [16] [17] [18] [19] [1]

横向看各自怎样改进,纵向区分它们分别在解决什么;三行不串成一条因果链。 FIG 18 / 设计脉络 专家技术的演化:三条脉络,三类问题 横向看各自怎样改进,纵向区分它们分别在解决什么;三行不串成一条因果链。 表示 专家 深度 计算 01 专家结构 哪些参数参与? 公共变换与条件分工 稀疏专家 Sparse MoE 按需激活少数专家 共享专家 Shared Expert 公共变换始终参与 低维专家 LatentMoE 专家计算先降维 稳定低维专家 Stable LatentMoE K3 的结构组合 降 升 Norm 02 激活函数 单专家内部, 如何控制数值幅度? GLU sigmoid 控制门分支 SwiGLU Swish 门分支;乘积无界 SiTU-GLU(K3) 平滑限制两条分支的幅度 03 负载均衡 路由专家之间, 谁太忙、谁太闲? Aux-loss / 辅助损失 用额外目标鼓励负载均衡 Loss-Free 用选择偏置调节专家负载 QB(K3) 按分数分位数更新选择偏置 共享专家处理公共变换;负载均衡调节路由专家的忙闲。 共享专家不等于负载均衡。K3 将专家结构、数值稳定、路由均衡三类机制配合使用。 依据:DeepSeekMoE、LatentMoE、GLU Variants、Auxiliary-Loss-Free Load Balancing、K3 报告 §2.3。

CHAPTER 07

注意力缓存:共享头与压缩特征

从 Q、K、V 的用途出发,把两种结构约束画在同一坐标系里。

注意力中的三个向量有不同用途:Query(Q)表达当前要找什么,Key(K)用来与查询匹配,Value(V)提供匹配后读出的信息。每个头使用自己的查询方式。先对可见历史位置打分,再用 softmax 将分数转成归一化权重,最后加权读取 V。[6]

aₜⱼ = softmaxⱼ(qₜᵀ kⱼ / √dₖ + Mₜⱼ)
oₜ = Σⱼ aₜⱼ vⱼ
M 为因果掩码:j≤t 时为 0,j>t 时为 −∞。多个头重复类似的过程,再组合各头输出。

自回归生成时,历史位置的 K/V 可以缓存下来。MHA 为每个头分别保留 K/V;GQA 把多个 query head 分组,每组共享一套 K/V;MQA 让所有 query head 共享一套。它们都保留各个历史位置,主要减少 KV 头的数量。[6] [7] [8]

FIG 19同一个历史位置,三种缓存组织查看大图 ↗
GQA / MQA / MLA:历史缓存到底存什么?
GQA / MQA 减少同一个位置需要保存的 K/V 头数,MLA 则保存联合低维表示,再通过不同投影参与各头计算。Q₁~Q₄ 是查询头编号,cⱼ 对应历史位置 j。图中 MLA 只突出内容 latent;K3 保留的 64 维共享键旁路在本章后半与位置编码章节中展开。[7] [8] [9] [2] [3]

三列固定同一个历史位置 j。上方 Q 是查询头,下方比较这个位置的缓存对象。 FIG 19 / 缓存对象 GQA / MQA / MLA:历史缓存到底存什么? 三列固定同一个历史位置 j。上方 Q 是查询头,下方比较这个位置的缓存对象。 表示 专家 深度 计算 GQA 分组共享 K/V Q1 Q2 Q3 Q4 MQA 全部头共享一份 K/V Q1 Q2 Q3 Q4 MLA 缓存低维 latent Q1 Q2 Q3 Q4 Kⱼ / Vⱼ Kⱼ / Vⱼ 位置 j:2 组 K/V 沿“头”共享 同一份 Kⱼ / Vⱼ 位置 j:1 组 K/V 沿“头”共享的极限 低维 latent cⱼ K/V K/V K/V K/V 位置 j:一份压缩特征 cⱼ 上方展开表示投影关系 沿“特征维”压缩 GQA / MQA 共享 K/V 头;MLA 改变每个历史位置的缓存表示。 图示针对压缩缓存的语义对象,不约束底层后端的具体物理存储形式。 依据:MQA、GQA、DeepSeek-V2 §2.1、K3 报告 §2.1.2。4 个查询头为统一对照示意。

GQA 同组约束:K₁ = K₂,V₁ = V₂
MLA 低维分解:K₁ = U₁ᴷ c,K₂ = U₂ᴷ c;V 同理
MLA 各头从同一 c 出发,但 U₁、U₂ 可以不同。c 是学习得到的特征压缩,并非直接截去原向量末尾几个坐标。

一个最小例子:c=(1,2),两套投影分别读取第一、第二个坐标,就能得到 K₁=1、K₂=2。GQA 同组的两个头则读取相同的 K。这个例子说明,“相同来源经不同投影”和“直接使用同一套 K/V”有不同的表达约束。

MLA 如何同时保留多头表达与小缓存?

K3 每个 MLA 层有 96 个 query head。压缩表示由 512 维 latent c 与 64 维共享键旁路 r构成。每个头可从 c 展开 128 维内容 Key 与 128 维 Value,再把 r 拼到 Key 后面,形成 192 维 Key。[2] [3]

FIG 20机制图解查看大图 ↗
MLA展开计算与latent空间计算等价,保留softmax以及依赖输入的输出门
左右两侧计算相同的函数。左边先展开各头 K/V,右边将内容 Key 的升维矩阵移到 Query 一侧,并在 latent 空间聚合 Value。两侧都保留原来的缩放、因果掩码与 softmax。[3] [9]

左右两侧计算相同的函数。左边先展开各头 K/V,右边将内容 Key 的升维矩阵移到 Query 一侧,并在 latent 空间聚合 Value。两侧都保留原来的缩放、因果掩码与 softmax。[3] [9]

qᵀ(Uᴷc) = [(Uᴷ)ᵀq]ᵀc
Σⱼ aⱼ(Uⱽcⱼ) = Uⱽ(Σⱼ aⱼcⱼ)
两条等式来自矩阵乘法与加法的线性性质;它们解释了计算顺序为什么可以改变。

K3 还在各头输出拼接后增加逐坐标门 g(x),然后才进入最终输出投影 Wo。Uⱽ 可以移到聚合之后执行;由于 g(x) 随输入变化且按坐标调节,一般不能再把 Uⱽ 穿过它,预先静态合入 Wo。[3]

CHAPTER 08

KDA 与 MLA 如何混合

沿层交替的两种记忆:固定大小状态与逐位置记录。

KDA 把历史信息写入一张持续更新的关联记忆矩阵 S。Key 用来定位写入方向,Value 是要记住的信息,Query 从当前状态读取。Delta 更新先读出当前 Key 对应的旧预测,再按“新值减旧预测”的差额修正记忆;KDA 还为不同通道设置遗忘或保留程度。[10] [11] [12] [13]

FIG 21机制图解查看大图 ↗
KDA先通道衰减,再读出旧预测,以误差修正状态,最后由query读取
图示采用 S∈ℝᵈᵏˣᵈᵛ。状态先按通道保留,再对当前 Key 做差额更新,最后由 Query 读取。实际 KDA 模块还包含短卷积、归一化与输出门。[13] [3]

图示采用 S∈ℝᵈᵏˣᵈᵛ。状态先按通道保留,再对当前 Key 做差额更新,最后由 Query 读取。实际 KDA 模块还包含短卷积、归一化与输出门。[13] [3]

Ŝₜ = Diag(αₜ) Sₜ₋₁
v̂ₜ = Ŝₜᵀ kₜ
Sₜ = Ŝₜ + βₜ kₜ(vₜ − v̂ₜ)ᵀ
õₜ = Sₜᵀqₜ
αₜ 控制各通道保留比例,βₜ 控制写入强度;这里均采用列向量,状态形状为 dₖ×dᵥ。

普通加法记忆只把新值加入旧值;Delta 更新尝试修正当前关联。如果某个单位 Key 过去关联到 1、新值是 3,在不遗忘且完整写入的教学条件下,差额更新得到 1+(3−1)=3。这有助于理解它如何处理同一关联的覆盖。

“混合”发生在网络深度上

FIG 22沿深度交替安排两类历史记忆查看大图 ↗
KDA + MLA:摘要状态与逐位置读取
左侧只画连续层的序列混合子层:每个完整层还包含前馈子层与深度连接。各层分别维护自己的 KDA 状态或 MLA 缓存;每层 MoE 也有独立的权重。右侧比较同一序列的两种历史保存方式:固定形状状态与按位置追加的压缩记录。[2] [3] [13]

沿深度交替安排两种序列混合方式:压缩历史的状态递推,以及逐位置的内容读取。 FIG 22 / 混合记忆 KDA + MLA:摘要状态与逐位置读取 沿深度交替安排两种序列混合方式:压缩历史的状态递推,以及逐位置的内容读取。 表示 专家 深度 计算 重复模式:3 × KDA + 1 × MLA 只画序列混合子层 子层 1 KDA 子层 2 KDA 子层 3 KDA 子层 4 门控 MLA 此处展示重复模式;完整层数见正文。 完整层还有前馈子层与 AttnRes。 KDA:固定大小状态递推 x₁ x₂ … xₜ S₁ S₂ Sₜ₋₁ Sₜ 每步把新信息写入摘要;解码状态的形状固定。 压缩后的状态不能逐位置无损保留所有细节。 MLA:逐位置低维缓存 c₁ c₂ c₃ … cₜ₋₁ xₜ 保留逐位置读取;缓存随序列长度增长。 KDA 以状态压缩历史;MLA 保留逐位置回看的通道。 左侧只表示序列混合子层模式;每个完整层还包含前馈子层,深度连接由 AttnRes 处理。 依据:官方配置实际为 69 个 KDA、24 个 MLA,共 93 层;末层也使用 MLA。

前一层输出的 token 表示,成为后一层可读取的信息。KDA 的顺序信息通过表示和深度通路传递给后续 MLA。MLA 读取本层各个历史位置的表示;图中的 KDA 递归矩阵由各 KDA 层自行维护。[3] [13]

Kimi Linear 已采用 3 个 KDA 层接 1 个 MLA 层的重复结构。K3 的 MLA 层号为第 4、8、…、92 层,以及最后的第 93 层,因此总计 69 个 KDA 层、24 个 MLA 层。首层的前馈部分为稠密网络,其余层为 MoE。[2] [13]

FIG 23完整排布 · 93 列对应 93 层查看大图 ↗
K3 的 93 个 Transformer 层:69 KDA、24 MLA;第一层稠密 FFN,其余 92 层 MoE;AttnRes 块边界是每12层
每一竖列代表一个完整 Transformer 层:上行标注序列混合器,下行标注前馈网络。上方括号是 AttnRes 的深度分块,按 12 个完整层计数;最后一块包含 9 层。[2] [3]

每一竖列代表一个完整 Transformer 层:上行标注序列混合器,下行标注前馈网络。上方括号是 AttnRes 的深度分块,按 12 个完整层计数;最后一块包含 9 层。[2] [3]

两种记忆提供互补能力:KDA 的状态尺寸不随历史长度增长;MLA 保留逐位置访问通道。固定矩阵可能出现记忆干扰,逐位置缓存则随历史增长。混合比例体现了这两类代价的取舍。

固定状态也有开销

M全MLA(T) = 93 × 576 × T × 2 字节
M混合(T) = 24 × 576 × T × 2 + 69 × 96 × 128² × b 字节
教学容量模型:MLA 缓存每个数取 2 字节,KDA 矩阵每个数取 b=2 或 4 字节。忽略模型权重、短卷积状态、分配器和其它临时缓冲。
FIG 24容量模型 · 双对数坐标查看大图 ↗
注意力状态的容量估算:固定开销与随长度增长的开销
只比较单条序列的注意力主状态,采用压缩 MLA 缓存。两条混合曲线展示 KDA 状态精度的影响;对数坐标用于跨长度比较。它们不代表某一后端的实际显存测量。[2]

只比较单条序列的注意力主状态,采用压缩 MLA 缓存。两条混合曲线展示 KDA 状态精度的影响;对数坐标用于跨长度比较。它们不代表某一后端的实际显存测量。[2]

代入上述公式,b=2 时的交叉点约为 2731 token;b=4 时约为 5461 token。这里比较的是替换掉的 69 层 MLA 缓存增长与新增 KDA 固定状态。到很长上下文时,混合结构的缓存增长斜率由 24 个 MLA 层决定。

注意力的两条历史路线在这里会合

FIG 25技术谱系 · 两种记忆路线查看大图 ↗
注意力的两条历史主线:按位置保留的全注意力与固定大小递归状态,最终在 Kimi Linear 和 K3 汇合
上支路保留历史位置,研究 KV 共享与低维压缩;下支路研究固定状态如何更新。Kimi Linear 将 KDA 与 MLA 按层组合,K3 延续并调整这一结构。时间间距仅用于排版。[6] [7] [8] [9] [10] [11] [12] [13] [1]

上支路保留历史位置,研究 KV 共享与低维压缩;下支路研究固定状态如何更新。Kimi Linear 将 KDA 与 MLA 按层组合,K3 延续并调整这一结构。时间间距仅用于排版。[6] [7] [8] [9] [10] [11] [12] [13] [1]

CHAPTER 09

RoPE 与 NoPE:顺序信息从哪里来

先算旋转如何影响分数,再看 K3 的局部选择。

在注意力公式中,qₘᵀkₙ 描述内容匹配。要显式加入相对位置,RoPE(Rotary Position Embedding)对 Query 与 Key 的二维坐标对施加旋转:位置越靠后,按相应频率转过越多角度。多个坐标对使用不同频率。[20]

FIG 26显式位置旋转与混合架构中的顺序线索查看大图 ↗
RoPE 与 NoPE:位置怎样进入计算
左侧给出 RoPE 的旋转关系,右侧显示 KDA 递归产生的顺序线索如何随 token 表示传给后续 MLA。K3 的 NoPE 指 MLA 内省去显式 RoPE;因果可见性继续保留。这张图提供整体路径,后文用二维旋转、分数矩阵和递归数值例逐一展开。[1] [3] [13] [20]

RoPE 显式加入相对位移;K3 的 NoPE 去掉的是 MLA 分支里的显式位置旋转。 FIG 26 / 位置与边界 RoPE 与 NoPE:位置怎样进入计算 RoPE 显式加入相对位移;K3 的 NoPE 去掉的是 MLA 分支里的显式位置旋转。 表示 专家 深度 计算 RoPE:位置变成向量旋转 同一二维子空间中的示意 位置 m 位置 n qₘ q′ₘ kₙ k′ₙ 角度与向量长度仅作示意。 q′ₘ = Rₘ qₘ k′ₙ = Rₙ kₙ q′ₘᵀ k′ₙ = qₘᵀ Rₙ₋ₘ kₙ 旋转部分只依赖相对位移 n − m; 内容向量 q、k 仍参与决定分数。 K3:MLA 去掉显式 RoPE x₁ x₂ x₃ xₜ S₁ S₂ S₃ Sₜ KDA:按先后顺序递推 经顺序敏感路径加工的 token 表示 表示经过层间传递,供 MLA 继续读取。 MLA:在可见位置之间按内容读取 因果约束:只能看自身与过去。 MLA 的 Q/K 不显式加入位置旋转。 K3 的混合结构允许 MLA 内去掉 RoPE;结论限于相应架构与实验。 不推出任意模型都能无代价移除位置编码,也不代表精确保留全部相对位置信息。 依据:RoFormer / RoPE、K3 报告 §2.1.2、mla_use_nope=true 与 KDA 实现。

FIG 27机制图解查看大图 ↗
二维旋转位置编码,比较NoPE不旋转和RoPE逐位置30度旋转
单一二维坐标对的几何示例。为隔离位置作用,三个位置的内容向量固定为 (1,0);θ=30° 只用于教学,实际 RoPE 组合多组旋转频率。[20]

单一二维坐标对的几何示例。为隔离位置作用,三个位置的内容向量固定为 (1,0);θ=30° 只用于教学,实际 RoPE 组合多组旋转频率。[20]

R(mθ) = cos(mθ)−sin(mθ)sin(mθ)cos(mθ)
q′ₘ = R(mθ)qₘ,k′ₙ = R(nθ)kₙ
(q′ₘ)ᵀk′ₙ = qₘᵀ R((n−m)θ) kₙ
关键一步:R(mθ)ᵀR(nθ)=R((n−m)θ)。绝对位置 m、n 在相互比较时转成相对位置差 n−m。

NoPE 保留内容注意力与因果可见性

RoPE:ℓₘₙ = [qₘᵀ Rₙ₋ₘ kₙ] / √dₖ + Mₘₙ
NoPE:ℓₘₙ = [qₘᵀ kₙ] / √dₖ + Mₘₙ
aₘₙ = softmaxₙ(ℓₘₙ)
两式使用相同的因果掩码 M;NoPE 在这一步省去显式位置变换。这里先展示全部坐标都参与旋转的通用对照。
FIG 28机制图解查看大图 ↗
同样内容向量下NoPE与RoPE的三乘三因果注意力分数矩阵
固定内容时,NoPE 的可见位置内积相同;RoPE 的内积因相对位置不同而变化。真实模型的 q/k 已经经过上下文处理,所以 NoPE 的分数也可以反映先前层编码的顺序信息。[20]

固定内容时,NoPE 的可见位置内积相同;RoPE 的内积因相对位置不同而变化。真实模型的 q/k 已经经过上下文处理,所以 NoPE 的分数也可以反映先前层编码的顺序信息。[20]

这个二维例子在 0~60° 范围内的点积逐渐变小。不能据此推出 RoPE 在所有方向和距离上单调衰减。旋转具有周期性,实际分数还取决于内容向量及多个频率的组合。

K3 为什么能让 MLA 使用 NoPE?

MLA 前面穿插着 KDA。递归更新和短卷积都依赖输入先后次序,因此即使 MLA 自己不再旋转 Q/K,输入表示中仍可以包含顺序信息。因果掩码也保留了可见前缀的结构。理解这一点,可以先看一个只用两个数字的递归例子。[3] [13]

FIG 29机制图解查看大图 ↗
简单递归记忆在AB和BA顺序下分别得到5和4,说明顺序可以进入隐藏表示
这条标量递归仅说明顺序如何进入隐藏表示。KDA 的真实状态为矩阵,遗忘、写入和输出门由输入决定;示意不能用来量化 K3 的位置识别能力。

这条标量递归仅说明顺序如何进入隐藏表示。KDA 的真实状态为矩阵,遗忘、写入和输出门由输入决定;示意不能用来量化 K3 的位置识别能力。

原文的经验判断是:在 K3 的 KDA+MLA 混合模型中,将 RoPE 加回 MLA,没有观察到明显收益;在全 MLA 的 K2 上移除 RoPE,会明显变差。去除位置旋转的效果依赖整体架构与实验条件。因果掩码存在、递归对顺序敏感,也不足以单独保证精确位置任务或任意长度外推都成功。[1]

RoPE、PaTH 与 KDA 的联系,需要哪些条件?

Householder 反射:H = I − 2uuᵀ,‖u‖=1 ⇒ HᵀH=I
KDA 状态转移:Aₜ = (I − βₜ kₜkₜᵀ) Diag(αₜ)
H 保持向量长度;KDA 的 α、β 包含衰减与写入控制,Aₜ 一般不具备正交性。

固定正交变换的幂可以构造广义位置变换;PaTH 探索了输入相关的 Householder 型路径变换。Delta 规则也出现 I−βkkᵀ 这一矩阵形式,在满足特定归一化与系数条件时,可以联系到正交反射。KDA 进一步加入通道衰减。这条脉络说明了机制上的亲缘关系,完整模型的效果仍需相应实验支撑。[1] [21]

保留 64 维旁路,意味着什么?

FIG 30机制图解查看大图 ↗
无RoPE后仍保留64维共享键旁路:512维展开用于KV,64维直接拼到K
K3 的 512 维 latent 负责多头内容 Key/Value 的展开;64 维旁路直接拼入各头 Key。移除 RoPE 后,这条旁路继续贡献内容分数。[1] [3]

K3 的 512 维 latent 负责多头内容 Key/Value 的展开;64 维旁路直接拼入各头 Key。移除 RoPE 后,这条旁路继续贡献内容分数。[1] [3]

带 RoPE 的旁路分数: (Rₘ qₘʳ)ᵀ (Rₙ rₙ)
K3 NoPE 的旁路分数: (qₘʳ)ᵀ rₙ
完整 K3 每头 logit:[(qₘᶜ)ᵀUᴷcₙ + (qₘʳ)ᵀrₙ] / √192 + Mₘₙ
qᶜ 为 128 维内容 Query,qʳ 为 64 维旁路 Query。这里直接指出原 MLA 位置分支对应的变化。

作者保留旁路的理由包括兼容已有 MLA 基础设施,以及避免把全部 576 维 latent 再展开为各头 K/V 所带来的额外计算。长上下文能力还依赖训练数据与日程:报告描述了从 8K、64K,再到 256K、1M 的长度阶段。[1] [4]

CHAPTER 10

把缓存、计算与任务时间分开

同一个设计可以节省存储,同时增加某种计算。

Prefill 是一次处理输入的新 token,Decode 是逐步生成输出。MLA 在展开形态中使用较小的头内维度,在压缩缓存形态中则让 Query 进入更大的 latent 空间。两种计算顺序的核心成本不同。[1] [9]

FIG 31Prefill 核心乘加系数查看大图 ↗
训练 / Prefill:注意力核心乘加系数
按每个有效 query–key 位置对计数,QK 与加权 V 的主乘加系数为 H(dqk+dv)。统一 H=96,以便只比较所列头内尺寸;省略投影、softmax 和其它模块。[1] [2]

按每个有效 query–key 位置对计数,QK 与加权 V 的主乘加系数为 H(dqk+dv)。统一 H=96,以便只比较所列头内尺寸;省略投影、softmax 和其它模块。[1] [2]

FIG 32缓存标量数 · 压缩表示查看大图 ↗
压缩缓存:每位置、每层要保留多少个数
每个历史位置、每个注意力层的缓存标量数。GQA8 在此指 8 个 KV head;K=V 的共享 512 维只存一份。MQA 256/256 是原文讨论 MFA 时的注意力核心尺寸简化。[1] [2]

每个历史位置、每个注意力层的缓存标量数。GQA8 在此指 8 个 KV head;K=V 的共享 512 维只存一份。MQA 256/256 是原文讨论 MFA 时的注意力核心尺寸简化。[1] [2]

FIG 33Decode 核心乘加系数查看大图 ↗
Decode:读取一个已缓存位置的核心乘加系数
压缩 MLA 中,QK 使用 576 维,聚合 latent Value 使用 512 维;因此核心系数为 96×(576+512)=104448。此处只数依赖历史位置的主乘加,输出升维等操作需另计。[1] [2]

压缩 MLA 中,QK 使用 576 维,聚合 latent Value 使用 512 维;因此核心系数为 96×(576+512)=104448。此处只数依赖历史位置的主乘加,输出升维等操作需另计。[1] [2]

MAC 指一次乘法并累加。上面三图展示的单位不同:乘加系数反映一部分计算,标量个数反映缓存容量。生成耗时还取决于显存读取、矩阵利用率、批量、通信与调度。4.25 倍核心乘加系数不能直接换成 4.25 倍延迟。

推测解码改变了额外计算的价值

推测解码先由较小的草稿模型提出若干 token,再让目标模型批量验证。收益来自验证效率与接受率,也要扣除草稿计算和状态维护开销。MLA 的 latent 计算较重,在部分设置下可能更早遇到计算瓶颈;KDA 的递归状态还需要处理验证拒绝后的回退。[1] [4]

K3 的训练与发布形态需要按阶段理解:预训练包含一个 MTP 层,随后将它微调成 EAGLE-3 式草稿模型;发布主模型配置中 num_nextn_predict_layers=0。前者说明训练历史,后者描述所发布主模型的配置。[2] [4]

另一条路线:DeepSeek-V4 的压缩与稀疏访问

FIG 34机制图解查看大图 ↗
K3通过深度上的KDA与MLA分工节省长序列成本,DeepSeekV4通过序列压缩与稀疏读取降低成本
K3 用大量固定状态层减少逐位置缓存;V4 结合局部窗口、压缩历史条目和稀疏访问。CSA 先压缩再选择条目,HCA 采用更强压缩;两者的访问方式需要分别理解。[1] [5]

K3 用大量固定状态层减少逐位置缓存;V4 结合局部窗口、压缩历史条目和稀疏访问。CSA 先压缩再选择条目,HCA 采用更强压缩;两者的访问方式需要分别理解。[1] [5]

结构字段DeepSeek-V4-FlashDeepSeek-V4-Pro
完整 Transformer 层4361
Query 头数64128
共享 KV 维度512512
总参数 / 每 token 激活参数284B / 13B1.6T / 49B

上述字段来自 V4 技术报告。其共享 K=V 结构与 MLA 的 latent 解码视角有联系,压缩和稀疏机制又引入新的取舍。固定矩阵可能让记忆相互干扰,条目压缩可能合并局部细节,稀疏访问可能漏选重要记录。哪种组合更合适,需要同等条件下的任务评测。[5] [1]

CHAPTER 11

从机制回到 K3 的设计选择

现在可以把开篇的三个方向连起来,并回答架构取舍问题。

训练更新这条配套路线:Muon 与 Per-Head Muon

前面的模块定义模型怎样计算;优化器定义训练时权重怎样更新。Muon 对矩阵形状的更新方向做特殊处理,Moonlight 将其扩展到大模型训练。Per-Head 形式将相关注意力矩阵按头分块处理更新。原文报告此改动没有明显效果差异,主要出于避免不必要耦合的设计考虑。[1] [23]

专家变多,成本为什么可能接近?

专家总数 N、激活数 k 和每个专家宽度共同决定预算。K3 把路由专家输入输出宽度减半,再把 N、k 都翻倍,路由专家的三块主矩阵预算保持相等;降维、升维、Router 与通信仍有额外成本。

MLA 缓存小,为什么解码仍可能较重?

同一份 latent 节省了存储,但各个 Query head 在 latent 空间进行打分和聚合时,要处理更长的向量。实际速度要结合计算与访存瓶颈判断;推测解码进一步改变两者的利用方式。

去掉 RoPE,位置能力依赖什么?

KDA 的递归、短卷积与因果可见性为顺序信息提供了通路,后续 NoPE MLA 可以读取已含上下文的表示。RoPE 是否有收益,以及位置任务和长度外推能做到什么程度,需要对应架构的实验结果。

沿技术脉络回看:MoE 发展了按需前馈计算,MLA 将多头表示与缓存宽度拆开,KDA 提供固定状态记忆,AttnRes 增加深度选择。Stable LatentMoE、输出门、位置分支与优化器中的调整,让这些部件在同一个系统里协调工作。[1]

理解一项架构改动,可以依次追踪四件事:
数据从哪里来,经过什么计算,省下哪种资源,又付出哪种代价。
CHAPTER 12

参考文献与计算说明

技术来源、教学推导与实验观察按各自用途引用。

本文围绕苏剑林关于 K3 的架构随笔展开。K3 的尺寸与开关依据发布配置,计算路径依据公开参考代码;对设计效果的描述保留相应论文或作者观察的范围。小型数值例、函数曲线和容量模型均明确标注了教学假设。

[01]苏剑林:简单谈谈K3的MoE和Attention

架构设计思路、取舍与实验观察。

[02]Kimi K3 · text_config

text_config:完整层、专家、头数、维度与开关;页面所列提交 c5d1dd4。

[03]Kimi K3 · 公开参考实现

SituAndMul、KimiSparseMoeBlock、KimiMLAAttention、KimiDecoderLayer 与 _apply_attn_res。

[04]Kimi K3 技术报告 v2

2026-08-07 版本;架构、MTP 草稿层、QB 推导与直方图估计。

[05]DeepSeek-V4 技术报告 v1

共享 KV、压缩稀疏注意力及 Flash / Pro 模型配置。

[06]Attention Is All You Need · 2017

Transformer、多头注意力与前馈网络。

[08]GQA: Training Generalized Multi-Query Transformer Models · 2023

按组共享 K/V 的 Grouped-Query Attention。

[09]DeepSeek-V2 · 2024

联合 Key/Value 低秩压缩的 MLA。

[10]Transformers are RNNs · 2020

固定状态递归视角下的线性注意力。

[12]Gated Delta Networks · 2024

带遗忘控制的 Delta 网络。

[13]Kimi Linear · 2025

KDA 通道级门、按层混合及 NoPE 实验。

[14]Sparsely-Gated Mixture-of-Experts · 2017

现代大规模稀疏 MoE 的代表工作。

[15]DeepSeekMoE · 2024

细粒度专家与共享专家。

[16]LatentMoE · 2026

低维路由专家及预算分配。

[18]GLU Variants Improve Transformer · 2020

SwiGLU 等 GLU 变体的函数定义与实验。

[19]Auxiliary-Loss-Free Load Balancing · 2024

使用专家偏置的辅助损失自由负载控制。

[20]RoFormer / RoPE · 2021

RoPE 的二维推导与相对位置性质。

[21]PaTH Attention · 2025

输入相关路径变换与 Householder 型矩阵。

[22]Attention Residuals · 2026

Full / Block Attention Residuals。

[23]Muon is Scalable for LLM Training · 2025

大模型训练中的 Moonlight Muon。

[24]Understanding, extending and improving quantile balancing · 2026-09

独立研究分析;分位数更新的不动点反例及负载约束扩展。

[25]Attention Residuals · 官方实现说明

README 中的 Block AttnRes 伪代码;K3 的块大小口径以自身配置与实现为准。

教学计算的适用范围

保存教学计算代码(Python / NumPy)。运行 python K3_图解计算示例.py --output results.json,可计算专家参数与状态容量,并检查 MLA、KDA、RoPE 的公式关系及 QB 教学示例。

专家参数量按三块主矩阵计算;注意力成本图仅计核心乘加;显存模型仅含所列注意力状态。它们可用于理解结构趋势,无法代替实际吞吐或完整显存测试。QB 曲线采用固定分布、每步重采样的教学设置。随文计算代码提供这些数值例及矩阵等价检查。

文中未报告重新训练 K3、加载完整模型或复现其消融实验的结果。实验效果的适用范围以对应来源说明为准。

K3 架构图解 · 机制、公式与资源取舍
正文与图表可在本页阅读,动画及教学计算代码可播放或下载;技术来源见参考文献。返回开头

100% 打开原图 ↗

放大后可上下、左右滚动。按 Esc 或关闭按钮返回文章。