MiniMax-M2:Mini 激活、全注意力的开源编码与 Agent 模型

基本信息

字段 内容
标题 The MiniMax-M2 Series: Mini Activations Unleashing Max Real-World Intelligence
作者 / 机构 MiniMax,稀宇科技
发布时间 模型权重 2025-10-27 开源;系列技术报告 2026-05
方向 稀疏 MoE、全注意力、编码与 Agent 后训练
场景 编码、工具调用、多轮 Agent 任务,强调低激活带来的高吞吐与低成本
许可证 MIT,权重开源
arXiv https://arxiv.org/abs/2605.26494

TL;DR:MiniMax-M2 是一个约 230B 总参数、每 token 仅激活约 10B 的稀疏 MoE 模型,定位编码与 Agent 任务。相对前代 M1,它的两点关键变化是:一,把 M1 的混合线性注意力换回所有层都用全注意力;二,把模型做"小激活",用接近小模型的推理成本提供前沿能力。后训练用 SFT 加 CISPO 强化学习,并采用交错思考交互范式。


一、背景与定位:从 M1 的高效注意力到 M2 的取舍

要理解 M2 的设计,先要看它的前身。

  • MiniMax-Text-01,arXiv 2501.08313,是 MiniMax 把**线性注意力(Lightning Attention)**规模化的基础模型:456B 总参数、激活 45.9B,采用混合注意力,原生训练上下文 1M。
  • MiniMax-M1,arXiv 2506.13585,是首个开源的大规模混合注意力推理模型,沿用 Text-01 的骨架:每 7 个使用线性注意力的块后接 1 个 softmax 全注意力块,约 1:7 的比例;原生 1M 上下文。线性注意力把长序列下的计算复杂度从二次降到线性,作者据此论证可以高效地放大测试时计算量——在 64K 生成长度下 FLOPs 不到 DeepSeek-R1 的一半,100K 长度下约为其 25%。M1 还提出了下文要讲的 CISPO 强化学习目标。

到了 M2,定位从"高效长上下文推理"转向"编码与 Agent 的工程落地"。两条主线随之改变:

  1. 注意力机制回退到全注意力。M2 放弃了 Text-01 / M1 一脉的混合线性注意力,所有层改用标准 softmax 全注意力。这一取舍 MiniMax 专门写过说明,见第三节。
  2. 走"小激活"路线。总参数仍在 230B 量级,但每 token 激活参数压到约 10B,使单次推理的算力与延迟接近一个 10B 量级的稠密模型,从而把 Agent 任务里高频、长链路的工具调用成本压下来。官方称其 API 价格约为 Claude Sonnet 的 8%、推理速度约 2 倍。

二、模型架构

2.1 总体:稀疏 MoE 与小激活

M2 是一个 decoder-only 的稀疏 MoE Transformer。技术报告给出的配置:

配置项 数值
总参数 229.9B(约 230B)
每 token 激活参数 9.8B(约 10B)
层数 62
隐藏维度 3072
词表大小 200064
专家数 256 个细粒度专家,每 token 激活 8 个
路由 sigmoid 门控加可学习的专家偏置项
原生上下文 192K tokens

其中各记号含义:总参数指模型全部权重的规模;激活参数指对单个 token 做一次前向时,被路由实际调用的那部分权重的规模;"细粒度专家"指把前馈层切成数量更多、单个更小的专家,再从中选取少数激活,相比少而大的专家能提供更细的组合粒度。

为什么把激活做小,对 Agent 任务尤其重要。 Agent 工作流的特征是多轮、长链路、高频工具调用,单个任务往往要几十次模型往返。推理成本与延迟主要由激活参数量而非总参数量决定,因此"总参数大、激活参数小"的稀疏 MoE 能在保留大模型容量的同时,把每次往返的成本压到接近 10B 稠密模型的水平。这是 M2 命名里"Mini activations"对应的工程动机。

路由用 sigmoid 门控并为每个专家加一个可学习偏置项 bib_i

gi=sigmoid(hei)+big_i = \mathrm{sigmoid}\big(\mathbf{h}^\top \mathbf{e}_i\big) + b_i

其中 h\mathbf{h} 为当前 token 的隐藏表示,ei\mathbf{e}_i 为第 ii 个专家的可学习路由向量,gig_i 为该 token 对第 ii 个专家的门控得分,按得分取 top-8 激活。可学习偏置 bib_i 用于调节各专家被选中的频率以改善负载均衡,这一思路与 DeepSeek 的无辅助损失负载均衡同源,相关讨论见 DeepSeek-V4 架构笔记

为什么用 sigmoid 而不是 softmax 做门控。 传统 MoE 路由对各专家打分后做 softmax 归一化:

gi=exp(si)jexp(sj),igi=1g_i = \frac{\exp(s_i)}{\sum_{j} \exp(s_j)},\qquad \sum_i g_i = 1

其中 si=heis_i=\mathbf{h}^\top\mathbf{e}_i 为第 ii 个专家的路由打分。这里的关键性质是所有门控权重之和恒为 1,由此带来一个零和约束:抬高某个专家的权重,必然压低其余专家的权重,专家之间被迫争夺同一份固定的权重预算。其后果是少数专家容易主导路由、长期占据大部分权重,其余专家得不到充分训练,即表征坍缩;而且专家越多,单个门控权重被归一化压得越小,这一问题在 256 个细粒度专家的设置下尤其突出。

sigmoid 门控对每个专家独立打分,gi=sigmoid(si)(0,1)g_i=\mathrm{sigmoid}(s_i)\in(0,1) 且彼此之间不做归一化耦合,因此去掉了这种零和竞争——每个专家只按自身是否匹配当前 token 独立决定是否被激活,门控幅度也不随专家总数而缩水。NeurIPS 2024 的《Sigmoid Gating is More Sample Efficient than Softmax Gating in Mixture of Experts》2405.13997 对这一对比做了系统分析:softmax 归一化引入了不必要的专家竞争并导致表征坍缩,sigmoid 移除该竞争后,达到同等专家估计误差所需的样本量更少。M2 的 sigmoid 门控加可学习偏置正是这条思路与显式负载均衡的结合。

M2 不设共享专家。 M2 激活的 8 个全部是路由专家,没有 DeepSeek-MoE、DeepSeek-V3 那种对每个 token 常驻激活的共享专家。这一点与前代一致:MiniMax-01 / M1 也是纯路由——32 个专家里取 top-2、用 softmax 门控加 token-drop 容量上限做均衡,同样无共享专家;M2 的改动只在把专家做细到 256、激活 8 个,并把门控换成 sigmoid 加可学习偏置。报告未说明为何不引入共享专家。需要注意的是,后续 M3 一线发生了转向:其 MiniMax Sparse Attention 报告 2606.13392 给出的配置是 128 个路由专家取 top-4、外加 1 个共享专家,是这条谱系首次采用共享专家;不过该数字对应报告中约 109B / 6B 的模型,旗舰 M3 的完整配置以其官方技术报告为准。

2.2 注意力:全注意力加 GQA、RoPE、QK-RMSNorm

M2 所有层都使用标准多头全注意力,配置为分组查询注意力(GQA):48 个 query 头共享 8 个 key-value 头。位置编码用旋转位置编码 RoPE,并对 Q、K 施加 RMSNorm 以稳定大规模训练时的注意力 logit 尺度。

GQA 的作用是压缩 KV cache:让多个 query 头共享同一组 KV 头,把推理时需缓存的 K、V 数量按 query 头与 KV 头之比缩小,这里是 48:8 即 6 倍。对长上下文与高并发 Agent 服务,KV cache 显存往往是瓶颈,GQA 直接缓解这一点。

2.3 多 token 预测 MTP 与投机解码

MTP 是什么。 标准语言模型只预测下一个 token,即 next-token prediction。多 token 预测(MTP, multi-token prediction)让模型在每个位置额外预测随后的 KK 个 token。它有两层用处:训练上提供更密的监督信号,每个位置要为未来 KK 个 token 负责,促使模型提前规划、改善表示与样本效率;推理上,这些额外的预测模块可充当投机解码的草稿来源,无需再单独部署一个草稿模型。

image-20260628183608763

M2 的 MTP 结构。 M2 在主预训练阶段带一个 MTP 模块,即 K=1K=1,沿用 DeepSeek-V3 的设计。与 Meta 早期"多个相互独立的并行头"不同,DeepSeek 式 MTP 是串行模块、保留因果链:第 kk 个 MTP 模块有自己的 Transformer 块,并与主模型共享嵌入层和输出头,在已知到第 i+ki+k 个 token 的前提下预测第 i+k+1i+k+1 个 token。设序列长度为 TT、隐藏维为 dd,对深度 kk

zik=Mk[RMSNorm(hik1);RMSNorm(Emb(ti+k))]\mathbf{z}^{k}_i = M_k\big[\mathrm{RMSNorm}(\mathbf{h}^{k-1}_i)\,;\,\mathrm{RMSNorm}(\mathrm{Emb}(t_{i+k}))\big]

h1:Tkk=TRMk(z1:Tkk),pi+k+1k=Head(hik)\mathbf{h}^{k}_{1:T-k}=\mathrm{TRM}_k\big(\mathbf{z}^{k}_{1:T-k}\big),\qquad p^{k}_{i+k+1}=\mathrm{Head}(\mathbf{h}^{k}_i)

逐符号说明:ii 为 token 位置,kk 为 MTP 深度,TT 为序列长度;hik1Rd\mathbf{h}^{k-1}_i\in\mathbb{R}^{d} 为位置 ii 在深度 k1k-1 的隐藏表示,hi0\mathbf{h}^{0}_i 即主模型在该位置的最终隐藏态;Emb(ti+k)Rd\mathrm{Emb}(t_{i+k})\in\mathbb{R}^{d} 为第 i+ki+k 个 token 的嵌入,嵌入层与主模型共享;[;][\,\cdot\,;\,\cdot\,] 表示沿特征维拼接,得到 2d2d 维;MkRd×2dM_k\in\mathbb{R}^{d\times 2d} 为把拼接结果投回 dd 维的可学习投影;TRMk\mathrm{TRM}_k 为该模块的 Transformer 块;Head\mathrm{Head} 为共享输出头;pi+k+1kp^{k}_{i+k+1} 为对第 i+k+1i+k+1 个 token 的预测分布。

需要分清两类操作:RMSNorm\mathrm{RMSNorm}、拼接、MkM_k 投影都是逐位置做的,zik\mathbf{z}^{k}_i 只由位置 ii 自身算出;只有 TRMk\mathrm{TRM}_k 这一步跨位置——它对整条序列 z1:Tkk\mathbf{z}^{k}_{1:T-k} 做一层带因果自注意力的 Transformer,因此 hik\mathbf{h}^{k}_i 是注意到所有 i\le i 位置后的输出,而非只看 zik\mathbf{z}^{k}_i。下标 1 ⁣: ⁣Tk1\!:\!T-k 表示第 kk 个模块只在位置 11TkT-k 上有监督,再往后没有第 i+k+1i+k+1 个真实 token 可作标签。

输入端喂进去的那个 token 是什么。 公式里的 ti+kt_{i+k} 是第 i+ki+k真实 token,作为输入喂给模块、用来预测第 i+k+1i+k+1 个 token。训练时序列完整、所有未来 token 都已知,因此 ti+kt_{i+k}训练数据里的 ground-truth token,即 teacher forcing,而非模型自己的预测;该位置的监督标签则是真实的 ti+k+1t_{i+k+1},本质仍是一次"向后多预测一个"的交叉熵。推理草拟时没有 ground truth,ti+kt_{i+k} 改用上一步已草拟或已接受的 token,模块据此自回归地往前草拟。MTP 损失与主模型的 next-token 损失一起优化,初始权重 0.3、在衰减阶段退火到 0.1。

为多步投机解码扩展到 K=3。 单个 MTP 模块每步只能草拟 1 个 token。为支持多步投机解码,M2 在继续预训练的衰减阶段把 MTP 从 1 个扩展到 3 个模块,即 K=3K=3,每步可草拟 3 个 token。这些新模块不是随机初始化,而是直接复制主模型权重;训练上先冻结主模型、只训 MTP 模块到其损失稳定,再切换到所有模块联合训练。实验发现如果全程冻结主模型,那么 MTP Module 收敛后的质量会变得更差,比联合训练要差。

怎么当投机解码的草稿。 服务时,KK 个 MTP 模块先廉价地自回归草拟 KK 个 token,主模型再对这 KK 个草稿做一次并行前向验证,按接受/拒绝规则接受最长合规前缀——输出分布与直接从主模型逐字采样完全一致,即无损。由于草稿来自模型自身的 MTP 模块、而非另一个草稿模型,这属于自投机,self-speculation:无需额外部署模型,草稿近乎免费。验证为何"一次前向"就够、以及无损性的完整证明,见 投机采样 / 投机解码笔记

RL 阶段持续共训以保持接受率。 投机解码的加速只取决于草稿的接受率,而强化学习会不断改变策略分布,一个一次性训好的草稿,其接受率会随策略漂移而下降。M2 在 RL 阶段用 top-K KL 散度损失让 MTP 模块与策略持续共训,使草稿始终对齐演化中的策略,从而在整个非平稳的 RL 过程中保持高接受率。

与定位的呼应。 MTP 自投机与约 10B 的小激活叠加,进一步抬高服务吞吐,直接服务于 M2 主打的高频、长链路 Agent 调用。一点方法对比:MTP 草稿与模型联合训练,成本低、且随模型一起演化;而 EAGLE、Medusa 一类的草稿头可在冻结的目标模型激活上单独训练,在不少任务上能取得比联合训练的 MTP 更高的接受率,代价是额外训练。M2 后续的 M2.5 即改用了 EAGLE3 草稿。草稿方法的完整谱系见上面那篇投机解码笔记。


三、核心决策:为什么 M2 回到全注意力

这是 M2 最值得记的一点。MiniMax 此前是线性注意力路线最坚定的推动者之一,M2 却在所有层退回全注意力。官方在《Why Did M2 End Up as a Full Attention Model?》里给出了理由,可归纳为质量、工程、评测三层。

3.1 高效注意力与 sub-quadratic 注意力

"高效注意力"是对一类机制的统称,它们把标准注意力在序列长度 nn 上的复杂度压到 O(n2)O(n^2) 以下,因此也叫 sub-quadratic(次二次)注意力。要理解 M2 放弃了什么,先要看清这类方法是什么、用什么换来加速。下面按"标准注意力为何二次 → MiniMax 此前用的 Lightning Attention → 其它 sub-quadratic 路线"展开。

3.1.1 标准注意力为何是二次的

标准 softmax 注意力为:

Attention(Q,K,V)=softmax ⁣(QKd)V\mathrm{Attention}(Q,K,V)=\mathrm{softmax}\!\left(\frac{QK^\top}{\sqrt{d}}\right)V

其中 Q,K,VRn×dQ,K,V\in\mathbb{R}^{n\times d} 分别为 query、key、value 矩阵,nn 为序列长度,dd 为单个注意力头的维度。瓶颈在 QKQK^\top:它是一个 n×nn\times n 矩阵,需要 O(n2d)O(n^2 d) 的计算与 O(n2)O(n^2) 的显存,序列翻倍则开销翻四倍。softmax 必须作用在这张完整的 n×nn\times n 矩阵上,因此无法调换矩阵相乘的顺序,这正是二次复杂度难以绕开的根源。

需要澄清一点:FlashAttention 通过分块计算把 n×nn\times n 矩阵的显存降到 O(n)O(n),但它是精确算法,计算量仍是 O(n2d)O(n^2 d),只是更省显存、更 IO 友好,并不属于 sub-quadratic。

3.1.2 线性注意力:MiniMax 此前采用的 Lightning Attention

右乘核技巧。 线性注意力用一个特征映射 ϕ()\phi(\cdot) 代替 softmax,把注意力权重近似成 ϕ(q)ϕ(k)\phi(q)^\top\phi(k),于是可以利用矩阵乘法的结合律调换计算顺序。以 TransNormer 的 NormAttention 为例。TransNormer 是 OpenNLPLab 的 Zhen Qin 等提出的线性注意力架构 2210.10340,也是 MiniMax 这条线性注意力的源头;NormAttention 是其核心算子——去掉作用在注意力矩阵上的 softmax 归一化,改在注意力层之后附加一个普通归一化层 Norm()\mathrm{Norm}(\cdot),以此避免线性注意力里梯度无界的问题:

O=Norm((QK)V)   结合律   O=Norm(Q(KV))O=\mathrm{Norm}\big((QK^\top)V\big)\;\xrightarrow{\ \text{结合律}\ }\;O=\mathrm{Norm}\big(Q(K^\top V)\big)

关键在右式:先算 KVK^\top V,得到一个只有 d×dd\times d 的矩阵,再用 QQ 去乘它。由于 dnd\ll n,整体计算量从 O(n2d)O(n^2 d) 降到 O(nd2)O(n d^2),对序列长度线性。MiniMax-01 在投影后还加了 SiLU 激活与门控,此处为讲清主干略去。

计算上只差 softmax。 对照上面两式,全注意力与线性注意力在公式上的唯一区别,就是作用在 QKQK^\top 上的 softmax 被换成了可分解的形式。差别看似只有一处,却同时决定了三件事,前面对比表里的差距都是它的连锁反应。根源在于能不能把 query 提到求和号外面:全注意力的权重 asj=exp(qskj)jexp(qskj)a_{sj}=\dfrac{\exp(q_s k_j^\top)}{\sum_{j'}\exp(q_s k_{j'}^\top)} 里,exp\expqsq_skjk_j 缠在一起、提不出来;换成双线性内积 asjϕ(qs)ϕ(kj)a_{sj}\propto\phi(q_s)\phi(k_j)^\top 后,qsq_s 能提到求和号外,jϕ(kj)vj\sum_j\phi(k_j)^\top v_j 对所有位置只算一次,历史就坍缩成一个可复用的定长状态。由此一处牵动三处:

  • 可分解性 → 复杂度。 softmax 不可分解,被迫 O(n2d)O(n^2 d);去掉后可重排为 O(nd2)O(nd^2)
  • 记忆形态 → 显存。 前者保留 n×nn\times n 的全部两两关系,KV cache 随上下文增长;后者压成 d×dd\times d 的定长状态。
  • 选择尖锐度 → 检索。 softmax 能把权重压到某一个远处 token 上做精确检索召回,定长状态只能给出秩受限的汇总、难以无损取回特定信息。

image-20260629000042805

可见线性注意力并非做了大量改动,只动了 softmax 这一处;但这一处影响了复杂度、显存与检索能力,这也是 3.5 节"差别归于记忆存法"的更底层来由。

自回归下的难点是 cumsum。 上一段的右乘形式之所以能并行,是因为 KV=jϕ(kj)vjK^\top V=\sum_j \phi(k_j)v_j^\top 是一个对所有位置全局共享d×dd\times d 矩阵,算一次即可。但因果自回归要求位置 tt 只能注意 jtj\le t、看不见未来,这个汇总矩阵于是不再共享——每个位置都有自己的前缀和:

St=St1+ϕ(kt)vt,Ot=Norm(ϕ(qt)St)S_t=S_{t-1}+\phi(k_t)\,v_t^\top,\qquad O_t=\mathrm{Norm}\big(\phi(q_t)^\top S_t\big)

其中 StRd×dS_t\in\mathbb{R}^{d\times d} 是到第 tt 个 token 为止累积的 key-value 状态,kt,vtk_t,v_t 为第 tt 个位置的 key、value 向量。S1,,SnS_1,\dots,S_n 沿序列逐位置累加,这一串累积就是 cumsum,即前缀和。

由此产生一个两难:并行与线性不可兼得。 因果线性注意力只有两种实现方式:

  • 左乘,可并行但 O(n2)O(n^2) 显式构造 n×nn\times n 矩阵 A=(QK)MA=(QK^\top)\odot M,其中 MM 为因果掩码,再算 AVAV。这把 cumsum 摊平成一次大矩阵乘法、可在 GPU 上并行,但要算出整张 n×nn\times n 矩阵,复杂度回到 O(n2d)O(n^2 d),等于又放弃了线性注意力省下的复杂度。朴素实现的线性注意力即受限于此。
  • 右乘,O(n)O(n) 但串行。 按上面的递推维护状态,形式上类似 RNN:计算量 O(nd2)O(nd^2)、状态恒为 O(d2)O(d^2) 且与序列长度无关,是真正的线性;但递推天生串行——要算 StS_t 必须先有 St1S_{t-1}nn 个位置只能依次处理。

为什么串行 cumsum 在 GPU 上慢。 GPU 的高吞吐来自大块矩阵乘法把张量核算力占满,此时瓶颈在算力本身,即 compute-bound。串行 cumsum 恰好相反:每一步只做一个 d×dd\times d 外积加到状态、再做一次向量乘矩阵,都是小操作,每搬一份数据只配少量浮点运算,瓶颈落在反复读写那个 d×dd\times d 状态上,即受显存带宽约束的 memory-bound;加上第 tt 步依赖第 t1t-1 步、无法重叠,大量并行算力闲置。对照之下,softmax 注意力的 FlashAttention 做的是大块 QKQK^\topAVAV 矩阵乘法,可并行、能占满 GPU,因此即便复杂度是 O(n2)O(n^2),实际耗时反而更短。这正是线性注意力"理论线性、实际不快"的症结,也是第 3.3 节"训练时也 memory-bound"的来源——Lightning Attention 的分块正是为破解这个两难而设计,见下一段。

Lightning Attention 用分块兑现线性复杂度。 Lightning Attention 是这条架构的 IO 感知实现,由 TransNormerLLM 2307.14995 提出、并在 Lightning Attention-2 2401.04658 给出兑现理论复杂度的分块算法。核心是把"块内并行 + 块间递推"结合:块内用左乘、规模小到 O(n2)O(n^2) 不要紧,块间用右乘、只传一个 d×dd\times d 状态。下面逐式推导。

起点:带衰减的因果线性注意力。 引入衰减率 λ(0,1)\lambda\in(0,1),位置 ss 的输出对所有历史位置 jsj\le s 按距离打衰减:

os=jsλsj(qskj)vj=qs(jsλsjkjvjd×d)o_s=\sum_{j\le s}\lambda^{\,s-j}\,(q_s k_j^\top)\,v_j =q_s\Big(\underbrace{\textstyle\sum_{j\le s}\lambda^{\,s-j}\,k_j^\top v_j}_{d\times d}\Big)

其中 qs,kj,vjR1×dq_s,k_j,v_j\in\mathbb{R}^{1\times d} 为位置 s,js,j 的 query/key/value 行向量,qskjq_s k_j^\top 是一个标量注意力权重,kjvjRd×dk_j^\top v_j\in\mathbb{R}^{d\times d} 是外积,λsj\lambda^{\,s-j} 让越远的历史权重越小。右式把求和先收成一个 d×dd\times d 矩阵,正是右乘核技巧。

分块。 把序列切成 T=n/BT=n/B 个大小为 BB 的块。设位置 ss 落在第 ii 块、块内局部下标为 rrs=(i1)B+rs=(i-1)B+r。把历史 jsj\le s 拆成之前所有块本块之内两段:

os=j(i1)Bλsj(qskj)vj前序块+(i1)B<jsλsj(qskj)vj本块o_s=\underbrace{\sum_{j\le (i-1)B}\lambda^{\,s-j}(q_sk_j^\top)v_j}_{\text{前序块}} +\underbrace{\sum_{(i-1)B<j\le s}\lambda^{\,s-j}(q_sk_j^\top)v_j}_{\text{本块}}

前一项对应 OinterO_{\text{inter}},后一项对应 OintraO_{\text{intra}},下面分别化简。

image-20260628180033561

块间项:用一个 d×dd\times d 状态概括历史。 用单个符号 SS 记跨块的 key-value 状态矩阵,与朴素递推里的状态 StS_t 同类,这里按块号作下标。定义

Si1=j(i1)Bλ(i1)Bjkjvj Rd×d,S0=0,S_{i-1}=\sum_{j\le (i-1)B}\lambda^{\,(i-1)B-j}\,k_j^\top v_j\ \in\mathbb{R}^{d\times d},\qquad S_{0}=0,

即把之前所有块的 key-value 外积按“衰减到第 ii 块左边界”累积成一个 d×dd\times d 矩阵 (参考上图理解)。注意 λsj=λrλ(i1)Bj\lambda^{\,s-j}=\lambda^{r}\cdot\lambda^{\,(i-1)B-j},因为 s(i1)B=rs-(i-1)B=r,于是块间项可把与 jj 无关的 λr\lambda^r 提到求和外:

osinter=λrqsSi1.o_s^{\text{inter}}=\lambda^{r}\,q_s\,S_{i-1}.

把本块 BB 个位置堆成 QiRB×dQ_i\in\mathbb{R}^{B\times d},逐行乘 Si1S_{i-1}QiSi1Q_i\,S_{i-1},再给第 rr 行补上 λr\lambda^r——这正是左乘对角阵 Λ=diag{λ,λ2,,λB}\Lambda=\mathrm{diag}\{\lambda,\lambda^2,\dots,\lambda^B\}

Ointer=ΛQiSi1.O_{\text{inter}}=\Lambda\,Q_i\,S_{i-1}.

块内项:用左乘精确算。 本块内的 jj 也用局部下标 cc,则 λsj=λrc\lambda^{\,s-j}=\lambda^{\,r-c},本块的 key、value 矩阵记 Ki,ViRB×dK_i,V_i\in\mathbb{R}^{B\times d},块内项写成矩阵形式是

orintra=crλrc(qrkc)vc    Ointra=[(QiKi)M]Vi,o_r^{\text{intra}}=\sum_{c\le r}\lambda^{\,r-c}(q_r k_c^\top)v_c \;\Longrightarrow\; O_{\text{intra}}=\big[(Q_iK_i^\top)\odot M\big]V_i,

其中 MRB×BM\in\mathbb{R}^{B\times B} 是块内的衰减因果掩码,Mrc=λrcM_{rc}=\lambda^{\,r-c}rcr\ge c、否则为 0。这一步显式算出 B×BB\times BQiKiQ_iK_i^\top,但 BB 很小,O(B2d)O(B^2d) 可接受。本块输出即两段相加 Oi=Ointra+OinterO_i=O_{\text{intra}}+O_{\text{inter}}

更新状态,传给下一块。 算完第 ii 块后,把状态从"衰减到第 ii 块左边界"推进到"衰减到第 i+1i+1 块左边界":

Si=λBSi1+(λBΛ1Ki)Vi.S_i=\lambda^{B}\,S_{i-1}+\big(\lambda^{B}\Lambda^{-1}K_i\big)^\top V_i.

第一项 λBSi1\lambda^{B}S_{i-1} 把旧状态从第 ii 块左边界再推 BB 步到右边界;第二项加入本块贡献——对本块局部下标 cc(Λ1)cc=λc(\Lambda^{-1})_{cc}=\lambda^{-c},故 λBΛ1\lambda^{B}\Lambda^{-1}cc 行的权重是 λBc\lambda^{\,B-c},恰是该位置到本块右边界的衰减。于是 SiS_i 又成为"衰减到下一块左边界的完整历史",与块间项对 Si1S_{i-1} 的用法自洽。实现上 SS 是一个逐块更新、就地覆盖的 d×dd\times d 状态,Si1S_{i-1} 即进入第 ii 块时它的取值。

为什么这就线性又能并行。 每块开销为块内 O(B2d)O(B^2d)、块间与状态更新 O(Bd2)O(Bd^2)T=n/BT=n/B 块累加得 O(nBd+nd2)O(nBd+nd^2),取 BdB\sim d 即整体 O(nd2)O(nd^2),对 nn 线性。同时块内全是可并行的矩阵乘法,唯一串行的只是 Si1SiS_{i-1}\to S_i 这条跨块递推,而块数 n/Bn/B 远小于 nn,串行链被缩短了约 BB 倍——这就是它既保住线性复杂度、又能在 GPU 上跑满的原因,破解了上面"并行与线性不可兼得"的两难。

为什么做成混合而不是纯线性。 MiniMax-01 的消融指出,纯 Lightning Attention 在检索类任务上明显偏弱、不适合直接作为大模型骨架;与 softmax 全注意力混合后,检索与外推能力可追平甚至超过纯 softmax。因此 Text-01 与 M1 采用混合结构:每 7 个 Lightning Attention 块接 1 个 softmax 全注意力块,即每 8 层有 1 层全注意力。这条"纯线性弱在检索"的观察,正是第三节 M2 弃用高效注意力时反复出现的检索头问题的前身。

3.1.3 其它 sub-quadratic 路线

除线性注意力外,把复杂度压到 O(n2)O(n^2) 以下还有几条主流路线:

  • 稀疏 / 窗口注意力,约 O(nw)O(nw)。每个 token 只注意一个子集而非全部历史。滑动窗口注意力让每个 token 只看最近 ww 个 token,ww 固定时开销随 nn 线性;Longformer 2004.05150、Mistral 用此式,BigBird 2007.14062 在局部窗口外再加少量全局 token 与随机连接。M2 试过的混合滑动窗口注意力即属此类,问题见 3.2。
  • 低秩近似,约 O(nk)O(nk)。假设 n×nn\times n 注意力矩阵近似低秩,沿序列维把 K,VK,V 投影到更低的 knk\ll n 维再算注意力。Linformer 2006.04768 是代表,kk 为投影维度。
  • 状态空间模型与显式衰减递推,O(n)O(n)。用一个固定大小的状态沿序列递推,结构上与线性注意力同源。RetNet 2307.08621 用带衰减的 retention,可在并行训练与递推推理两种形式间切换;Mamba 2312.00752 用输入相关的选择性状态空间;RWKV 2305.13048 把 RNN 与注意力结合。
  • 核近似 softmax,O(n)O(n)。Performer 2009.14794 用随机特征把 softmax 核近似成可线性化的内积,从而在不显式构造 n×nn\times n 矩阵的前提下逼近标准注意力;最早把自注意力写成核特征映射并据此线性化的工作是 Katharopoulos 等的线性 Transformer 2006.16236

这些方法的共同点是用某种压缩绕开 n×nn\times n 的全量两两交互:线性注意力与状态空间模型把历史压成定长状态,窗口 / 稀疏注意力丢弃远处 token,低秩方法用低秩矩阵近似整张注意力图。它们在长上下文、长生成上承诺可观的算力与显存节省,但被压掉的那部分交互,正是下面几节 MiniMax 发现的质量代价的来源。

3.2 实验效果劣化

放大规模后,问题暴露出来:

  • 多跳推理能力下降。在 MMLU、BBH、MATH、LongBench 等常规基准上,混合线性注意力与全注意力看起来相当;但放大规模后,混合模型在复杂的多跳推理任务上出现明显缺口——即把一篇长文档里分散的若干线索串联起来的能力变差。团队为此造了代理指标来监控,但坦言无法确定该代理指标在更大规模下是否仍与真实下游表现相关,也无法排除其它隐藏弱点。
  • 滑动窗口注意力随上下文变长而退化。滑动窗口注意力让每个 token 只注意最近的固定窗口 WW 个 token,把单 token 的注意力开销从 O(n)O(n) 降到 O(W)O(W),KV cache 也被钉在窗口大小、不随上下文增长。团队把它与全注意力混用,试了两种方案:层间混合,即部分层用滑动窗口、其余层保留全注意力;层内混合,即同一层里部分注意力头用滑动窗口、其余头用全注意力。团队更倾向层内混合,理由是负载均衡——层间混合会让各层的计算强度差异过大,给训练的流水线并行与推理时的 attention-FFN 分离切分带来困难,层内混合则让每层计算强度趋于一致、更易部署。但即便用继续预训练把已有模型迁移数百 B 乃至上万亿 token,两种方案的性能仍随上下文长度增长而明显下降,在 Agent 任务上表现很差。这对 Agent 不可接受,因为其上下文随轮次单调增长,会持续触发这一退化。
  • 关键注意力模式在预训练早期就定型,事后难以改动。滑动窗口退化的根源在于两类负责远距离信息传递的注意力头:**检索头(retrieval head)**专门从上文远处取回相关信息;**归纳头(induction head)**实现"此前出现 A 后接 B、再遇到 A 即预测 B"的模式补全,是上下文学习的基础机制。二者都依赖跨越远距离的注意力,恰被滑动窗口的有限窗口切断。团队发现这些全局注意力模式在预训练早期就已形成,之后用继续预训练几乎无法调整。一个自然的补救是先用数据探针定位这些头、令其保持全注意力,其余头才用滑动窗口;但靠人的先验难以找全,漏掉关键头则长程能力显著下降。团队还特别指出,该缺陷与 attention sink 无关。这也解释了为什么"先按高效注意力训练、再事后补救"的路线整体难以奏效——缺陷在预训练早期即被锁定。

3.3 工程不成熟

即便质量可接受,线性注意力当前的工程生态也还不成熟:

  • 训练阶段常常受显存带宽约束。许多线性注意力实现即便在训练时也是 memory-bound,即瓶颈在显存读写而非算力,导致 GPU 算力用不满,理论上省下的计算并未兑现为真实加速。
  • 低精度状态敏感。线性注意力对数值精度比全注意力敏感得多,而其状态又倾向于低精度存储,二者矛盾。
  • 与现有推理优化不兼容。前缀缓存(prefix caching)在真实多轮对话里难以套用;投机解码的优化也尚无定论。这些都是全注意力已经成熟、线性注意力仍待补齐的能力。
  • 交叉点偏短。线性注意力相对全注意力变得更省的"交叉点"只在几千 token 量级,对当下动辄上百 K 上下文的大模型而言并不算长,省下的相对收益有限。

3.4 评测难度大

最底层的困难在评测本身:团队无法可靠地测出高效注意力到底损失了多少质量,因而也无法为它的计算收益去承担这份难以量化的质量风险。具体有四点:

  • 基准给出"看似持平"的信号。混合线性注意力在 MMLU、BBH、MATH、LongBench 等标准基准上看起来与全注意力相当,缺口只在放大规模后的复杂多跳推理上才显现。基准是对真实能力的有损抽象,并未覆盖高效注意力真正会退化的场景,因此"分数持平"不能推出"能力持平"。
  • 模型越强越难评测。越接近前沿水平,标准基准越快饱和、失去区分度,越无法用来指导架构选择;而最需要鉴别信号的地方,恰恰是现有基准最无力的地方。
  • 自造代理指标也补不上缺口。团队针对多跳缺陷构造了专门的代理指标,并迭代到混合模型在该指标上追平全注意力;但无法确认这一代理指标在更大规模下是否仍与真实下游表现相关,也无法排除其它尚未发现的弱点。
  • 获取可信信号的成本急剧上升。要在指标上得到统计显著的结果,所需实验算力随规模快速增长。其矛盾在于:研究高效注意力本是为了节省算力,而可靠验证它是否有效却要先付出大量算力。

这几点合起来构成一个决策困境:质量代价测不准,架构又是早期就要确定、事后极难推翻的选择,于是守住已知可靠的全注意力成为更稳妥的选项。第 3.2 节的多跳推理缺口,正是被常规基准漏掉、放大后才暴露的实例。

3.5 线性注意力与全注意力的差别

维度 全注意力 线性注意力
历史的存法 保留每个历史 token 的 K、V,即 KV cache,无损 压进一个固定大小的状态 SRd×dS\in\mathbb{R}^{d\times d},有损汇总
记忆能否寻址 能——任意两 token 一步精确交互 不能——只能读到状态的汇总,无法精确拎出某个特定远处 token
计算复杂度 O(n2d)O(n^2 d) O(nd2)O(nd^2),与 nn 线性
推理状态 / 显存 KV cache 随上下文线性增长 状态恒为 O(d2)O(d^2),与上下文长度无关
精确检索 / 多跳推理 弱:定长状态难以无损保留并取回特定信息
长上下文计算成本 高,随 nn 二次增长 低,随 nn 线性
训练算力利用 大矩阵乘,compute-bound、易占满 GPU 易 memory-bound,除非如 Lightning 分块
推理优化生态 成熟:FlashAttention、前缀缓存、投机解码 不成熟:低精度敏感、前缀缓存难套
  1. "记忆"的存法不同。 全注意力把每个历史 token 的 K、V 原样留着,即 KV cache,新 token 来了就和全部历史逐一精确比对——历史是一份无损、可逐条寻址的记录,代价是它随上下文线性增长、两两比对是 O(n2)O(n^2)。线性注意力则把历史压进一个固定大小的状态 SS,见 3.1.2 的递推 St=St1+ϕ(kt)vtS_t=S_{t-1}+\phi(k_t)v_t^\top:无论上下文多长,记忆都只有 d×dd\times d 这么大——好处是计算与显存都不随 nn 增长,代价是这种压缩有损,且单个 token 只能读到状态的汇总,无法再精确地把某个特定远处 token 单独取回。

  2. 能力差由此而来。 检索、多跳推理这类任务,本质是"从很远处精确取回某条信息并串联"。全注意力的检索头、归纳头能直接寻址到那个远处位置;线性注意力的定长状态把信息混在一起,越久远越难无损取回——这正是 3.2 里多跳缺口、长上下文退化的根因。换言之,线性注意力省下的复杂度,是用记忆的可寻址性换来的。

  3. 成本差也由此而来。 定长状态让线性注意力在理论上对长序列更省,即上面的 O(nd2)O(nd^2)O(n2d)O(n^2 d),但能否兑现为真实加速取决于工程:朴素递推串行、memory-bound,要靠 Lightning 那样的分块才跑得动;而全注意力一侧,FlashAttention、前缀缓存、投机解码都已成熟,见 3.3。

  4. 概括而言。 全注意力是用算力和显存换一份无损、可寻址的全历史记忆;线性注意力是用一份有损、定长的压缩记忆换长度上的可扩展性。M2 的判断是:在生产级的复杂推理与 Agent 任务上,前者那份"可寻址记忆"目前仍不可替代,因此退回全注意力。

3.6 结论

MiniMax 的结论不是"高效注意力没用",而是当前在评测范式、工程基建、高质量长上下文数据三方面都还不成熟,不足以让人为它的计算收益去承担质量风险。团队同时认为,随着 GPU 算力增速放缓而数据长度持续增长,高效注意力终将成为必需,因此在长上下文数据、评测范式与训练基建上持续投入以备这一转变。MiniMax 后续放出的 M3 预览正是重新引入了一种稀疏注意力机制,可视为这一判断的延续。


四、训练 (粗看)

4.1 预训练

技术报告给出的预训练规模为 29.2T tokens,分两个阶段:恒定学习率阶段 19.9T,衰减阶段 9.3T。

数据。 语料涵盖网页文档、学术文献、书籍、代码与问答内容,并显著上采样代码、数学与 STEM 等高价值领域,其余为通用网页、书籍等。质量控制上,用基于模型的打分与多维度分类器评估文档质量,再以平衡采样上调高质量内容、同时保留类别多样性。上下文窗口按 8K → 32K → 192K 渐进扩展,即先在短上下文上训练、再逐步拉长,以较低成本获得长上下文能力;长上下文数据来自高质量代码拼接、天然长篇 PDF 与同主题文档打包,衰减阶段则混入高质量数据巩固能力、同时延展有效上下文。

4.2 后训练:SFT 加 CISPO 强化学习

后训练分两步:先用带交错思考轨迹的数据做监督微调 SFT,让模型学会"思考与工具调用交替"的输出格式;再用强化学习进一步优化。强化学习算法沿用 M1 提出的 CISPO

4.2.1 CISPO:裁剪重要性采样权重,而非裁剪 token 更新

image-20260628185100669

CISPO 全称 Clipped Importance Sampling Policy Optimization,出自 M1 论文。它要解决的是 PPO、GRPO 这类带裁剪的策略梯度方法的一个副作用:当某个 token 的重要性采样比落到信任域之外时,裁剪会让这个 token 的梯度变为零,于是它对本次更新完全没有贡献。问题在于,一些低概率但对推理至关重要的 token,例如表示转折或自我检查的"However"“Recheck”,恰恰容易触发裁剪而被丢弃。

PPO/GRPO 的裁剪在 $\min $ 内部:

LGRPO=E[min(rtA^t, clip(rt,1ϵ,1+ϵ)A^t)]\mathcal{L}^{\text{GRPO}} = -\mathbb{E}\Big[\min\big(r_t \hat{A}_t,\ \text{clip}(r_t, 1-\epsilon, 1+\epsilon)\,\hat{A}_t\big)\Big]

CISPO 的做法是只裁剪重要性采样权重本身,并对它施加停止梯度,让梯度始终从 logπθ\log\pi_\theta 项流出,从而保证所有 token 都贡献梯度。其目标函数为:

JCISPO(θ)=E ⁣[1ioiitsg ⁣(r^i,t(θ))A^i,tlogπθ(oi,tq,oi,<t)]J_{\text{CISPO}}(\theta) = \mathbb{E}\!\left[\frac{1}{\sum_i |o_i|}\sum_i \sum_t \mathrm{sg}\!\big(\hat r_{i,t}(\theta)\big)\,\hat A_{i,t}\,\log \pi_\theta\big(o_{i,t}\mid q, o_{i,<t}\big)\right]

逐符号说明:

  • qq 为从数据分布中采样的查询,对每个 qq 用旧策略 πθold\pi_{\theta_{\text{old}}} 采样一组回答 {oi}\{o_i\}
  • oi,to_{i,t} 为第 ii 条回答的第 tt 个 token,oi,<to_{i,<t} 为其前缀,oi|o_i| 为该回答的 token 数,1ioi\frac{1}{\sum_i|o_i|} 把整组 token 的损失做归一化;
  • πθ\pi_\theta 为当前策略,πθold\pi_{\theta_{\text{old}}} 为产生这批 rollout 的行为策略;
  • ri,t(θ)=πθ(oi,tq,oi,<t)πθold(oi,tq,oi,<t)r_{i,t}(\theta)=\dfrac{\pi_\theta(o_{i,t}\mid q,o_{i,<t})}{\pi_{\theta_{\text{old}}}(o_{i,t}\mid q,o_{i,<t})} 为重要性采样比;
  • r^i,t(θ)=clip(ri,t(θ),1εlowIS,1+εhighIS)\hat r_{i,t}(\theta)=\mathrm{clip}\big(r_{i,t}(\theta),\,1-\varepsilon^{\text{IS}}_{\text{low}},\,1+\varepsilon^{\text{IS}}_{\text{high}}\big) 为裁剪后的重要性采样权重,εlowIS\varepsilon^{\text{IS}}_{\text{low}}εhighIS\varepsilon^{\text{IS}}_{\text{high}} 为裁剪上下界;
  • sg()\mathrm{sg}(\cdot) 为停止梯度,把裁剪后的权重当作常数系数,不参与反向传播;
  • A^i,t\hat A_{i,t} 为优势估计,按同一查询下这组回答的相对得分归一化得到。

与 PPO、GRPO 的对照可以这样看:后者把比值 rr 直接写进目标并取 min\min,当 rr 越界时 min\min 选中被裁剪的那一支,其对 θ\theta 的梯度为零,该 token 被静默丢弃;CISPO 则始终保留 logπθ\log\pi_\theta 作为梯度载体,只用被停止梯度的 r^\hat r 去缩放它的幅度,因此每个 token 都参与更新,区别只在权重大小。M1 论文报告,在 AIME 上 CISPO 的收敛速度约为 DAPO 的两倍;得益于此与混合注意力,M1 的全套 RL 训练在 512 张 H800 上三周内完成,租用成本约 53.47 万美元。

4.3 后训练数据与 RL 基建

技术报告把后训练数据分为编码、Agent 协作、推理与知识、通用与角色扮演等管线。编码用从 GitHub PR 构造的可执行 Docker 环境与任务专属可验证奖励,例如 fail-to-pass / pass-to-pass 测试,覆盖 10 余种编程语言。RL 训练由名为 Forge 的系统承载,其报告的工程点包括把白盒与黑盒 Agent 统一进同一训练回路、用窗口化 FIFO 调度应对轨迹长度方差、用前缀树合并提速、prefill 与 decode 异构分离,以及全局 L3 KV 缓存池。


五、交互范式:交错思考

M2 是交错思考(interleaved thinking)模型,每次回复都包含被 <think>...</think> 包裹的思考内容,并在思考与工具调用之间交替,形成"计划—执行—反思"的多轮循环。

需要特别注意一条工程约定:官方要求在对话历史中保留这些 <think> 段落,并明确警告删除它们会显著降低多步推理与工具调用的表现。这与一些把思考内容在轮次间丢弃的做法相反——M2 把跨轮的推理状态视为后续步骤的依赖,删除等于切断了上下文。这一交互形态与 Claude Sonnet 4.5 一类的交错思考模型同属一路。


六、实验

下表为 M2 基础模型在编码、Agent 与通用智能基准上的结果,与 Claude Sonnet 4.5、Gemini 2.5 Pro 对照;每行在所列对比项中的最优值加粗。带 * 的数字为对应来源报告或 MiniMax 复现值。

编码与 Agent

基准 MiniMax-M2 Claude Sonnet 4.5 Gemini 2.5 Pro
SWE-bench Verified 69.4 77.2^* 63.8^*
Multi-SWE-Bench 36.2 44.3
Terminal-Bench 46.3 50^* 25.3^*
ArtifactsBench 66.8 61.5 57.7^*
BrowseComp 44 19.6 9.9
GAIA 纯文本 75.7 71.2 60.2

通用智能

基准 MiniMax-M2 Claude Sonnet 4.5 Gemini 2.5 Pro
AIME25 78 88 88
MMLU-Pro 82 88 86
GPQA-Diamond 78 83 84
LiveCodeBench 83 71 80
AA Intelligence 61 63 60

实验发现

  • M2 的相对优势集中在检索式与浏览式 Agent 任务上。BrowseComp 44 对 19.6 与 9.9、GAIA 纯文本 75.7 对 71.2 与 60.2,差距明显;ArtifactsBench、LiveCodeBench 也领先。
  • 纯推理与知识类基准上 M2 落后于 Claude Sonnet 4.5:AIME25 78 对 88、MMLU-Pro 82 对 88、GPQA-Diamond 78 对 83。这与其定位一致——M2 优先编码与 Agent 落地,而非刷高纯推理分数。
  • 结合约 10B 的激活与官方称约 8% 价格、约 2 倍速度的成本结构,M2 的卖点是在编码与 Agent 任务上以远低的单位成本逼近前沿闭源模型,而非在所有维度上超越它们。

需要区分版本口径:上表是 M2 基础模型。系列技术报告还覆盖 M2.7 等更新版本,并引入了"自演化"机制——通过模型迭代系统自主调试训练运行、修改自身 Agent 脚手架;报告称其 100 轮迭代带来约 30% 的性能提升,对应的基准数字也更高,例如 AIME 2026 报到 94.2、GPQA-Diamond 89.8。这些属于后续版本,不应与基础 M2 混为一谈。


七、讨论与总结

M2 的核心贡献不是某个新算法,而是一组面向工程落地的取舍:

  1. 以"小激活"换服务经济性。在 230B 总参数下把激活压到约 10B,针对 Agent 多轮高频调用的成本结构做优化,而非单纯追求基准分数。
  2. 以全注意力换可靠性。在自家最熟悉的线性注意力路线上做了充分实验后仍选择退回全注意力,并公开了质量、工程、评测三层理由。这条结论的价值在于:它把"高效注意力在生产级复杂任务上尚不能稳定匹敌全注意力"这一判断,用一手实验和明确的失败模式记录了下来。
  3. 后训练面向 Agent。SFT 用交错思考轨迹、RL 用 CISPO 并配套可执行环境与可验证奖励,把"思考—工具—反思"的多轮能力作为优化目标。

诚实的局限:本笔记基于系列技术报告与官方说明,部分内部细节例如各数据管线的具体配比、Forge 的实现细节,报告披露有限,未及细读;纯推理基准上的落后也说明 M2 不是全能选手。


相关论文清单

论文 / 来源 时间 链接 一句话核心
The MiniMax-M2 Series 2026-05 2605.26494 230B / 10B 激活,全注意力,编码与 Agent;含 M2.7
Why Did M2 End Up as a Full Attention Model? 2025-10 HF 博客 官方说明放弃高效注意力的质量、工程、评测三层理由
MiniMax-M1 2025-06 2506.13585 混合线性注意力推理模型,原生 1M 上下文,提出 CISPO
MiniMax-01 / Text-01 2025-01 2501.08313 把 Lightning Attention 规模化的基础模型,456B / 45.9B
MiniMax Sparse Attention 2026-06 2606.13392 M3 一线的稀疏注意力 MSA;MoE 配置 128 路由 + 1 共享专家、top-4