MoE 混合专家:原理
MoE 输出: $$y = \sum_{i} G(x)_i \cdot E_i(x)$$ 稀疏 MoE 只激活 top-k 个专家:8 专家 k=2 时计算量降到约 1/4,**总参数不变、每 token 计算变少**。应用:GPT-4(传闻)、Switch Transformer、Mixtral 8x7B。 专家数经验:小模型 4-8 / 中 16-32 / 大 32-64;Mixtral 8 专家 k=2、Switch 2048 专家 k=1。
门控路由: $$G(x) = \text{Softmax}\left(\text{KeepTopK}(W_g x, k)\right)$$ ```python def keep_topk(scores, k): _, topk_indices = scores.topk(k, dim=-1) assignment = torch.zeros_like(scores, dtype=torch.bool) assignment.scatter_(-1, topk_indices, True) return torch.where(assignment, scores, float("-inf")) ``` **用 -inf 而非 0 的原因**:softmax 后未被选中的专家概率恰为 0、梯度只流向被选专家。
负载均衡损失(GShard/Switch 系,防"专家塌陷"——所有 token 挤向少数专家): $$L_{LB} = n^2 \cdot \overline{f_i \cdot P_i}$$ - $f_i$:专家 i 被激活的 token 比例(指示函数统计) - $P_i$:专家 i 的平均门控概率 工程实现:`_lb_losses` 列表在 keep_topk 内自动收集,训练时 `loss = ce_loss + lb_loss_scale * Σlb` 后清空。
**残差连接是 MoE 能 work 的精髓**: Block 结构 = Attention + MoE 双残差: $$x = x + \text{Attention}(x); \quad x = x + \text{MoE}(x)$$ 门控降维(hidden→experts 的 Wg)确实损失信息,但**残差保住了原始信息**——即使路由错了,主干信息不丢,专家只负责"增量的、分而治之的加工"。
PyTorch 实现
专家 = 两层 MLP(4 倍扩展):$E(x) = W_2 \cdot \text{GELU}(W_1 x)$;只对被选中的 token 计算: ```python class MoELayer(nn.Module): def forward(self, x): B, T, H = x.shape flat = x.view(-1, H) # (B*T, H) scores = self.topk_scores(flat) # gate → keep_topk → softmax out = torch.zeros_like(flat) for i, expert in enumerate(self.experts): mask = expert_scores[:, i] > 0 if mask.any(): # 空专家直接跳过 out[mask] += expert(flat[mask]) * expert_scores[mask, i].unsqueeze(-1) return out.view(B, T, H) ``` 配套统计监控:路由熵(过低=专家塌陷)、未使用专家数。
训练与生成要点(完整 Transformer 版): - 注意力用 `F.scaled_dot_product_attention` - 优化器 AdamW lr=2e-3;autocast fp16 + GradScaler - 生成用 `torch.multinomial` 采样(温度可控) - Config 参考:seq_len 64 / 4 层 / hidden 128 / 32 专家 / k=2
训练实验分析(有无负载均衡对照)
| 指标 | 有 LB | 无 LB | |------|-------|-------| | CE 训练损失 | 1.3 | 1.5 | | CE 验证损失 | 1.4 | 1.6 | | 路由熵 | 0.6 | 0.45(塌陷信号) | | 未使用专家 | ~0 | 10-17 / 32 | | LB 损失 | 收敛 | — | matplotlib 五联图逐项绘制即可复现该实验。
`lb_loss_scale` 调参指南:从 0.01 起调;LB 损失不降→加大,CE 损失被带偏→减小。 监控告警阈值(经验):路由熵 < 0.3 或未使用专家 > 总数 10% 时告警——MoE 训练的"体检指标"比单看 loss 更早发现问题。
技术资料检索方法
五步搜索路径(P0→P2 优先级): ```text ① 定名:给问题一个准确的术语(最重要的一步) ② ArXiv:找原始论文(P0) ③ GitHub:找官方实现(P0) ④ 官方文档/博客(P1) ⑤ 社区:Karpathy、李沐、同济子豪兄(P2,辅助理解) ```
arXiv 高级语法 + 30 分钟论文阅读法: ```text ti:qwen # 标题含 qwen au:Vaswani # 作者 cat:cs.CL # 分类限定 ``` 30 分钟法:Abstract → Introduction 末段(贡献清单)→ 图表 → 结论 → (需要再读方法细节)。
GitHub/HF 官方性验证: - 组织认证、star/issue 活跃度、commit 历史 - HF 模型卡片完整性;优先 **safetensors** 格式(安全性) - ModelScope 是国内镜像备选 - Google 操作符:`site:` 限定域、`"精确短语"`、`-排除词`
实战示范——查 Qwen3-VL 技术细节: ```text 1. 定名:Qwen3-VL(多模态视觉语言模型) 2. arXiv 检索 ti:"Qwen3-VL" → arXiv 2511.21631 3. GitHub:QwenLM/Qwen3-VL(官方组织) 4. HF/ModelScope 模型卡片:架构参数、显存需求 5. 社区:解读视频/博客辅助理解 DeepStack、Interleaved-MRoPE ``` 搜索模板可复用:`{技术名} site:arxiv.org` / `{技术名} site:github.com 官方`。
参考
     Switch Transformer 
     Mixtral of Experts