一、先想清楚:MiMo 想解决的是什么问题
在聊演进之前,先说我对 MiMo 系列最核心的一条判断:它是一次"以小博大"的推理能力实验。在动辄几百 B 的大模型时代,小米 LLM-Core 团队反其道而行,坚持把主力模型做到 7B 参数量,目标是在数学、代码这类"可验证推理"任务上,让一个能塞进消费级显卡的模型追上更大的通用模型。
为什么选这条路?我的理解有三点:
- 部署成本:7B 模型单卡 24G 就能跑,天然适配手机端、车机、IoT 网关这些小米的主战场,几百 B 的模型在这些场景里根本落不了地。
- 能力边界清晰:数学证明、代码生成、逻辑题的对错是客观可判定的,这正好是
RL能稳定起效的领域,比"写得更像人"这种主观目标好优化得多。 - 生态复用:文本推理是底座,视觉、语音、具身智能都往上叠,等于先修好一条"推理内核"的主线。
提示:看一个开源模型系列,别只看榜单分数。参数量 × 部署场景 × 训练路线这三件事的组合,才是模型真正的定位。
二、演进路线:从纯文本到"视觉—语音—具身"
把公开信息串起来,MiMo 的演进大致是先在文本推理上打通闭环,再向模态外扩的节奏。用一个有序列表概括主线:
- MiMo-7B 基座与推理版(约 2025 年 4 月):开源
MiMo-7B-Base、MiMo-7B-SFT、MiMo-7B-RL等权重,主打数学与代码推理,是整个系列的"推理内核"。 - MiMo-VL 多模态版(约 2025 年 6 月):把视觉能力接进同一套推理范式,覆盖图文理解、视频、GUI 操作、空间理解等。
- MiMo-Audio 语音版(约 2025 年下半年):走生成式语音路线,支持
TTS、零样本音色克隆、语音指令理解,目标是让模型"能听会说"。 - 面向具身与全模态的延伸:沿着"大脑 + 多模态感知"继续往机器人、车机等实体场景推进,这部分仍在演进中。
这条路线的价值在于范式共享:RL 的奖励设计、课程学习、推理长度控制在不同模态上都能复用,而不是每个模态从零训一个"专用模型"。这也是我在笔记里最想强调的一点——系列模型的复利来自方法论的可迁移性。
三、预训练的亮点:把"推理能力"喂进基座里
MiMo-7B 的预训练据技术报告用了约 25T tokens 的语料规模,对一个 7B 模型来说相当"超配"。我认为这背后有个明确信号:小模型的能力上限,主要靠数据规模和数据质量托底,参数量不足就用数据量补。
几个我觉得值得记的技术点:
- 推理数据前置到预训练阶段:大量数学题、代码片段、逻辑推理语料在
pretraining阶段就进入,而不是只靠后训练"外挂"。这让基座本身就有推理的"肌肉记忆"。 - 三维度数据去重:在文档级、段落级等多个粒度做去重,降低语料冗余,把
epoch的有效信息密度提上去。 - 代码与数学的合成数据:用生成/筛选的方式补足长尾推理样本,缓解"难题数据稀缺"的问题。
- 上下文扩展:支持到
32K级别上下文,保证长题干、多轮推导不被截断。
提示:判断一个基座好不好,可以看它在没见过的题型上的表现,而不是训练集里的原题。基座推理能力的真正体现是泛化,不是记忆。
四、后训练的关键:SFT 冷启动 + 规则化 RL
MiMo 的后训练是我认为最值得拆解的部分。整体是"SFT 冷启动 → RL 大幅拉升"的经典配方,但有几个细节比较讲究:
- 规则化奖励(rule-based reward):数学用
\\boxed{}里的答案比对、代码用测试用例通过率来打分,尽量避免用一个"奖励模型"去猜对错,减少奖励作弊(reward hacking)。 - Easy-to-Hard 课程采样:训练早期只喂简单题,随训练推进逐渐提高难度,让模型先学会"稳定得分"再挑战难题。
- RL-Zero 的涌现现象:不做过多 SFT 干预时,模型会自发出现"自我反思""用代码辅助推理"等行为,说明推理模式是 RL 从结果奖励里"逼"出来的,不是人工模板教出来的。
- 工程侧提效:官方提到过
Seamless Rollout这类 RL 训练框架优化,把 rollout 与验证流水并行化,训练效率有明显提升——RL 的瓶颈往往不在算法,而在吞吐。
一个极简的"规则奖励 + 课程采样"示意代码如下(教学伪代码,帮助理解机制):
import re
import random
def extract_boxed(text: str) -> str | None:
"""从模型输出中抽取 \\boxed{} 里的最终答案"""
hits = re.findall(r"\\boxed\{(.+?)\}", text)
return hits[-1].strip() if hits else None
def math_reward(completion: str, ground_truth: str) -> dict:
pred = extract_boxed(completion)
acc = 1.0 if pred and pred.replace(" ", "") == ground_truth.replace(" ", "") else 0.0
fmt = 0.1 if pred else -0.1 # 格式奖励:鼓励规范输出最终答案
return {"reward": acc + fmt, "is_correct": bool(acc)}
def easy_to_hard_sampler(dataset, current_stage: float):
"""课程学习:current_stage 随训练推进从 0.2 提升到 1.0"""
pool = [q for q in dataset if q["difficulty"] <= current_stage]
return random.choice(pool)
提示:做 RL 微调时,先花 80% 的精力写好奖励函数和数据配比,再调算法超参。很多"RL 不收敛"的案例,其实是奖励信号被模型钻了空子。
五、多模态延伸:MiMo-VL 与 MiMo-Audio
MiMo-VL 把视觉接进来后,技术上的关键点是奖励信号不再单一。视觉任务里既有"可验证"的部分(如 GUI 元素定位坐标、OCR 文本比对),也有"偏好型"部分(图文描述是否自然)。据公开介绍,它采用了混合式在线强化学习的思路,把 verifiable reward 和 preference reward 放在同一条 on-policy 流程里优化,并通过动态采样平衡两类样本。我个人认为这是比"两个阶段分别训"更先进的做法:多任务在同一个策略空间里互相纠偏,避免视觉对齐把推理能力冲掉。
MiMo-Audio 则走生成式语音路线,不只是传统 ASR/TTS 管线的拼装,而是让模型直接在语音 token 上做生成,支持零样本音色克隆、语气控制和语音指令跟随。从学习角度,重点看两点:语音离散化表示怎么设计得既能还原音色又保留语义,以及 Chain-of-Thought 能否延伸到音频模态(先"想"后"说")。
提示:多模态模型最常见的翻车模式是模态冲突——接上视觉后数学推理反而变差。训练时要盯着"原能力保持"的指标,而不只是新任务分数。
六、上手实践:如何在本地跑起来
以文本推理版为例,用 transformers 跑通推理非常直接(仓库名以 HuggingFace 上的实际发布为准):
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "XiaomiMiMo/MiMo-7B-RL" # 以 HF 实际仓库名为准
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
trust_remote_code=True,
)
messages = [
{"role": "user", "content": "证明:任意三角形内角和为 180 度,请给出详细推理过程。"}
]
prompt = tokenizer.apply_chat_template(
messages, add_generation_prompt=True, tokenize=False
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
out = model.generate(
**inputs,
max_new_tokens=2048,
temperature=0.6,
top_p=0.95,
do_sample=True,
)
print(tokenizer.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
工程实践上的几点建议:
- 生产环境优先用
vLLM或SGLang起服务,吞吐比transformersgenerate高一个量级。 - 推理型模型输出里往往包含中间思考过程,解析最终答案时用
\\boxed{}或结束标记来截取,别把整段思考当成答案。 - 微调时可以用
LLaMA-Factory、ms-swift这类框架快速接入,重点是控制推理样本与普通问答样本的比例,否则容易把长推理习惯带到所有场景里。
提示:推理模型的temperature不宜设太高(0.6 左右比较稳),同时记得设max_new_tokens上限,防止模型陷入反复自我反思导致输出爆长。
七、我的几点思考与局限
MiMo 系列最让我欣赏的一点是路线自洽:小参数、可验证任务优先、方法论跨模态复用,这三者互相支撑,而不是追热点。对学习者来说,它是研究"如何用 RL 把小模型推理能力榨干"的极佳样本,代码和权重都开源,实验成本也可控。
但也要看清边界:7B 体量决定了它在开放域知识、复杂长链理解、多语言广度上仍会有天花板;推理型模型的输出长度与延迟也会显著高于同参数量的普通模型;多模态版本在细粒度空间推理上的稳定性仍需实测验证。我的用法是:把 MiMo 当作垂域推理专家(数学、代码、结构化逻辑)来用,通用闲聊和知识问答交给更大的模型或 RAG 系统,各司其职效果最好。