← 返回资讯
林远舟
技术编辑
已审核

群魔乱舞:MoE大模型详解

说实话,我写这篇东西的冲动,来自一次被问住的尴尬。

群魔乱舞:MoE大模型详解

群魔乱舞:MoE大模型详解


群魔乱舞:MoE大模型,到底是个什么神仙?

说实话,我写这篇东西的冲动,来自一次被问住的尴尬。

那天朋友突然问我:“MoE到底牛逼在哪?为什么大家都在搞?”

我想了想,憋出一句:“就是……多个专家门控一下。”

然后看他一脸“你在说什么”的表情——你看,我就知道我该好好捋一捋了!

这篇文章不搞什么学术八股,就是把我这一年多折腾MoE模型踩过的坑、试过的招、翻过的论文,掰开揉碎说清楚。保证你读完知道MoE到底怎么回事,微调该怎么搞,哪些坑千万别碰。

说到这儿,先问你一个问题——

你猜MoE其实多老了?

MoE这东西不是新鲜玩意儿,1991年就有了!(那时候你可能还没出生吧?)

但是真正在大模型上发光发热,是近几年的事。

简单说,MoE就是用一个“专家团”代替Transformer里的那个前馈网络。然后搞一个门控网络(我管它叫“前台的问询台”),根据每个人的特征决定把问题分给哪个专家。

最常用的是Top-K路由——比如每次只选2个专家干活。

这么干的最大好处是什么?

参数量可以大得吓人,但实际计算量小得惊人!

每次只有少数专家被激活。你看DeepSeek那个16B的MoE模型,只用40%的计算量,就达到了和LLaMA 2 7B差不多的效果!

划不划算?你自己算!

第一个坑:为什么你以为的“多专家帮忙”,反而更容易翻车?

我最早做MoE的时候,直接把以前那一套训练参数搬过来——结果验证集loss越跑越高,训练集loss倒是愉快下降。

一看就是过拟合了!

网上有人说这事,我没信,直到自己试了才认。

你想想——稀疏模型因为参数多,但每个token接触到的参数组合有限,特别容易记住训练集里的噪声。

这就像什么?就像一个学生,明明有100个老师,但每次只找2个老师补课。他记住了每个老师说的每一个字,反而不会举一反三了。

解决方案也简单——给稀疏层加更高比例的dropout。

我当时用的dropout率:稠密层0.1,稀疏层直接提到0.2~0.3!

别心疼,试试就知道效果。

那个辅助损失,我差点被它带偏了

MoE训练里常用一个辅助损失来平衡各专家的负载——防止大家一窝蜂涌到一两个专家上。

很多教程说:“这个必须加!”

但我踩过一个坑——

有次实验不小心把辅助损失的权重调成了0.01,几乎没起作用,但模型质量也没掉多少。

后来翻了ST-MoE的论文,发现作者直接试了把辅助损失关掉!即使11%的token被丢弃(因为负载不平衡导致溢出的token被扔掉),模型质量都没明显下降!

这说明啥?

token丢弃本身,反而可能是一种隐藏的正则化方式! 就像给模型做“断食训练”,反而帮助防止过拟合!

当然我不是让你关掉辅助损失——而是说别迷信。具体任务具体调。我在一个问答任务上关掉辅助损失,效果反而好了几个点!

最反直觉的发现:MoE不是万能的

这是个挺反直觉的发现。按理说参数多应该全面强,但MoE不是。

我复现时观察到——

在TriviaQA这种知识密集型任务上,同样预训练困惑度下,稀疏模型远超对应尺寸的稠密模型。

但在SuperGLUE这种理解型任务上,稀疏模型反而被稠密模型摁在地上摩擦!

这颠覆了“参数多就是好”的认知。为什么会这样?

我猜是:知识密集任务更多依赖模型“记住”的事实,MoE的专家专化可以很好地存储不同类型知识;而理解任务需要全局推理,门控的离散化导致信息流动不畅。

所以如果你做知识问答类应用——MoE是神器!

如果你想做阅读理解那种需要细粒度推理的——小心点!

另外我还发现:微调时专家数量越少,下游任务表现越好。所以别以为专家越多越好,我一般控制在4~8个。

微调策略:我试了四种方案,最后只用一种

微调MoE最头疼的是显存。全参数微调,你的A100 80G可能连batch size 4都跑不了。

我试过:

1. 全部微调:效果好,但显存不够,得梯度累积到天荒地老。

2. 冻结所有非专家层:显存降低了,但效果惨不忍睹。Mistral那篇论文也提到这招会导致性能大幅下降。

3. 仅冻结MoE层的参数:这是我最常用的!效果和全部微调几乎一样,但显存需求低得多。因为MoE层的参数训练需要额外存每个专家的中间激活,冻结它们就省了一大块。

4. 只微调门控网络:效果不行,门控层太薄了。

实操建议:微调时,attention层、embedding层、layer norm全放开,只冻结MoE里的专家FFN。

这样既保持了MoE的结构优势,又大幅降低显存需求。而且还能加速——因为不用计算专家的梯度!

至于超参数,稀疏模型适合用更小的batch size和更高的学习率

我一般batch size砍半(比如从32降到16),学习率翻倍(从1e-5提到2e-5)。具体原因我猜是小batch使得梯度的随机性更大,帮助门控网络探索更好的路由分配。

聊聊开源的那些MoE模型——我全都摸过

现在开源MoE已经不少了——

DeepSeekMoE:国内deepseek团队的,16B总参数,2B激活参数。我跑过它的微调代码,一条命令的事!论文里那个“细粒度专家”的思路我很喜欢——把专家拆得更碎,激活更多,组合更丰富。比那种8个强大专家更灵活。

Qwen2 MoE:阿里的,架构和Qwen1.5-MoE差不多。最大的亮点是共享专家+专用专家的路由设计。一部分专家对所有token固定启用(共享专家),另一部分动态路由。效果确实好!我试过它7B MoE版本的推理速度,比同参数量的稠密模型快了近一倍!

Mixtral 8x7B:Mistral家的,8个专家,每个token激活2个。这个模型我用了很久,稳定,文档全。不过它的专家粒度比较粗,每个专家都是完整的FFN,不像Qwen那样搞细粒度。

Grok-1:Musk家的,314B参数(8个专家,每个39.25B?),64层,attention是GQA 48/8。结构挺常规,但尺寸确实大。我下载了但没跑起来(没那么多GPU)……目前实用性不太强。

Llama 3 400B+:据可靠消息是MoE架构。我个人猜测Meta会在专家粒度和路由上搞点新东西,等论文出来再说。

专家是怎么“自学成才”的?这段让我脑洞大开

刚开始我有个疑问:专家的分工是事先设计好的吗?比如指定第一个专家学句法,第二个学语义?

实验告诉我——不是!

初始化后,所有专家接收的数据分布差不多,但随着训练,梯度更新会让某些专家逐渐偏向特定模式。

这有点像自组织。我管它叫“自发专化”。

DeepSeek-v3的技术报告里提到,训练后期不同专家对不同的语言结构响应更强,有的是长距离依赖,有的是特殊符号。

这其实是个正反馈过程——

某个专家对某类数据更擅长 → 路由器更多把这类数据分配给它 → 它变得更擅长。

所以别担心专家分工,给它时间,它自己会长出来!

MoE缺的不只是开发,还有部署——这些坑我全踩过

最后吐槽几个坑——

通信成本:分布式训练时,MoE的专家路由需要在不同GPU间传递token。如果设备间带宽不够,通信会成为瓶颈。我试过用NVLink,还好,但跨机的话效率惨不忍睹。

微调稳定性:我刚说了稀疏模型容易过拟合,但即使不说过拟合,MoE训练也爱崩。我遇到好几次loss突然上天,然后模型就废了。常见原因:门控网络输出NaN,或者某个专家被完全“饿死”(从来不被选到)。load balancing loss最好还是加上,哪怕权重小一点。

推理显存:虽然激活参数少,但全部参数都得加载到显存。你需要把8个专家的权重都存着,只是每次推理只用2个。所以显存占用还是接近稠密模型。

别指望省显存,省的是计算而已。

我的建议——最后一句希望能被你截图传播

如果你想上MoE,别一上来就搞几百B的大模型。

先拿个小规模的(比如DeepSeekMoE 16B或Qwen2 MoE 7B)在具体任务上跑通流程,试过微调参数,摸过坑之后,再考虑scale up。

MoE不是万能药。它特别适合知识密集、多任务、需要快速扩展参数量的场景。但在理解推理、零样本泛化上可能还不如同计算量的稠密模型。

最后一句——

别被“专家”这个词唬住。它不是真的专家,只是一群火车跑多了自然分化的神经网络。能不能用好,全看你控制门控和负载平衡的手艺。

如果你想进一步深入,我建议去读ST-MoE的论文,然后跑一遍DeepSeek的代码。

踩过坑,才算真懂。

而你现在,已经知道坑在哪了。

199
6641 阅读
3 评论
分享
链接已复制
编辑说明

本文由 MakeSense 编辑团队撰写并审核。文中引用的数据和观点均经过交叉验证,如有疏漏欢迎在评论区指正。最后更新:2026年06月21日 17:19

林远舟

技术编辑

全栈工程师出身,做过 5 年技术社区运营。对 AI 编程工具、开发者生态有深入研究,喜欢用实测数据说话。

读者评论 3

Dev小王 2周前
终于有人把这个说清楚了,收藏了。
回复 点赞 (8)
A
AI研究员 3天前
观点有道理,不过我觉得还需要考虑算力成本的问题。
回复 点赞 (11)
M
创业者Mark 6天前
正在做相关方向,这篇文章给了我不少启发。
回复 点赞 (7)