稠密模型 vs 稀疏模型(MoE):不是所有参数都在同时工作

我最早注意到 MoE 这个词,是因为一个很矛盾的现象:Mixtral 8x7B 的官方模型卡写着总参数量 47B,但实测推理速度却接近 13B 模型。这怎么可能?如果每个参数都在工作,参数越多,计算量应该越大,速度应该越慢。除非——有一部分参数在偷懒。

AI technology illustration

MoE(Mixture of Experts,专家混合)就是让一部分参数“偷懒”的技术。但这里的“偷懒”不是随机跳过,而是由路由器决定:每个输入 token,只让少数专家参与计算。

稠密模型:每个 token 都要惊动所有参数

在传统的稠密模型里,参数和计算量是绑死的。你有一个 175B 参数的 GPT-3,那么每生成一个 token,这 175B 个参数全部要参与一次前向计算。就像一家公司,无论业务大小,全体员工都得开会,每个人都得发言。

这种设计的优点是很简单,训练和推理都容易预测。缺点是成本随着参数量线性增长。模型想变聪明,就要加参数,加参数就要加算力。这也是为什么 GPT-3 的训练费用高得离谱。

MoE 的招数:让模型学会“点菜”

MoE 的思路其实很朴素:把一个大型前馈网络拆成很多个小网络,每个小网络叫一个“专家”。然后训练一个路由器,让它学会根据输入内容,只挑最相关的几个专家来干活。

以 Mixtral 8x7B 为例,它把 Transformer 的前馈层替换成了 8 个专家,每个 token 只激活其中 2 个。所以总参数是 47B,但实际参与计算的只有约 13B。这 13B 就是常说的“活跃参数”。

你可以把它想象成一家大型咨询公司。公司有几百个顾问,但每个客户项目只需要派两三个人去现场。老板(路由器)负责判断这个项目该派谁,而没被派到的人继续待命。

路由器的决策过程:先打分,再抽签

路由器本身是一个很小的神经网络。它接收当前 token 的表示向量,输出一个 8 维的概率分布(假设有 8 个专家),然后取概率最高的 2 个专家执行前向计算。这个过程叫 top-k 路由,k 通常取 2。

具体步骤大致是:

  1. 把 token 的隐向量送入路由器网络,得到每个专家的分数。
  2. 给分数加上一点训练时用的噪声,目的是让模型在早期不锁定单一专家。
  3. 取 top-2 的专家,把 token 发给它们。
  4. 把两个专家的输出加权合并,权重就是路由器的分数。

看起来像一个动态规划,但本质上它只是一个可微的稀疏选择。因为路由器是连续输出分数的,所以梯度可以传回去。

MoE 只稀疏化前馈层,注意力层仍是共享的

有一个细节值得单独说:MoE 并不是把整个 Transformer 都拆成专家。通常只把每个 block 里的前馈网络(FFN)替换成专家混合,注意力层依然是所有 token 共享的稠密层。原因很简单:FFN 占了模型大约三分之二的参数,是绝对的大头,而且它对每个 token 独立计算,适合拆开。注意力层则要让 token 之间两两交互,拆成专家反而会切断上下文信息的流通。

所以 Mixtral 8x7B 的命名容易让人误会,好像真有 8 个 7B 参数的专家。实际上,每个专家只有不到 2 亿参数,真正的大头是 32 层 × 每层 8 个专家的累积。总参数 47B,但每个 token 只过其中 2 个专家,所以活跃参数约 13B。

专家并不是你想象的那种“科任老师”

我最早以为 MoE 的专家会像人类团队一样分工:一个专家负责数学,另一个负责写作,还有一个负责代码。后来看了研究才发现,路由出的专家并没有这么强的语义标签。你很难说清某个专家到底“擅长什么”,它更像是模型内部隐式形成的一组可复用的计算路径。

有研究分析过训练后的专家输入,发现有些专家确实会偏向某些 token 类型,但也有很多重叠。专家之间更像是一组基础函数的组合,而不是互斥的学科。

这意味着什么?意味着 MoE 的“稀疏”更多是计算层面的优化,而不是知识层面的分工。你不需要去理解每个专家在做什么,只需要相信路由器的选择。

算力省了,但显存一个都跑不掉

这是 MoE 最容易让人误解的地方。很多人以为,既然每个 token 只激活 13B 参数,那推理时是不是只要加载 13B 就够了?不是。因为路由器是动态决定的,你无法预知下一个 token 会去哪个专家。所以在推理时,所有专家都必须待在显存里待命。

这就是为什么 Mixtral 8x7B 在 FP16 下需要约 94GB 显存,虽然它每 token 只算 13B 参数。MoE 省的是计算(FLOPs),不是显存。如果你的瓶颈是显存,MoE 并不能帮你省。

这也是为什么 MoE 模型通常需要多 GPU 部署,或者配合量化。比如 Mixtral 量化到 8bit 后显存需求会减半,但依然高于同尺寸活跃参数的稠密模型。

一张表看清两种模型的本质区别

维度 稠密模型 MoE 稀疏模型
总参数量 所有参数都在推理时使用 总参数很大,但每个 token 只用一部分
活跃参数 等于总参数 远小于总参数(如 Mixtral 的 13B/47B)
计算成本 随总参数线性增长 只随活跃参数增长
显存占用 与总参数成正比 同样与总参数成正比(不省显存)
路由机制 路由器决定每个 token 使用哪些专家
训练难度 相对简单 需要处理负载均衡、通信开销
微调难度 成熟稳定 路由可能不稳定,量化更复杂

MoE 的代价:训练更难,微调更苦

MoE 最核心的训练难题是负载均衡。如果路由器把所有 token 都派给同一个专家,其他专家就变成了摆设,模型退化成一个小稠密模型,效果会崩。所以训练时通常会加一个辅助损失,惩罚那些“太受欢迎”的专家。

但辅助损失本身是一把双刃剑。惩罚太轻,负载不均衡;惩罚太重,路由会失去区分度,每个 token 都随机选专家。Switch Transformer 论文里就用了很大的篇幅讨论这个问题。

分布式训练是另一个痛点。在多 GPU 训练时,专家会分散在不同的设备上,token 被路由到某个专家,就得把激活值从当前设备传到那个设备。这种通信开销会随专家数量增加而急剧上升。所以 MoE 大规模训练通常需要特殊的并行策略,比如 GShard 提出的 Expert Parallelism。

还有一个容易被忽略的点:训练时一个 batch 里有成百上千个 token,虽然单个 token 只激活 2 个专家,但整个 batch 几乎会让所有专家都工作。所以 MoE 在训练阶段的计算量节省不如推理阶段明显。真正的收益在于推理时 batch 通常很小(甚至 1),这时候稀疏性的优势才完全体现。

从 Switch 到 Mixtral:MoE 的演进路线

MoE 不是新东西。2017 年,Google Brain 的 Shazeer 等人 就把 MoE 引入 LSTM,展示了稀疏条件计算的潜力。2021 年,Google 的 Switch Transformer 用 top-1 路由把模型规模推到 1.6T 参数,并且用更简单的路由策略降低了训练成本。

2022 年,Google 的 GLaM 在 1.2T 总参数量下,只激活 97B 参数,就用远低于 GPT-3 的训练能耗达到了更好的效果。到了 2024 年,Mistral 发布的 Mixtral 8x7B 让 MoE 真正走进普通开发者的视野——它开源,而且消费级硬件可量化运行。

Google 在 Switch Transformer 论文中写道:“We propose Switch Transformer, a scalable and simple sparse model that reduces the communication and computation costs of MoE while achieving the same or better performance than a dense model with the same compute budget.” 用中文说就是:用相同的计算预算,稀疏模型可以达到比稠密模型更好或相当的效果。

为什么说 MoE 不是并行计算?

并行计算是把一个大任务拆给多个处理器同时做,每个处理器都在工作。MoE 是每个 token 只让少数专家干活,其他专家闲着。这不是并行,而是稀疏选择。

MoE 和集成学习有什么区别?

集成学习是训练多个模型,推理时把结果平均。MoE 是训练多个专家子网络,推理时由路由器动态选择,并且整个系统是端到端联合训练的。路由不是投票,而是加权组合。

MoE 模型能微调吗?

能,但比稠密模型更脆弱。因为路由器的行为可能随着微调数据分布改变而剧烈变化,导致某些专家过拟合。实践中通常要用更小的学习率,或者冻结部分参数。

所以,MoE 是未来的方向吗?

我觉得要冷静看待。MoE 最大的价值,是在总参数量不变的前提下,用更少的计算量换取更强的能力。换句话说,它是一个“性价比”优化方案。

但它的短板也很明显:显存需求高、训练复杂、微调困难。如果你的场景是单卡推理或垂直领域微调,一个同规模稠密模型可能更省心。如果目标是百亿级以上的大模型,MoE 几乎是绕不开的选择。

说到底,“不是所有参数都在同时工作”这句话既像是优点,也像是一种妥协。它说明我们还没有能力让所有参数在每次推理中都高效协作,所以只能用路由来降低冗余。未来的模型或许会走向更动态的架构,让参数在需要的时候才被激活。但至少现在,MoE 是通往更大规模模型最现实的一条路。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/278.html

(0)
上一篇 2026年8月24日
下一篇 2026年8月25日

相关推荐