LESSON 27 · 卷 大语言模型

MoE 混合专家架构

GPT-4 据说有 1.8 万亿参数——推理每次却只用其中一小部分,怎么做到的?

第 1 站

参数越多越聪明,可惜也越慢

这一卷有条贯穿始终的经验律——缩放定律:参数越多、数据越多,模型越强。 GPT-2(1.5B)→ GPT-3(175B)→ GPT-4,能力的台阶,基本是用参数量堆出来的。可堆参数有个躲不开的账:

  • 标准 Transformer 里,每生成一个 token,全部参数都得参与一次计算
  • 参数翻 10 倍,每个 token 的推理成本也老老实实翻 10 倍
  • 175B 的 GPT-3 一张显卡装不下,得好几张卡接力——再大,成本就失控了。

于是卡在一个两难:想更聪明就得更多参数,更多参数就更慢更贵。能不能两头都要——参数多到撑起能力,算力却不跟着涨?

如果不必让所有参数都参与每一次计算,能不能既拥有海量参数,又保持低成本?
第 2 站

切入点:FFN 占了一个 Block 三分之二的参数

要「只唤醒一部分」,得先找到那块最肥、最值得拆的肉。回到第 21 课的 Block,数一下参数:

注意力层:Q、K、V、O 四个 矩阵 → 约 4d²
FFN 层:先放大 4 倍再缩回(),两个大矩阵 → 约 8d²
→ FFN 占了一个 Block 约 2/3 的参数,是最肥的那块

再想想第 21 课说的:FFN 是模型的「知识仓库」,大半事实都编码在它的权重里。 可标准做法是所有 token 都挤过同一个 FFN——不管你是一段代码、一句诗,还是一个数学公式, 都去同一个仓库里翻。这既浪费、也别扭:处理代码和处理诗歌需要的知识天差地别,凭什么塞在一个 FFN 里?要拆,就拆它。

第 3 站

MoE:把一个 FFN,换成一群专家 + 一个分诊台

混合专家(Mixture of Experts,MoE)的做法,正是上一站那个「分科」的念头落地:

  1. 把每层那一个 FFN,复制成 N 个平行的「专家 FFN」(比如 N=8);
  2. 前面加一个轻量的路由器(分诊台),给每个 token 打分、挑出最合适的 Top-K 个专家(通常 K=2);
  3. token 只穿过这 K 个专家,其余 N−K 个本次不参与;
  4. K 个专家的输出,按路由器给的权重加权求和。

路由器本身就是个小小的线性层。拿一个 token 走一遍,看它怎么「分诊」(4 个专家、选 Top-2):

路由器给 4 个专家打分(logits):[3.1, 0.5, 2.4, −1.0]
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)
某个 token路由器(分诊台)0.67专家1专家20.33专家3专家4专家5专家6专家7只激活 Top-2(专家1 + 专家3)其余 5 个专家本次完全不计算
图 27-1路由器给这个 token 选了专家1、专家3(权重 0.67、0.33),其余 5 个空转。总参数是 7 个专家的,实际计算只花 2 个——这就是「分诊」省下的算力。

这套「分工 + 只激活相关的那部分」,和第 20 课的多头注意力是同一种智慧的两个方向: 多头把注意力拆成几个头各看一种关系,MoE 把FFN拆成一群专家各管一类输入。 一个切「注意」、一个切「记忆」,骨子里都是那句老话——与其让一个大块什么都干,不如拆成小块各管一摊。

第 4 站

算一笔账:8 倍的参数,1 倍的算力

口说无凭,把账算给你看。拿开源的 Mixtral 8×7B(Mistral AI)做例子—— 注意「8×7B」这个名字很容易让人误会成 56B,其实不是

8 个专家,但注意力层、嵌入表是所有专家共享的,只数一次
总参数 ≈ 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 个),可你每次提问, 真正参与计算的只是其中一小块。「又大又快」不是矛盾修辞,是路由器换来的。

第 5 站

现实里的两个坑(和一个误会)

MoE 听着完美,但真要训起来,有几处反直觉的地方值得先泼盆冷水。

先澄清一个常见误会

为了好懂,很多图(包括上一站那张的原始版本)会把专家标成「法律专家」「代码专家」「数学专家」。 但真实情况是:专家并不按人类能读懂的主题分工。路由器是训练中自己学出来的, 它的分派往往跟着词法、句法这类表层特征走(比如标点、词形、某类 token),而不是「这段在讲法律」。 专家确实会分化,但那种分化大多没有一个我们能命名的标签。把它想成「8 条各有侧重、但说不清侧重啥的流水线」,更贴近真相。

坑一:专家会「旱涝不均」

路由器要是图省事,老往那么两三个专家身上派活,剩下的专家就学不到东西、白占参数—— 旱的旱死、涝的涝死。所以训练时要额外加一项「负载均衡损失」, 逼着路由器把 token 尽量摊匀。还有个硬限制叫容量:每个专家每批最多收这么多 token, 挤爆了的多余 token 会被「丢弃」(这一层干脆跳过 FFN、只靠残差直通),用一点精度换稳定。

坑二:省了算力,没省显存

别忘了——不参与计算 ≠ 不占地方。全部 N 个专家的参数都得常驻显存随时待命, 所以 MoE 省的是计算,不是显存。更麻烦的是,专家常分散在不同 GPU 上, 路由时 token 要跨卡跑来跑去,通信能成为新瓶颈。DeepSeek 等就靠「节点内优先路由」等工程技巧来摁住它。

第 6 站

总结

本课核心 · TAKEAWAY

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 丢弃;省算力不省显存。
小测验

学习小测验

做完这一课,来检测一下核心知识点。选出你的答案后点击「提交」,即可看到正确选项与讲解。

Q1MoE(混合专家)架构能做到「总参数上万亿,但每次推理只用其中一小部分」,靠的是什么?
Q2MoE 中的「路由器(gating network)」起什么作用?
NEXT · 第 28 课

模型蒸馏

大模型再快也是大。能不能把它一身本事「教」给一个小得多的模型,让小模型也接近它的水平?

0 人点赞,0 人看过