MoE 混合专家架构
GPT-4 据说有 1.8 万亿参数——推理每次却只用其中一小部分,怎么做到的?
参数越多越聪明,可惜也越慢
这一卷有条贯穿始终的经验律——缩放定律:参数越多、数据越多,模型越强。 GPT-2(1.5B)→ GPT-3(175B)→ GPT-4,能力的台阶,基本是用参数量堆出来的。可堆参数有个躲不开的账:
- 标准 Transformer 里,每生成一个 token,全部参数都得参与一次计算;
- 参数翻 10 倍,每个 token 的推理成本也老老实实翻 10 倍;
- 175B 的 GPT-3 一张显卡装不下,得好几张卡接力——再大,成本就失控了。
于是卡在一个两难:想更聪明就得更多参数,更多参数就更慢更贵。能不能两头都要——参数多到撑起能力,算力却不跟着涨?
切入点:FFN 占了一个 Block 三分之二的参数
要「只唤醒一部分」,得先找到那块最肥、最值得拆的肉。回到第 21 课的 Block,数一下参数:
FFN 层:先放大 4 倍再缩回(),两个大矩阵 → 约 8d²
→ FFN 占了一个 Block 约 2/3 的参数,是最肥的那块
再想想第 21 课说的:FFN 是模型的「知识仓库」,大半事实都编码在它的权重里。 可标准做法是所有 token 都挤过同一个 FFN——不管你是一段代码、一句诗,还是一个数学公式, 都去同一个仓库里翻。这既浪费、也别扭:处理代码和处理诗歌需要的知识天差地别,凭什么塞在一个 FFN 里?要拆,就拆它。
MoE:把一个 FFN,换成一群专家 + 一个分诊台
混合专家(Mixture of Experts,MoE)的做法,正是上一站那个「分科」的念头落地:
- 把每层那一个 FFN,复制成 N 个平行的「专家 FFN」(比如 N=8);
- 前面加一个轻量的路由器(分诊台),给每个 token 打分、挑出最合适的 Top-K 个专家(通常 K=2);
- token 只穿过这 K 个专家,其余 N−K 个本次不参与;
- K 个专家的输出,按路由器给的权重加权求和。
路由器本身就是个小小的线性层。拿一个 token 走一遍,看它怎么「分诊」(4 个专家、选 Top-2):
softmax 成概率:[0.63, 0.05, 0.31, 0.01]
选最高的两个 → 专家1(0.63)和专家3(0.31),其余两个空转
两者权重重新归一:0.63→0.67,0.31→0.33
输出 = 0.67 × 专家1(x) + 0.33 × 专家3(x)
这套「分工 + 只激活相关的那部分」,和第 20 课的多头注意力是同一种智慧的两个方向: 多头把注意力拆成几个头各看一种关系,MoE 把FFN拆成一群专家各管一类输入。 一个切「注意」、一个切「记忆」,骨子里都是那句老话——与其让一个大块什么都干,不如拆成小块各管一摊。
算一笔账:8 倍的参数,1 倍的算力
口说无凭,把账算给你看。拿开源的 Mixtral 8×7B(Mistral AI)做例子—— 注意「8×7B」这个名字很容易让人误会成 56B,其实不是:
总参数 ≈ 47B(不是 8×7=56B,共享部分不重复算)
每个 token 只走 2 个专家 → 实际激活 ≈ 13B
→ 装着 47B 的知识容量,每个 token 却只花 13B 的算力
这就是 MoE 的魔法账本:知识容量按「总参数」走,推理成本按「激活参数」走,两者被路由器拆开了。 想更聪明?多加专家、把总参数堆上去;想更快?把每次激活的 K 压低。 DeepSeek-V3 更激进——256 个专家、每次只激活 8 个,总参数 671B,单 token 激活仅约 37B。
这也解释了开篇那个传闻:GPT-4 据说有约 1.8 万亿总参数(16 个专家、每次激活 2 个),可你每次提问, 真正参与计算的只是其中一小块。「又大又快」不是矛盾修辞,是路由器换来的。
现实里的两个坑(和一个误会)
MoE 听着完美,但真要训起来,有几处反直觉的地方值得先泼盆冷水。
为了好懂,很多图(包括上一站那张的原始版本)会把专家标成「法律专家」「代码专家」「数学专家」。 但真实情况是:专家并不按人类能读懂的主题分工。路由器是训练中自己学出来的, 它的分派往往跟着词法、句法这类表层特征走(比如标点、词形、某类 token),而不是「这段在讲法律」。 专家确实会分化,但那种分化大多没有一个我们能命名的标签。把它想成「8 条各有侧重、但说不清侧重啥的流水线」,更贴近真相。
路由器要是图省事,老往那么两三个专家身上派活,剩下的专家就学不到东西、白占参数—— 旱的旱死、涝的涝死。所以训练时要额外加一项「负载均衡损失」, 逼着路由器把 token 尽量摊匀。还有个硬限制叫容量:每个专家每批最多收这么多 token, 挤爆了的多余 token 会被「丢弃」(这一层干脆跳过 FFN、只靠残差直通),用一点精度换稳定。
别忘了——不参与计算 ≠ 不占地方。全部 N 个专家的参数都得常驻显存随时待命, 所以 MoE 省的是计算,不是显存。更麻烦的是,专家常分散在不同 GPU 上, 路由时 token 要跨卡跑来跑去,通信能成为新瓶颈。DeepSeek 等就靠「节点内优先路由」等工程技巧来摁住它。
总结
MoE = 把那个占 2/3 参数的 FFN 换成 N 个专家 + 一个路由器,每个 token 只激活 Top-K 个。知识容量按总参数走,算力按激活参数走——8 倍参数,约 1 倍推理成本。 代价:要负载均衡防旱涝,全部专家还得常驻显存、跨卡通信。GPT-4、Mixtral、DeepSeek 都在用。
这一课你亲手推导了
- 动机:缩放定律要更多参数,但标准模型推理成本随参数线性涨。
- 切 FFN:FFN 占 Block 约 8d²、2/3 参数,是最值得拆的「知识仓库」。
- 路由器:打分 [3.1,0.5,2.4,−1.0] → softmax → 选 Top-2 → 归一加权(0.67/0.33)。
- 魔法账本:Mixtral 总 47B、激活仅 13B;容量按总参数、成本按激活参数。
- 现实:专家不按主题分工;要防负载不均与 token 丢弃;省算力不省显存。
学习小测验
做完这一课,来检测一下核心知识点。选出你的答案后点击「提交」,即可看到正确选项与讲解。
模型蒸馏
大模型再快也是大。能不能把它一身本事「教」给一个小得多的模型,让小模型也接近它的水平?