MoE 混合专家模型
一、什么是 MoE
MoE Mixture of Experts,混合专家模型,追根溯源是一种根据不同任务自动切换不同处理器的任务完成思路。
在 LLM 中,MoE是指将transformer的全连接层 FFN 替换为 若干个较小的并行的 FFN,称为专家;并且使用一个路由器Router分配这些专家对输入的匹配度,仅激活top-k个专家,最后根据Router计算的匹配度聚合这些专家计算的结果作为输出。
MoE由Google和deepseek发扬光大,特别是deepseek,25年初发布的V1版本使用MoE,极大地提升了推理速度。因为在推理时,仅部分专家被激活,而不用像原来巨大的FFN那样全部神经元都参与计算,所以其计算量大大降低。
二、原理
MoE 有两个主要组件:Router,若干 FFN 专家。 其结构大致为:
2.1 MOEGate / Router
在训练时,Router计算出各FFN与输入的匹配度,并激活对于 top-k 个专家前向传播,在反向传播时通过梯度更新Router参数,使得结果好的专家在当前任务下具有更高的权重/匹配度。
但是有一个问题,FFNs是随机初始化的,若是恰巧某个专家效果很好,后续Router会一直给他增加权重,进而形成正反馈,使该FFN得到训练从而效果更加,而其他FFN则由于训练少而性能差,所以需要一个方法解决这个被称为“专家负载不均”的问题。
业界最通用的做法是引入辅助损失函数,它的核心思想是强制让每个专家处理的 Token 数量和被分配的概率趋于一致。该辅助损失函数为:
Lossaux=αNi=1∑NfiPi
其中,α是超参数,一般很小,约为 10−2,10−3 防止辅助损失函数占比太大,而导致Router乱分配; N 是被激活的专家数; fi 为实际分配比例,即专家i实际被分配到的token数量与总token的比例,Pi 为预测概率比例,即Router对专家i计算的匹配度的平均值。
当然,也可以通过添加随机噪声、偏置,实现“负载均衡”。
在推理时,不会有这种过分配的惩戒。
2.2 MoE-FFN
对于一个输入,MoE中若干FFN中的某些会被激活并计算结果,然后依靠反向传播进行训练。
在推理时同样被Router选择并激活,没有反向传播。
2.3 结果聚合
使用归一化方法聚合,在Router计算出各个FFN对输入的匹配度后,会选取 top-k 个FFN激活,但是由于截断了后面的匹配度,所以这k个FFN的匹配度的和不为1,因此需要对FFNs的计算结果进行归一化聚合,即:
y=∑Gi∑GiEi
其中,Gi, Ei 分别为 Router计算的专家i的匹配度 Logits,专家i的输出。
三、为什么 MoE
传统的Transformer的FFN是一个稠密Dense的FFN,其计算量与参数量正相关,如果想要通过增大模型来提升效果,就会降低推理速度、增加训练/计算成本。并且由于Dense模型训练时会更新全部参数,一个已经具备高代码能力的模型可能在训练数学推理能力时降低原代码能力。
而MoE 将原稠密FFN拆分,能够为不同的任务训练不同的专家,各专家之间能够实现互不干扰,因此在处理多模态、多语言任务时,MoE 展现出的“垂直领域深度”远超同等计算成本的 Dense 模型。并且,在推理时,MoE仅激活部分专家,所以其消耗的计算量相对更少,推理更快。此外,MoE相较于原稠密FFN,具有收敛快、高效资源利用、的优点。
四、关键问题
五、发展
5.1 发展趋势
专家细粒度化
现在的趋势是将专家拆得极小。比如 DeepSeek-V3 拥有 160 个专家,每次激活其中的一小部分。 专家越小,分工就越明确。就像从 8 个“全科医生”变成了 160 个“专科医生”,诊断(Token 处理)的精度显著提升。
共享专家机制
始终保留一部分 FFN 参数(共享专家)处于激活状态,不参与路由,处理所有 Token。 因为有些通用知识(如标点符号、基础语法)没必要让路由专家去学。共享专家负责“兜底”,路由专家负责“攻坚”。
负载均衡
Expert-Choice(专家反选 Token)或者 No-Loss Balancing(通过动态偏置 Bias 实现平衡,取消惩戒 Loss)。
目标是让每个专家处理的 Token 数量完全对齐,压榨出每一块 GPU 的性能。
5.2 瓶颈
混合专家(MoE)模型的核心瓶颈在于显存占用与通信带宽的双重压力:尽管计算量显著降低,但需维持数倍于稠密模型的显存开销以驻留所有专家参数,并在计算过程中承受跨设备令牌调度所引发的高额通信开销,使其成为一种高度依赖高速互联技术(如NVLink或InfiniBand)的计算架构。
