Kimi-VL:从原生分辨率视觉编码器到长上下文多模态推理的完整训练范式

Kimi-VL 是一个面向真实世界多模态理解与长上下文推理的体系化方案:它从视觉编码器的原生分辨率建模出发,通过投影对齐MoE 语言模型完成统一建模,再用一套分阶段预训练与后训练(SFT / Long-CoT SFT / RL)将模型能力“激活”到可用、可控、可扩展的状态。下面按架构与训练阶段逐层拆解,并在关键处加入可落地的直观案例。


1. Model Architecture

Kimi-VL 的整体架构可拆成三块:

  1. MoonViT:Native-resolution Vision Encoder
  2. MLP Projector:视觉到语言空间的对齐映射
  3. MoE Language Model:高容量但高效率的语言侧建模

这三者的分工很清晰:MoonViT 负责把图像“读懂并编码成序列”,Projector 负责把视觉表征“翻译成语言模型可消费的语义子空间”,MoE LLM 负责“长上下文推理、对话与生成”。


1.1 MoonViT:原生分辨率视觉编码器(Native-resolution)

1.1.1 核心动机:避免复杂的子图切分/拼接

许多多模态系统面对高分辨率图像时,会先把图像切成若干子图(tiles),分别编码再拼接回去。这样做的工程与训练复杂度很高,而且很容易引入两个问题:

  • 跨子图关系被弱化:例如表格跨列、图表跨轴、文档跨段落的对应关系,需要额外机制来恢复。
  • 吞吐不稳定:不同图像需要不同切分策略,batch packing 与注意力计算变得更难控。

MoonViT 的目标是:直接处理不同分辨率的原始图像,尽量让“不同分辨率”成为序列长度变化的问题,而不是“图像结构被改写”的问题。

1.1.2 关键技术:NaViT 的 packing 思想

MoonViT 借鉴 NaViT 的 packing 方法,将不同尺寸的图像统一成可变长度的 token 序列:

  • 将图像划分为 patch(例如 P×PP\times PP×P
  • 将二维 patch 网格展平为一维序列
  • 将同一 batch 中不同图像的序列按规则打包(packing)进入注意力计算

可以用一个最小的符号化描述来理解“分辨率如何影响序列长度”:

设输入图像分辨率为 H×WH\times WH×W,patch 大小为 PPP,则 patch token 数约为:

N≈⌈HP⌉⋅⌈WP⌉ N \approx \left\lceil \frac{H}{P} \right\rceil \cdot \left\lceil \frac{W}{P} \right\rceil NPHPW

这意味着:分辨率提升,本质上是 token 序列变长;而 packing 的核心就是让可变长度序列在同一批次里高效跑 attention。

1.1.3 直接收益:算子统一 + FlashAttention 友好 + 吞吐可控

MoonViT 这种“把分辨率问题转成序列长度问题”的做法,会带来三个很实用的收益:

  • 与 LLM 共享核心计算范式:注意力与序列建模算子一致(可变长序列 attention),模型系统更统一。
  • 易用 FlashAttention 优化:可变长序列 attention 与 packing 更容易吃到 FlashAttention 的加速红利。
  • 训练吞吐更稳定:不同分辨率对应不同 NNN,但整体仍然是“序列长度变化”,可通过 packing/长度分桶等方式稳定吞吐。
1.1.4 案例:文档截图与图表解析为什么更受益?
  • 文档截图(含 OCR 与段落结构):如果把页面切成子图,段落与标题、图注与图像的对应关系可能跨子图;MoonViT 直接编码整页更容易保留全局结构线索。
  • 图表(坐标轴 + 曲线 + 标注):图表理解常要求把局部数值标注与全局坐标系绑定;子图切分可能把标注与坐标轴分离。原生分辨率整体编码更自然。

1.2 MLP Projector:视觉表征到语言空间的桥

MoonViT 输出的是视觉 token 序列表示,但语言模型希望接收的是符合其语义分布与尺度的 token 表征。MLP Projector 的作用可以理解为:

  • 对齐语义空间:把视觉特征映射到语言模型更“熟悉”的表示空间;
  • 对齐尺度与统计特性:减少两种模态特征分布差异导致的训练不稳定;
  • 作为瓶颈控制信息注入:避免视觉噪声直接冲击语言模型的内部表征。

直观上,Projector 让系统具备一种“翻译器”效果:视觉编码器负责“看清”,Projector 负责“说清”。


1.3 MoE Language Model:高容量、可伸缩的语言侧建模

MoE(Mixture of Experts)语言模型的关键价值是:在计算成本可控的前提下提升模型容量。粗略理解:

  • 每个 token 不需要激活全部参数,只激活少数专家;
  • 这样可以在相似 FLOPs 下拥有更高总参数容量;
  • 对多任务、多域能力(知识、代码、数学、长文本)更友好。

这也解释了为什么 Kimi-VL 可以在多模态与纯文本能力之间做更强的兼顾:MoE 让“能力覆盖面”更容易扩大。


2. Muon Optimizer:用于全模块的统一优化器

Kimi-VL 使用改进版 Muon optimizer,并且全程用于优化所有模块参数(MoonViT、Projector、MoE LLM)。这类统一优化策略的价值在于:避免“视觉一套优化超参、语言一套优化超参”导致的系统调参地狱。

2.1 核心改进点

相对原始 Muon optimizer,主要增强包括:

  1. 引入 weight decay 正则项
    对大规模预训练而言,weight decay 往往是稳定训练与提升泛化的重要手段,尤其在长阶段训练中更明显。
  2. 精细调整 per-parameter 更新尺度
    目标是让不同类型参数(如 attention/FFN/embedding/视觉投影层)在更新幅度上更协调,降低某一子模块“先学爆/先学死”的风险。

2.2 分布式实现:基于 ZeRO-1

Muon 的分布式实现基于 ZeRO-1 优化策略,强调:

  • 保持算法数学特性:分布式拆分不改变关键更新行为;
  • 最优内存效率:更可控地扩展到大规模训练;
  • 降低通信开销:在多机多卡下维持吞吐。

3. Pre-Training Stages:4 阶段预训练(总计 4.4T tokens)

Kimi-VL 的预训练分为四个阶段:

  1. 独立的 ViT 训练阶段
  2. 联合预训练阶段
  3. 联合冷却阶段
  4. 长上下文激活阶段

这是一条典型的“先视觉打底 → 再多模态融合 → 再能力精炼 → 最后拉长上下文”的路线。


3.1 阶段 1:独立 ViT 训练(ViT Training Stage)

3.1.1 数据:多目标 image-text pairs

训练数据不仅是普通的图文对,还包含多类文本目标:

  • image alt texts(网页图像的替代文本)
  • synthetic captions(合成描述)
  • grounding bboxes(带定位信息的文本目标)
  • OCR texts(图中文字)

其核心思想是:让视觉编码器在“对齐语义”的同时,具备对真实世界关键能力的覆盖(尤其 OCR 与 grounding)。

3.1.2 损失:CoCa 式混合损失(SigLIP + Caption)

采用 SigLIP 对比损失与 caption 生成损失的组合:

L=Lsiglip+2⋅Lcaption L = L_{\text{siglip}} + 2 \cdot L_{\text{caption}} L=Lsiglip+2Lcaption

  • LsiglipL_{\text{siglip}}Lsiglip:鼓励图文对在表征空间中对齐,强化检索与语义匹配能力;
  • LcaptionL_{\text{caption}}Lcaption:鼓励模型生成式地表达图像内容,强化细节描述与可用语言接口;
  • 系数 222:强调生成监督对视觉语义细化的重要性。
3.1.3 初始化策略
  • image/text encoder:使用 SigLIP SO-400M 预训练权重初始化
  • text decoder:tiny decoder-only LLM 初始化

这是一种务实的做法:先把“视觉-文本对齐”的底座搭好,再逐步长到能承载大模型的程度。

3.1.4 关键发现:OCR 数据引发 caption loss “涌现”

在加入 OCR 数据后,caption loss 出现涌现式变化,直观含义是:当训练目标要求模型表达“精确文本内容”时,视觉编码器与生成头会被迫学习更强的细粒度视觉辨识与序列化表达能力。

案例:
一张电商截图里有“¥1299”“限时优惠”“24期免息”。

  • 如果只有 alt-text 或粗 caption,模型可能只学会“这是一个促销页面”。
  • 加入 OCR 目标后,模型必须把“具体数字与文案”准确映射到 token 序列,进而逼出更强的局部辨识能力。
3.1.5 对齐补充:0.1T tokens 用于 MoonViT 与 MoE LLM 对齐

在视觉底座之后,用额外 token 量推动 MoonViT 与 MoE 语言模型之间的对齐,使“视觉 token 注入语言模型”变得稳定。


3.2 阶段 2:联合预训练(Joint Pre-training Stage)

这一阶段的目标是:把纯文本能力与多模态能力纳入同一训练过程,同时避免语言能力退化。

3.2.1 数据混合
  • 纯文本数据:与初始 LLM 同分布(确保语言能力底盘不漂移)
  • 多模态数据:推动视觉-语言对齐与跨模态推理
3.2.2 训练策略:先语言后多模态、逐步增加比例
  • 初始仅用 language data
  • 逐步增加 multimodal data 比例
  • 总消耗约 1.4T tokens

为什么要“先语言后多模态”?
因为语言模型的生成与推理能力是整个系统的“执行引擎”。如果在模型尚未稳定语言建模时强塞多模态数据,容易出现:语言流畅性下降、指令遵循变差、长上下文能力变脆。


3.3 阶段 3:联合冷却(Joint Cooldown Stage)

“冷却”阶段更像一次针对能力结构的再平衡与精炼:减少噪声、加强关键能力、控制过拟合。

3.3.1 语言数据优化:合成数据强化 math/code/knowledge

合成数据能显著提升数学、代码与知识问答能力。采用混合策略:

  • 精选预训练子集(提高语言质量与覆盖)
  • 合成 QA 对(由 proprietary LLM 生成)

案例:

  • 数学:引入更密集的多步推理样本,让模型学到“分步推导”的语言模式与错误纠正习惯;
  • 代码:引入更多单元测试式问答,使模型学习到更强的可执行性约束;
  • 知识:引入结构化 QA,让模型减少胡编、提升引用式表达能力。
3.3.2 多模态数据优化:学术视觉改写为 QA 对 + 控制比例
  • 将学术视觉数据(论文图、表、示意图等)改写为 QA 对,提升“读图问答”的推理能力;
  • 保持低比例 QA 数据以防止过拟合(尤其是对固定模板的投机学习)。

3.4 阶段 4:长上下文激活(Joint Long-context Activation Stage)

这一阶段直接把上下文窗口从 8K 拉到 128K,并确保扩展后能力可用。

3.4.1 上下文扩展策略:8K → 128K,两阶段、每次 4 倍

分两阶段扩展,每次 4 倍,避免一次性扩展导致训练不稳定或“长上下文可用性虚高”。

3.4.2 RoPE 逆频率调整

将 RoPE 逆频率从 50,000 调到 800,000,以适配更长的序列建模范围。

3.4.3 数据构成:长短混合防退化
  • 25% 长上下文数据(long text / long video 等)
  • 75% 短上下文数据(保留原有能力)

这体现了一个经验事实:如果长上下文数据占比过高,模型在短输入上的反应可能变慢、风格变啰嗦、或者在常规任务上精度下降。

3.4.4 验证:needle-in-a-haystack

通过 needle-in-a-haystack 测试验证:在 128K 范围内仍保持高召回率。

案例:
给模型一段 100K tokens 的长文档,在第 83K token 附近埋一个关键事实(例如某个参数值或一句关键结论),问题只问这一点。

  • 若模型长上下文能力只是“能跑”,则会漏掉;
  • 若模型长上下文能力真的“被激活”,则能稳定找回并回答。

4. Post-Training Stages:SFT、Long-CoT SFT 与 RL

预训练解决的是“世界知识与多模态底座”,后训练解决的是“可用性、指令跟随、推理行为与可控性”。


4.1 Joint Supervised Fine-tuning(联合 SFT)

4.1.1 数据格式:ChatML

采用 ChatML 保持与对话式架构一致,降低格式分歧造成的行为不稳定。

4.1.2 训练目标:只对 answers 与 special tokens 计算 loss

训练时 mask 系统/用户 prompts,只对模型应该“输出负责”的部分计算 loss,有助于:

  • 减少对 prompt 复述与模板化复制;
  • 强化答案区域的可控生成。
4.1.3 两阶段上下文:32K(1 epoch)→ 128K(1 epoch)

先在 32K 上稳定行为,再扩展到 128K 上巩固长上下文对话能力。

4.1.4 动态学习率策略
  • 第一阶段:
    2×10−5→2×10−6 2 \times 10^{-5} \rightarrow 2 \times 10^{-6} 2×1052×106
  • 第二阶段:重新 warmup 到
    1×10−5 1 \times 10^{-5} 1×105
    再衰减到
    1×10−6 1 \times 10^{-6} 1×106

这类“二阶段重新 warmup”通常用于:在上下文长度或数据分布发生明显变化时,避免直接沿用上一阶段尾部的小学习率导致学习过慢。

4.1.5 数据打包(packing)

将多个训练样本 pack 到单个 sequence 提升效率,尤其在长上下文训练中对吞吐很关键。


4.2 Long-CoT Supervised Fine-Tuning:长链路推理的行为预热

这一阶段的目标是:让模型内化更稳定的推理策略,而不是只会“给结论”。

4.2.1 认知过程建模:planning / evaluation / reflection / exploration

通过结构化的 long-CoT 样本,把推理拆成几种典型子能力:

  • planning:先规划步骤再执行
  • evaluation:对中间结论做一致性检查
  • reflection:发现错误并修正推理路径
  • exploration:并行尝试多方案后择优

案例:图表推理中的 exploration + evaluation
问题:给一张折线图,问“在 2019 到 2021 间增长最快的年份区间是哪段?”

  • exploration:模型可能先尝试读出每年的数值差,再尝试读斜率,再尝试对比相邻点;
  • evaluation:检查“是否读错坐标轴单位”“是否把 2020-2021 看成 2019-2020”。
    长 CoT 的训练样本会把这种“多路径尝试 + 中途校验”固化成稳定习惯。
4.2.2 轻量级 SFT 的意义

这里强调“轻量级”的原因是:它更像把推理策略写进模型的行为先验中,为后续 RL 的探索与优化提供更好的起点,减少 RL 早期因策略太差导致的无效采样。


4.3 Reinforcement Learning:改进的 online policy mirror descent

RL 阶段的目标是:进一步强化任务目标、推理可控性与泛化,同时避免策略更新过猛导致行为崩坏。

其目标函数包含两项:奖励最大化 + 相对熵正则(限制策略漂移)。

max⁡πθ  E[r(x,y,y∗)]  −  τ KL ⁣(πθ  ∥  πθi) \max_{\pi_\theta}\; \mathbb{E}\left[r(x, y, y^*)\right] \;-\; \tau \, KL\!\left(\pi_\theta \;\|\; \pi_{\theta_i}\right) πθmaxE[r(x,y,y)]τKL(πθπθi)

下面逐项解释,并把每个符号说清楚。

4.3.1 第一项:期望奖励最大化
  • xxx:输入(可能包含图像与文本指令)
  • yyy:模型生成的输出
  • y∗y^*y:ground truth
  • r(x,y,y∗)∈{0,1}r(x, y, y^*) \in \{0, 1\}r(x,y,y){0,1}:二元奖励

二元奖励的含义很直接:

  • 生成答案与 y∗y^*y 一致则奖励为 1
  • 否则为 0

案例:数学题 RL 的反馈信号
输入:一道几何题(含图像),模型输出数值答案 yyy

  • yyy 与标准答案 y∗y^*y 相同,r=1r=1r=1
  • 若不相同,r=0r=0r=0
    这类奖励对“最终正确性”非常直接,但也会带来一个典型问题:只看最终对错,容易诱导模型写出更长的推理链去“赌运气”。
4.3.2 第二项:相对熵正则项(KL 约束)
  • πθ\pi_\thetaπθ:当前策略(当前模型)
  • πθi\pi_{\theta_i}πθi:前一轮策略或参考策略(用于限制漂移)
  • τ>0\tau > 0τ>0:正则化强度系数

这一项的目的就是:别让策略更新幅度太大
在大模型 RL 中,如果没有足够的约束,策略可能在少量样本上被过度拉动,导致语言风格崩坏、推理结构变形,甚至出现“奖励黑客”行为。

τ\tauτ 越大,约束越强,模型越保守;τ\tauτ 越小,模型越激进。


5. RL 训练优化技巧:长度惩罚与采样策略

5.1 长度惩罚:抑制 overthinking

大模型推理链越写越长是常见现象:有时长链能提高正确率,但也可能出现“越想越偏”或“用冗长掩盖不确定”的 overthinking。

长度惩罚的目标是:让模型在正确与简洁之间找到平衡,避免无意义的超长推理链。

案例:同一道题的两种输出

  • 输出 A:推理 60 行,包含大量重复检查与无效分支
  • 输出 B:推理 12 行,结构清晰、关键步骤完整
    长度惩罚会倾向于把概率质量从 A 推向 B,尤其当两者都能答对时。

5.2 采样策略:curriculum + prioritized

5.2.1 Curriculum sampling(基于难度标签)

从易到难逐步训练:

  • 先让模型稳定掌握基础推理模式
  • 再逐渐加入更复杂的样本

这能显著减少 RL 早期“全是失败轨迹”的低效探索。

5.2.2 Prioritized sampling(基于实例成功率)

对成功率较低或波动较大的样本提高采样概率,形成更聚焦的训练信号。

案例:

  • 某类 OCR+推理结合题(读出数值再推导)成功率长期偏低
  • prioritized 会更多抽到这类样本,逼迫模型补齐短板

6. 推理特性:标准自回归生成 + 内生性学习能力

尽管做了长上下文与 RL 强化,推理方式仍保持标准自回归生成,但模型在行为层面会呈现出更“内生”的推理习惯:

  • error detection(错误检测):能在中途发现矛盾或读错信息
  • backtracking(回溯修正):能退回到关键分岔点重走推理路径
  • iterative refinement(迭代优化):能对初稿答案做自我审查并改进

案例:视觉读数错误的回溯
问题:图表中某点的数值需要读坐标轴刻度。

  • 模型第一次读成 35,推导后发现与后续条件不一致
  • error detection:识别“不一致”
  • backtracking:回到读数步骤重新读刻度
  • refinement:修正为 30,并重新完成推导

这种行为往往来自 Long-CoT SFT 的策略内化 + RL 的目标强化共同作用。


7. 训练路线总结:为什么这套分阶段设计有效?

把 Kimi-VL 的训练路线压缩成一句话:

先用混合目标把视觉底座“练到能看清与能对齐”,再用联合预训练把多模态与语言能力“拧成一股绳”,再用冷却阶段把能力结构“精炼与去噪”,最后用长上下文激活与后训练把模型推到“可用、可控、可长序列推理”的状态。

对应到四个关键矛盾,这套设计给出了一组稳定解法:

  1. 高分辨率真实场景 vs 训练吞吐与工程复杂度:MoonViT 原生分辨率 + packing
  2. 多模态能力提升 vs 语言能力退化:联合预训练中先语言后多模态、比例渐进
  3. 能力覆盖面扩大 vs 过拟合与噪声:联合冷却的精选与合成策略、QA 占比控制
  4. 长上下文可跑 vs 长上下文可用:RoPE 调整、长短混合数据、needle 测试验证

8. Performance

性能提升通常不是单点带来的,而是“架构选择 + 训练阶段设计 + 后训练策略”叠加的结果:

  • MoonViT 让真实世界输入(OCR、文档、图表)更容易被可靠编码;
  • MoE LLM 提供更强的容量-效率平衡,覆盖更多任务;
  • 长上下文激活与 SFT 保证“能用且好用”;
  • Long-CoT SFT 与 RL 强化推理行为,使模型更擅长复杂任务并更可控。

当你在实际任务中看到这些现象时,往往就能对应回上面的模块与阶段:

  • OCR 更准、图表读数更稳 → 多目标 ViT 训练 + MoonViT 原生分辨率
  • 指令更听话、格式更统一 → ChatML SFT + loss masking
  • 推理更像“先规划再执行” → Long-CoT SFT
  • 正确率上升但不至于输出爆长 → RL + 长度惩罚 + 采样策略
  • 128K 范围能找回关键信息 → 长上下文激活 + needle 验证

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐