一、先想清楚:MiMo 想解决的是什么问题

在聊演进之前,先说我对 MiMo 系列最核心的一条判断:它是一次"以小博大"的推理能力实验。在动辄几百 B 的大模型时代,小米 LLM-Core 团队反其道而行,坚持把主力模型做到 7B 参数量,目标是在数学、代码这类"可验证推理"任务上,让一个能塞进消费级显卡的模型追上更大的通用模型。

为什么选这条路?我的理解有三点:

提示:看一个开源模型系列,别只看榜单分数。参数量 × 部署场景 × 训练路线这三件事的组合,才是模型真正的定位。

二、演进路线:从纯文本到"视觉—语音—具身"

把公开信息串起来,MiMo 的演进大致是先在文本推理上打通闭环,再向模态外扩的节奏。用一个有序列表概括主线:

  1. MiMo-7B 基座与推理版(约 2025 年 4 月):开源 MiMo-7B-Base、MiMo-7B-SFT、MiMo-7B-RL 等权重,主打数学与代码推理,是整个系列的"推理内核"。
  2. MiMo-VL 多模态版(约 2025 年 6 月):把视觉能力接进同一套推理范式,覆盖图文理解、视频、GUI 操作、空间理解等。
  3. MiMo-Audio 语音版(约 2025 年下半年):走生成式语音路线,支持 TTS、零样本音色克隆、语音指令理解,目标是让模型"能听会说"。
  4. 面向具身与全模态的延伸:沿着"大脑 + 多模态感知"继续往机器人、车机等实体场景推进,这部分仍在演进中。

这条路线的价值在于范式共享:RL 的奖励设计、课程学习、推理长度控制在不同模态上都能复用,而不是每个模态从零训一个"专用模型"。这也是我在笔记里最想强调的一点——系列模型的复利来自方法论的可迁移性。

三、预训练的亮点:把"推理能力"喂进基座里

MiMo-7B 的预训练据技术报告用了约 25T tokens 的语料规模,对一个 7B 模型来说相当"超配"。我认为这背后有个明确信号:小模型的能力上限,主要靠数据规模和数据质量托底,参数量不足就用数据量补。

几个我觉得值得记的技术点:

提示:判断一个基座好不好,可以看它在没见过的题型上的表现,而不是训练集里的原题。基座推理能力的真正体现是泛化,不是记忆。

四、后训练的关键:SFT 冷启动 + 规则化 RL

MiMo 的后训练是我认为最值得拆解的部分。整体是"SFT 冷启动 → 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))

工程实践上的几点建议:

提示:推理模型的 temperature 不宜设太高(0.6 左右比较稳),同时记得设 max_new_tokens 上限,防止模型陷入反复自我反思导致输出爆长。

七、我的几点思考与局限

MiMo 系列最让我欣赏的一点是路线自洽:小参数、可验证任务优先、方法论跨模态复用,这三者互相支撑,而不是追热点。对学习者来说,它是研究"如何用 RL 把小模型推理能力榨干"的极佳样本,代码和权重都开源,实验成本也可控。

但也要看清边界:7B 体量决定了它在开放域知识、复杂长链理解、多语言广度上仍会有天花板;推理型模型的输出长度与延迟也会显著高于同参数量的普通模型;多模态版本在细粒度空间推理上的稳定性仍需实测验证。我的用法是:把 MiMo 当作垂域推理专家(数学、代码、结构化逻辑)来用,通用闲聊和知识问答交给更大的模型或 RAG 系统,各司其职效果最好。