13. MiniMax-M2
近期,各开源大语言模型厂商纷纷推出了面向效率优化的核心架构变体。例如上一节介绍的 Qwen3-Next,用高速门控 DeltaNet 模块替换了部分全注意力块;再如 DeepSeek V3.2 采用了稀疏注意力 —— 这是一种线性注意力变体,以牺牲部分建模性能为代价换取计算性能的提升(后续我会专门撰文详细介绍该机制)。
MiniMax-M1 也属于这类效率优化的模型路线,它采用的闪电注意力(lightning attention)是一种线性注意力变体,效率高于常规全注意力。我最初没有专门介绍 MiniMax M1,因为它的知名度不及本文讨论的其他部分模型。但全新发布的 MiniMax-M2 目前被认为是性能最强的开源权重模型(按基准测试成绩衡量),分量十足,不容忽视。

如下图总览所示,我将 MiniMax-M2 归为常规解码器式 Transformer 大语言模型,因为它没有沿用 MiniMax-M1 提出的高效闪电注意力变体。开发团队反而回归了全注意力方案,大概率是为了提升建模(以及基准测试)性能。

整体来看,MiniMax-M2 与 Qwen3 的相似度高得出人意料。除了层数、维度等规模参数不同,二者的核心组件基本一致。
13.1 逐层 QK 归一化(Per-Layer QK-Norm)
该模型最值得关注的设计亮点,或许是它采用了「逐层」QK 归一化,而非常规的 QK 归一化。深入代码可以看到,它在注意力机制内部的实现如下:
self.q_norm = MiniMaxText01RMSNormTP(self.head_dim * self.total_num_heads, eps=...)
self.k_norm = MiniMaxText01RMSNormTP(self.head_dim * self.total_num_kv_heads, eps=...)
此处隐藏层维度等于所有注意力头拼接后的总维度(头数 × 单头维度),因此 RMSNorm 的缩放向量会为每个注意力头、以及头内的每个维度都分配独立的参数。
所谓「逐层」,是指用于 QK 归一化的 RMSNorm 和常规 QK 归一化一样,定义在每个 Transformer 块内部;但额外的区别是,它不在多个注意力头之间共享参数,而是为每个注意力头都配备了专属的 QK 归一化。
模型配置文件中也包含滑动窗口注意力设置(与第 3 节的 Gemma 3 类似),但和第 4 节介绍的 Mistral 3.1 一样,该功能默认处于关闭状态。
除此之外,除了逐层 QK 归一化的差异,二者的架构高度相似,如下图所示。

13.2 混合专家稀疏度
下图还能看出另一个有意思的细节:该模型没有使用共享专家(这一点与 Qwen3 一致,但和 Qwen3-Next 不同)。如前文所述,在我看来,共享专家的价值在于能够减少其他专家之间的知识冗余。
此外,从上图中可以明显看出,MiniMax-M2 的「稀疏程度」是 Qwen3 的两倍。也就是说,在总参数量与 Qwen3 235B-A22B 大致相当的情况下,MiniMax-M2 每个 token 仅激活 100 亿参数的专家,而非 220 亿 —— 换算下来,MiniMax-M2 每个推理步骤仅调用总参数的 4.37%,而 Qwen3 的激活参数占比为 9.36%。
13.3 部分旋转位置编码(Partial RoPE)
最后,与 MiniMax-M1 一样,MiniMax-M2 在注意力模块内部采用「部分」旋转位置编码来编码位置信息,而非完整的 RoPE。和常规 RoPE 类似,旋转操作会在 QK 归一化之后施加到查询向量与键向量上。
此处的「部分 RoPE」,是指每个注意力头中,只有前rotary_dim个通道会施加旋转位置编码,剩余的head_dim - rotary_dim个通道保持不变。
在 M1 的官方 README 文件中,开发团队提到:
旋转位置编码(RoPE)施加于半数注意力头维度,基频为 10,000,000
我们可以这样直观理解二者的区别:
-
完整 RoPE:
[r r r r r r r r] -
部分 RoPE:
[r r r r — — — —]
在上述概念示意图中,r代表经过旋转(位置编码)的维度,横线代表未做处理的维度。
这么设计的意义是什么?在 M1 论文中,研究人员表示:
…… 对半数的 softmax 注意力维度施加 RoPE,能够在不损失性能的前提下实现长度外推。
我的推测是,这种设计可以避免长序列下出现「过度旋转」的问题,尤其是当序列长度超过训练数据集中最长文档时。换言之,其背后的逻辑可能是:与其施加模型在训练中从未见过的「失真」或「幅度过大」的旋转,不如保留部分维度不做位置编码。