Skip to content
🔗 分享本题
查看我的学习进度 →
💡 答案要点

MoE = 让不同的 token 走不同的专家网络,训练成本低但推理能力随专家数线性增长。

标准 FFN vs MoE-FFN:

标准 FFN(GPT-4、Llama 等):
  每个 token 都经过同一组参数(W1 → Gate → W2)
  参数量 = seq_len × batch_size × (d_ff + d_ff) × 2
  → 每个 token 都要算全部参数

MoE FFN(Mixtral、LLaMA-MoE 等):
  每个 token 只选 Top-K 个专家处理
  参数量 = seq_len × batch_size × num_experts × (d_ff + d_ff) / 路由选择率
  → 总参数多 10 倍,但每个 token 只算 2 个专家

MoE 核心组件:

┌───────────────┐
│ Input Token   │
│ embedding     │
└──────┬────────┘

┌───────────────┐
│  Gating Network │  ← 路由决策:哪个 token 去哪些专家
│  Top-K Router   │     通常用带噪声的 softmax
└──────┬────────┘

┌───────────────┐    ┌───────────────┐
│ Expert 1 FFN  │◄──►│ Expert 2 FFN  │
└──────┬────────┘    └──────┬────────┘
       ▼                    ▼
┌──────────────────────────┐
│    Weighted Sum + Output  │
└──────────────────────────┘

路由策略详解:

python
# 典型实现(Top-2 MoE)
class MoERouter(nn.Module):
    def __init__(self, d_model, num_experts, top_k=2):
        self.gate = nn.Linear(d_model, num_experts)
        self.top_k = top_k

    def forward(self, hidden_states):
        # 原始分数
        raw_logits = self.gate(hidden_states)  # (batch, seq, num_experts)

        # 加噪声负载均衡(防止某些专家被独占)
        noise = torch.randn_like(raw_logits) * 0.01
        noisy_logits = raw_logits + noise

        # Top-K 选择
        gates = F.softmax(noisy_logits, dim=-1)
        top_values, top_indices = torch.topk(gates, self.top_k, dim=-1)

        return top_values, top_indices

2026 年主流 MoE 变体:

方案特点代表模型
Dense Transformer + MoE FFN仅 FFN 层做 MoE,attention 保持密集Mixtral 8x7B、LLaMA-3.1-405B-MoE
Fully Sparse MoE多层甚至 attention 也做 MoEGemini Ultra
Switch TransformerTop-1 routing,极简路由Google 大规模实验
DeepSeek MoE共享专家 + 专用专家分离DeepSeek-V2/V3

MoE 的挑战:

1. 负载均衡(Load Balancing)
   问题:路由器倾向于把样本集中到少数专家
   解决:辅助损失(auxiliary loss)惩罚不平衡
         loss_aux = α × Σ_i f_i × E_i
   
2. 通信开销(Communication)
   在多 GPU 并行时,token 分散到不同设备上的专家
   需要 All-to-All 通信来路由 token
   解决:专家并行(Expert Parallelism)、分组策略

3. 推理延迟
   Top-2 MoE 意味着每个 token 要运行 2 个专家 FFN
   吞吐量 ≈ 同规模 Dense 模型的 0.5x~0.8x
   但每 token 成本更低(总参数量分摊)

性能对比(相同有效参数量):

| 配置        | 总参数 | 活跃参数 | 每 token 成本 | 吞吐 | 质量 |
|-------------|--------|----------|--------------|------|------|
| Dense 70B   | 70B    | 70B      | 100%         | 100% | 基准 |
| MoE 8×7B    | 56B    | 14B      | 20%          | 60%  | 相当 |
| MoE 64×1B   | 64B    | 2B       | 3%           | 35%  | 略低 |

面试话术:

"MoE 的核心思想是'稀疏激活'——每 token 只经过少数专家。Mixtral 8×7B 有 56B 总参数,但每个 token 只激活 14B,相当于用 1/4 的计算成本获得 8 倍的表达能力。2026 年的主流是'Dense Attention + Sparse FFN'混合模式,兼顾推理效率和训练稳定性。关键在于负载均衡——如果路由器把所有样本都推到几个热门专家,MoE 的优势就没了。"

⭐ 面试加分项:

  • 能解释 MoE 的 auxiliary load balancing loss 公式和设计动机
  • 理解 expert parallelism 中的 all-to-all 通信模式
  • 知道 Switch Transformer(Top-1)vs Top-2 MoE 的区别
  • 能讨论 MoE 在推理时的缓存友好性挑战(KV cache 无法复用专家特征)