Kimi K3 模型结构(6):输入端与零件,MoonViT-V2、MTP、Per-Head Muon

Kimi K3 模型结构(6):输入端与零件,MoonViT-V2、MTP、Per-Head Muon

💡 原文中文,约5700字,阅读约需14分钟。
📝

内容提要

Kimi K3模型采用从零训练的MoonViT-V2视觉编码器,27层、patch14结构,支持高分辨率图像token化;MTP层预训练后微调为EAGLE-3投机解码draft模型;Per-Head Muon优化器按头正交化动量矩阵,提升训练稳定性。词表大小163840,采用稠密层设计,强调结构选择对系统设计的影响。

🔎

延伸解读

从零训练视觉编码器的稳定性考量

K3 弃用 SigLIP 初始化,改用 next-token prediction 从零训练 MoonViT-V2,主要原因是训练稳定性:SigLIP 初始化的 MoonViT-3D 在联合优化时梯度范数偏高且频繁尖峰,而从零训练的版本全程平稳。此外,NTP 直接塑造表示,对比学习偏好全局语义,可能忽略细粒度文字和结构。实测视觉评测与基线持平,说明对比预训练并非必要。

MTP 层到 EAGLE-3 draft 的微调策略

预训练的 MTP 层在部署时被微调为 EAGLE-3 风格的 draft 模型,目标模型冻结。初始化时特征融合矩阵设为 [0 0 I],使初始表示等于高层特征,与 MTP 预训练输入一致,再逐步学习利用低中层特征。训练采用 7 步展开,与推理递归一致。损失直接优化接受率的负对数,而非 KL 散度,因为最小化 KL 不保证最大化接受率。

Per-Head Muon 对注意力头更新的影响

Per-Head Muon 将注意力投影的动量矩阵按头切开,分别正交化,而非整矩阵处理。这避免了梯度尺度大的头主导共享更新方向,使各头更新尺度对齐,带来更均衡的跨头学习动态和更好的大规模稳定性。同时,对瘦长块做 Newton–Schulz 迭代比整矩阵更省开销。这虽是优化器改动,但影响头的训练行为。

Q&A

Kimi K3的视觉编码器MoonViT-V2与K2.5的MoonViT-3D有何不同?

MoonViT-V2是从零训练的,没有使用SigLIP初始化,而MoonViT-3D是K2.5中使用的、基于SigLIP初始化的版本。K3选择从零训练主要是为了训练稳定性,因为SigLIP初始化的编码器在联合优化时梯度范数偏高且频繁尖峰,而从零训练的MoonViT-V2全程平稳。

一张3584×3584的图片经过MoonViT-V2处理后变成多少个token?

3584×3584的图片经过patch embed(patch size 14)得到256×256=65536个patch,再经过2×2 pixel-shuffle下采样和时间池化后,token数除以4,变为16384个token。

Kimi K3的MTP层在部署时如何被用作EAGLE-3 draft模型?

预训练时K3带有一个MTP层,结构镜像主干block。部署时,MTP层被微调成EAGLE-3风格的draft模型,目标模型冻结,只训练draft层和特征融合投影。输入融合目标模型第1、第4和最后一个AttnRes块的输出,通过矩阵WE3投影回7168维,并初始化为[0 0 I]以保持初始时等于高层特征。训练时按EAGLE-3的training-time test协议展开7步,并直接优化LK损失(接受率的负对数)以最大化投机解码的接受率。

Per-Head Muon优化器与标准Muon优化器有何不同?

标准Muon优化器对动量矩阵整体做Newton-Schulz迭代近似正交化,而Per-Head Muon只针对注意力投影,将动量矩阵沿头的维度切开,每个头的块单独正交化。这样避免了整矩阵正交化时不同头尺度差异导致的问题,使各头的更新尺度对齐,带来更均衡的跨头学习动态和更好的大规模稳定性,同时节省了计算开销。

Kimi K3的词表大小是多少?LM head与embedding是否共享权重?

Kimi K3的词表大小是163840,论文中写的160K是四舍五入。LM head不与embedding共享权重(tie_word_embeddings=false),两者各有7168×163840≈1.17B参数。

Kimi K3的第一层为什么使用稠密FFN而不是MoE?

Kimi K3的第一层使用稠密FFN(中间维33792),而不是MoE,这是结构设计的选择。K2也采用了类似设计(first_k_dense_replace=1),可能出于稳定性和效率考虑。

🏷️

标签

➡️

继续阅读