MoE(Mixture of Experts,混合专家) MoE(Mixture of Experts,混合专家)是目前大模型架构中非常重要的一个方向,GPT-4、Mixtral、DeepSeek、Qwen的部分版本都用了这个思路。我从核心思想讲到具体细节。核心思想传统的Transformer模型里,每一层的前馈网络(FFN)对所有输入token都用同一套参数计算。MoE的想法是:把这一个大的FFN换成很多个小的专家网络,每个token只激活其中一小部分专家,而不是全部。打个比方:传统模型像一个全科医生,什么病人来了都要自己看一遍所有科室的知识;MoE则像一家医院,来了病人先经过分诊台(路由),分诊台判断这个病人该去哪几个科室,只有对应的专家医生会诊,其他科室的医生完全不参与。这样做的好处是:模型的总参数量可以做得很大(知识容量大),但每次前向计算实际用到的参数量很小(计算成本低)。这就是稀疏激活。基本架构组成一个标准的MoE层通常替换Transformer中的FFN层,包含两个部分:专家网络(Experts):一组结构相同、参数不同的前馈网络(FFN),数量可以是8个、16个、64个甚至上百个。门控网络/路由器(Gating Network / Router):一个很小的网络,输入是token的隐藏状态,输出是每个专家的打分(通常经过softmax),决定这个token应该交给哪几个专家处理。MoE最有意思的地方就是信息怎么从一个token流向被选中的专家。关键技术细节1. Top-k路由门控网络对每个token输出一个在所有专家上的概率分布(通常用softmax),然后只取分数最高的k个专家(常见k1或k2)。被选中专家的输出会按照各自的权重加权求和,作为这一层的最终输出。2. 负载均衡问题这是MoE训练中最大的坑。如果不加约束,路由器很容易偷懒,把大部分token都送给少数几个专家,导致这些专家训练得很好、其他专家几乎没学到东西(即专家坍塌)。为了解决这个问题,通常会加入:辅助负载均衡损失(auxiliary load balancing loss):惩罚专家之间负载不均衡的情况,鼓励token更均匀地分配到各个专家。专家容量限制(expert capacity):给每个专家设置一个最大处理token数上限,超出的token会被丢弃(drop)或路由到下一个候选专家。3. 通信开销在分布式训练中,不同专家往往分布在不同的GPU上,token需要跨设备发送给对应的专家,这会带来额外的通信成本(all-to-all通信),是MoE工程实现上的一大难点。MoE vs 稠密(Dense)模型对比维度稠密模型MoE模型每次前向计算的参数量等于总参数量远小于总参数量(仅激活的专家)总参数量/知识容量相对较小可以做得很大训练/推理速度参数量越大越慢计算成本与激活参数量成正比,速度更快训练稳定性相对简单需要处理负载均衡、路由不稳定等问题显存占用与计算量匹配总参数都要加载到显存,占用大简单说:MoE用显存换计算,总参数量很大(需要更多显存存储所有专家),但实际推理时每个token只用一小部分参数计算,速度反而更快。实际应用案例Switch Transformer(Google):早期大规模验证MoE可行性的代表工作,每个token只路由到1个专家(Top-1)。Mixtral 8x7B(Mistral AI):8个专家,每次激活2个,总参数约47B,但实际计算量只相当于约13B的稠密模型。DeepSeek-MoE / DeepSeek-V2/V3:引入了细粒度专家和共享专家的设计,把专家拆得更小更多,同时设置若干个所有token都必经的共享专家来捕捉通用知识,进一步提升效率。Qwen、Grok等也都采用了MoE架构的版本。优缺点总结优点在相同计算预算下可以获得远大于稠密模型的参数量,理论知识容量更强推理时激活参数少,速度和成本优于同等总参数量的稠密模型不同专家可以隐式地专业化,学习到不同类型的模式缺点训练不稳定,需要精心设计负载均衡机制显存占用高(所有专家参数都要加载)分布式训练/推理工程复杂度高(通信开销、专家并行)微调时容易出现某些专家过拟合的问题