Files
note_sync/大模型/MoE 混合专家架构.md

10 KiB
Raw Permalink Blame History

MoE 混合专家架构

Mixture of Experts — 用稀疏激活实现"参数量 vs 计算量"的解耦,是 DeepSeek V4、GPT-4、Mixtral 等旗舰模型的核心架构


一、为什么要 MoE?

密集模型的困境

传统 Transformer 中,每个 Token 流经所有 FFN 1 参数:

Token → FFN(全部参数参与计算)→ 输出

参数量越大 → 每次推理计算量越大 → 训练和推理成本线性增长。

MoE 的核心思想

"参数多,但每次只用一小部分"

Token → 路由器 → 选择最相关的几个专家 → 只激活它们 → 输出
                      ↑
                  其他专家保持休眠
密集模型 MoE 模型
总参数量 100B 可以到 1.6T(16倍)
每次推理计算量 100B 仅约 36B
训练效率 基准 更高(同算力下能训练更大模型)
推理延迟 基准 需要加载更多权重到显存

二、MoE 层的工作原理

数学公式


\text{MoE}(x) = \sum_{i \in \text{TopK}(G(x), k)} G(x)_i \cdot E_i(x)

其中:

符号 含义
G(x) 路由器/门控网络,输出每个专家的"置信度分数"
TopK(G, k) 选择分数最高的 k 个专家(通常 k=2~8)
E_i(x) 第 i 个专家(一个 FFN 1 子网络)
G(x)_i Softmax 归一化后的专家权重

一句话总结

输入 Token → 路由器打分 → 选 Top-K 专家 → 加权合成输出

结构图解

输入 Token x
    │
    ▼
┌───────────┐
│  路由器 G   │  ← 一个小型线性层,输出 N 个分数
│  (Gate)    │     (N = 专家总数)
└─────┬─────┘
      │ Softmax 归一化
      │ 选出分数最高的 k 个
      ▼
┌─────────────────────────────────────┐
│        N 个专家(Expert)             │
│  ┌─────┐ ┌─────┐ ┌─────┐    ┌─────┐│
│  │ E₁  │ │ E₂  │ │ E₃  │... │ Eɴ  ││
│  │💤   │ │🔥   │ │💤   │    │🔥   ││
│  └─────┘ └──┬──┘ └─────┘    └──┬──┘│
│             │                 │     │
│  只激活 k=2 个专家!           │     │
└─────────────┼─────────────────┼─────┘
              │                 │
              └─── 加权求和 ────┘
                    │
                    ▼
              输出 MoE(x)

三、MoE 层 vs 标准 FFN 层

标准 Transformer 块:                使用 MoE 的 Transformer 块:

注意力层 [^Attn]                       注意力层 [^Attn]
   ↓                                    ↓
FFN(全部参数)                       路由器 → 选择专家
   ↓                                    ↓
注意力层 [^Attn]                     被选中的专家(稀疏激活)
   ↓                                    ↓
FFN(全部参数)                       注意力层 [^Attn]
                                        ↓
                                    路由器 → 选择专家
                                        ↓
                                    被选中的专家(稀疏激活)

只在 FFN 层引入 MoE,注意力层保持不变(注意力机制本身就负责 Token 间信息交互,无需稀疏化)。


四、关键设计维度

1. 专家粒度

类型 说明 示例
粗粒度 少量大专家(如 8 个,每个完整 FFN 大小) 早期 MoE、Mixtral 8×7B
细粒度 大量小专家(如 384 个微专家,每个很小) DeepSeek-V3/V4(64 个微专家/层,激活 6 个)

细粒度的优势:

  • 路由组合更灵活:从 N 选 k 变为 mN 选 mk,组合数暴增
  • DeepSeek V4 每层约 3630 万种可能的专家组合
  • 同等总参数下,每个专家更小,训练/推理更灵活

2. 共享专家 vs 路由专家

类型 说明
共享专家 始终激活,捕捉通用模式(语法、基础常识)
路由专家 按 Token 动态选择,负责特定领域(数学、代码、翻译...)

DeepSeekMoE 采用两层设计:

  • 2 个共享专家(always on)
  • 62 个路由专家(每个 Token 激活 6 个)

共享专家提升训练稳定性,但可能降低专家专门化程度。

3. 路由器设计

简单线性路由器(当前主流):

router_logits = W_g · x     ← 一个小矩阵,N × d_model
topk_experts = TopK(softmax(router_logits), k)

实际推理时的路由模式:

  • 每个 Token 独立路由(不考虑上下文)
  • 序列中相邻 Token 可能路由到不同专家

五、负载均衡 — MoE 的核心挑战

问题

如果路由器"偷懒",总是选固定的几个专家 → 其他专家闲置 → 退化为密集模型

传统方案:辅助损失(Auxiliary Loss)


L_{total} = L_{主任务} + \alpha \cdot L_{负载均衡}

强制惩罚专家使用不均匀的情况。问题:梯度冲突,可能导致训练不稳定。

2025 前沿:无梯度负载均衡

# 动态偏置调整 — 不干扰主损失梯度
logits_i(t+1) = W_g · x + b_i(t) - γ · (f_i(t)/f̄(t) - 1)

其中:

  • f_i(t):当前被路由到专家 i 的 Token 比例
  • f̄(t):理想平均比例 = 1/N
  • 效果:专家使用率的变异系数 < 0.1,无梯度冲突

六、2025 年前沿进展

1. DAG-MoE 2 (ICML 2026)

不是简单加权平均专家输出,而是把选中的专家排列成有向无环图(DAG, Directed Acyclic Graph),实现结构化的专家聚合(DAG 聚合)

传统 MoE:  E₁↘
            E₂ → 加权平均 → 输出
            E₃↗

DAG-MoE:   E₁ → E₃ ↘
            E₂ → E₄ → E₆ → 输出(信息流经多个专家)
  • 允许单层内多步推理
  • 模型学习最优的专家聚合结构(每个输入不同)
  • 同等 FLOPs 下更强的表达能力

2. MoLE:查找表专家(ICML 2025 Oral)

将训练好的 FFN 专家重新参数化为查找表(LUT),专家计算变为查表操作

  • 推理速度接近密集模型
  • 大幅降低显存占用
  • 使 MoE 在内存受限设备上部署成为可能

3. MoE + MLA(Multi-head Latent Attention,多头潜在注意力) 3

正交瓶颈联合优化:

瓶颈 方案
FFN 计算量大 MoE 稀疏激活
注意力 KV 缓存大 MLA 低秩压缩
  • ρ = 1/2 时:KV 缓存减少 68%,推理加速 3.2×
  • 困惑度仅下降 0.8%
  • DeepSeek V4 使用此组合

4. MoE-X:可解释 MoE(ICML 2025)

  • 将 MoE 层理解为等效的大型稀疏 MLP
  • 强制专家内部也做稀疏激活
  • 可解释性超越 Sparse Autoencoder(SAE)方法

七、主流 MoE 模型对比

模型 总参数 激活参数 专家数 激活数 特点
Mixtral 8×7B 46.7B 12.9B 8 2 经典粗粒度 MoE
DeepSeek-V3 671B 37B 256 8 细粒度 + 共享专家
DeepSeek-V4 Pro 1600B 36B 384/层 6 细粒度 + MLA + DSpark
DeepSeek-V4 Flash 284B 13B 精简 精简 Pro 的轻量版
GPT-4(传闻) 1.8T ~280B 16(推测) 2 早批大规模 MoE

趋势:专家数量越来越多,每个专家越来越小(细粒度),激活参数占比越来越低。


八、MoE 的代价

代价 说明
显存占用 所有专家都在 VRAM 里,即使大部分不激活 → 需要更多 GPU
通信开销 多 GPU 部署时,Token 需要跨 GPU 路由到专家
训练不稳定 负载均衡损失与主损失可能冲突
微调困难 稀疏激活 → 梯度更稀疏 → 微调更难收敛
批次大小 每个专家实际收到的 Token 少 → 需要较大 batch size

九、总结

MoE = 用路由器在大量专家中选择少数激活,实现"参数膨胀但计算可控"

关键取舍:
  优势:同等算力下更大的模型容量、更好的性能/成本比
  代价:更高显存、更复杂的工程、训练和微调挑战

2025 年趋势:
  细粒度 → DAG 聚合 → 可解释 → 查找表推理 → 与 MLA 协同

相关链接



脚注


  1. FFN(Feed-Forward Network,前馈神经网络):Transformer 中每个位置的独立全连接子网络。结构为两层 MLP:W₂ · Act(W₁ · x + b₁) + b₂,参数量约占整个 Transformer 块的 2/3,是模型"知识存储"的主要位置。现代模型多使用 SwiGLU 激活的变体。详见 FFN 前馈网络详解。 ↩︎

  2. DAG 聚合(DAG Aggregation):将选中的专家按有向无环图(DAG)的结构进行串联/并联组合,而非传统的简单加权平均。每个输入路由到一组专家后,模型学习这些专家之间最优的信息流动路径——例如 E₁ 的输出作为 E₃ 的输入,E₂ 的输出则直接进入最后阶段。这允许在单层 MoE 内完成多步推理,表达能力强于传统加权求和,同等 FLOPs 下能取得更好性能。DAG-MoE 发表于 ICML 2026。 ↩︎

  3. MLA(Multi-head Latent Attention,多头潜在注意力):DeepSeek 提出的注意力压缩技术。核心思路是将 K 和 V 首先投影到一个低维潜在空间(d_latent << d_model),再从中展开供注意力计算使用。这大幅减少了 KV 缓存的显存占用——在 ρ = 1/2 时可缩减 68%,且对模型质量影响极小(困惑度仅降 0.8%)。MLA 与 MoE 是正交优化:MoE 省 FFN 计算,MLA 省注意力显存,两者叠加效果倍增。 ↩︎