|
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)确实损失信息,但**残差保住了原始信息**——即使路由错了,主干信息不丢,专家只负责"增量的、分而治之的加工"。
|
|
专家 = 两层 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