richard_firs头像
关注
Transformer与大语言模型:第16章 MoE:混合专家架构封面图

Transformer与大语言模型:第16章 MoE:混合专家架构

第16章 MoE:混合专家架构

本章目标

理解现代大模型为什么要用 MoE(Mixture of Experts):它到底怎么计算、为什么有效、为什么难训练、为什么需要负载均衡,以及为什么 DeepSeek、Mixtral 这样的模型能把 MoE 做得如此激进。

上一章我们看到,Qwen、Llama、DeepSeek 相比原始 Transformer 做了一系列改进:RoPE、RMSNorm、GQA、KV Cache、FlashAttention。这些改进大多是在优化 Attention。而本章要讲的 MoE,优化的是另一半——FFN

MoE 是现代大模型(尤其是 DeepSeek 系列)最核心的架构创新之一。它回答了一个非常关键的问题:

能不能让模型拥有非常多的参数,但每个 Token 只使用其中一小部分?


16.1 从 Dense FFN 到稀疏专家

先回忆普通 Transformer 的 FFN。一个 Transformer Block 大致是:

Input

Attention

FFN

Output

Dense 模型里,所有 Token 都经过同一个 FFN:

Token

一个 FFN

Output

MoE 的核心变化是:把这一个固定的 FFN,换成多个 FFN + 一个动态路由

Token

Router

Expert 1

Expert 2

Expert 3

...

加权求和

Output

用一句话概括这个变化:

一个固定 FFN → 多个 FFN + 动态路由

这里要特别强调一点,否则很容易产生误解:

MoE 通常不是把整个 Transformer 复制成多个模型,而主要是把 FFN / MLP 部分专家化。 Attention 部分通常保持不变。

所以不要把"160 个专家"理解成"160 个完整的 Transformer",而是"某个 FFN 层里有 160 个并列的 FFN 子网络"。


16.2 Dense FFN 为什么会成为瓶颈?

传统 Dense FFN 的计算是:

FFN(x)=W2 σ(W1x)\text{FFN}(x) = W_2 \, \sigma(W_1 x)FFN(x)=W2σ(W1x)

所有 Token 都经过同一套参数 W1,W2W_1, W_2W1,W2。也就是说:

每一个 Token 都使用同一套参数。

假设模型有 100B 参数,那么每个 Token 都必须经过对应的大量计算。这导致一个非常关键的绑定关系:

模型参数量  ⟺  每 Token 计算量\boxed{\text{模型参数量} \;\Longleftrightarrow\; \text{每 Token 计算量}}模型参数量 Token 计算量

想让模型更"聪明"(更多参数),每个 Token 的计算成本就会同比上升。这正是 Dense 架构的根本瓶颈。


16.3 MoE 的核心思想

MoE 把 FFN 复制成多个 Expert(Expert 1、Expert 2、……、Expert N),然后规定:

每个 Token 只选择少量 Expert。

例如总共 64 个 Expert,每个 Token 只激活 2 个:

选中

选中

未选

一个 Token

Router

Expert 3 ✅

Expert 5 ✅

其余 62 个 Expert 不计算

于是就得到 MoE 最重要的性质:

总参数量可以很大但每 Token 的计算量不需要同比增加\boxed{\text{总参数量可以很大} \quad\text{但每 Token 的计算量不需要同比增加}}总参数量可以很大但每 Token 的计算量不需要同比增加

这就是"参数规模"和"计算规模"的解耦——本章后面会反复回到这个核心。


16.4 Router 到底在做什么?

Router(路由器)可以理解成:

决定"这个 Token 应该交给哪些专家处理"。

它的输入是一个 Token 的隐藏状态 x∈Rdx \in \mathbb{R}^{d}xRd,通过一个小矩阵 WrW_rWr 打分后做 softmax:

g(x)=softmax(xWr)=[p1,p2,…,pN]g(x) = \text{softmax}(x W_r) = [p_1, p_2, \ldots, p_N]g(x)=softmax(xWr)=[p1,p2,,pN]

得到每个 Expert 的分数。例如:

Expert Score
E1 0.05
E2 0.02
E3 0.61
E4 0.12
E5 0.20

如果 Top-K = 2,就选出分数最高的 E3 和 E5,最终输出是这两个 Expert 结果的加权和:

y=p3 E3(x)+p5 E5(x)y = p_3 \, E_3(x) + p_5 \, E_5(x)y=p3E3(x)+p5E5(x)

整个 Router 的流程可以画成:

Token x ∈ R^d

Router: softmax(x·Wr)

N 个 Expert 分数

Top-K 选择

Expert 3

Expert 5

加权求和
y = p3·E3 + p5·E5


16.5 MoE 在 Transformer 中的位置:每层独立的专家团队

前面讲的都是"一个 MoE 层"内部发生了什么。但一个完整的 Transformer 有几十个 Block,MoE 到底装在哪里、各层之间是什么关系?这是初学者最容易混淆的地方。

先说结论:

在典型的 Transformer-based MoE 模型中,MoE 通常是替换某些 Transformer Block 里的 FFN / MLP 子层;如果每个 Block 都采用 MoE,那么每个 Block 都有自己独立的一组 Experts 和自己的 Router。

16.5.1 普通 Transformer vs MoE Transformer

普通 Transformer 里,每个 Block 是 Attention + 一个 FFN。假设有 32 个 Block,这 32 个 FFN 本来就是不同的参数。MoE Transformer 只是把其中的 FFN 换成"Router + 多个 Expert":

MoE Transformer Block

Self-Attention

Router

Expert 1

Expert 2

... Expert 64

普通 Transformer Block

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/richard_first/article/details/164508186

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--