✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

Router 坍缩(Router Collapse)问题详解

创建时间:2026-09-11 更新时间:2026-09-11 阅读次数:1523 次 分类:模型架构与Transformer

如果 router 坍缩到只选一个专家会怎样、怎么解决?

这是 MoE 面试中非常经典的一个追问。要回答好,需要说清楚三件事:坍缩是什么、会导致什么后果、怎么解决。


一、什么是 Router 坍缩

正常情况下,router 应该根据 token 的内容,把不同 token 分配到不同专家,让每个专家都得到训练、各司其职。

Router 坍缩指的是:router 学到了一个“偷懒”的解,无论输入是什么 token,都倾向于把 token 路由到同一个(或极少数几个)专家。其余专家几乎收不到 token,形同虚设。

用数学语言说,设 router 对专家 $i$ 的平均选择概率为 $p_i$,坍缩时会出现:

$$ p_j \to 1, \quad p_i \to 0 \quad (i \neq j) $$

即概率质量高度集中到某一个专家 $j$ 上。


二、坍缩会导致什么后果

1、模型容量名存实亡

MoE 的卖点是“总参数量大、单 token 计算量小”。如果只有 1 个专家在工作,那实际有效的参数量就退化成了一个普通 FFN,花了 MoE 的存储和通信成本,却没拿到 MoE 的容量收益。

2、负载严重不均,训练效率骤降

  • 被选中的专家过载,需要处理几乎所有 token,算力成为瓶颈。
  • 其他专家长期得不到梯度更新,参数几乎不更新。
  • 在专家并行(expert parallelism)下,某些 GPU 满载、某些 GPU 空闲,并行效率极差。

3、训练不稳定甚至发散

热门专家的梯度会不断累积、更新幅度过大,容易导致数值不稳定。Switch Transformer 等工作中观察到,router 一旦开始偏向,往往会自我强化,最终崩溃。

4、泛化能力下降

不同专家本应学到不同的子模式(比如不同语言、不同语法结构、不同领域)。坍缩后模型失去这种“分工”,表达能力下降,效果可能还不如同等计算量的稠密模型。


三、怎么检测坍缩

工程上常用的监控指标:

  • 每个专家的 token 分配比例:如果某个专家长期占比接近 100%,就是危险信号。
  • 路由熵(routing entropy):定义在 router 输出分布上,

$$ H = -\sum_{i=1}^{N} p_i \log p_i $$

熵越低说明分布越集中。熵持续下降且趋近 0,就是坍缩的前兆。

  • 辅助损失值:辅助损失持续偏高,说明负载均衡在恶化。
  • 专家利用率(expert utilization):统计有多少专家被“激活过”。

四、怎么解决

解决思路可以分为四类:加约束、加噪声、改路由、改初始化与训练策略。

1、辅助损失(Auxiliary Loss)

最经典的做法。Switch Transformer 提出的辅助损失鼓励 router 分配给各专家的概率均匀。

设一个 batch 中有 $T$ 个 token,$N$ 个专家,$f_i$ 是分给专家 $i$ 的 token 比例,$p_i$ 是 router 给专家 $i$ 的平均概率,则:

$$ \mathcal{L}_{\text{aux}} = \alpha \ldots N \sum_{i=1}^{N} f_i \ldots p_i $$

当分布均匀时 $f_i = p_i = 1/N$,该损失取最小值。$\alpha$ 是辅助损失权重。

  • 优点:简单、有效、广泛使用。
  • 缺点:$\alpha$ 需要调参;太大影响主任务,太小不起作用。

2、专家容量(Expert Capacity)与溢出处理

给每个专家设一个容量上限:

$$ \text{capacity} = \text{capacity\_factor} \times \frac{T}{N} $$

超出容量的 token 不再进入该专家,而是:

  • 丢弃(drop),直接走残差连接;或
  • 绕过,走一个共享的 fallback 路径。

这能防止单个专家被压垮,但会损失部分 token 的计算。容量因子是超参,通常取 1.0~2.0。

3、Router z-loss

惩罚 router logits 的幅度,避免 logits 过大导致 softmax 过度尖锐(过度尖锐就会坍缩):

$$ \mathcal{L}_z = \frac{1}{T} \sum_{t=1}^{T} \left( \log \sum_{i=1}^{N} e^{z_i^{(t)}} \right)^2 $$

其中 $z_i^{(t)}$ 是第 $t$ 个 token 对专家 $i$ 的 router logit。这一项能显著提升训练稳定性,ST-MoE 等工作中被采用。

4、噪声路由(Noisy Routing)

训练时给 router logits 加高斯噪声,增加探索、打破“强者恒强”的正反馈:

$$ \tilde{z}_i = z_i + \epsilon_i, \quad \epsilon_i \sim \mathcal{N}(0, \sigma^2) $$

推理时通常去掉噪声。噪声让冷门专家也有机会被选中,从而获得梯度。

5、改路由粒度

  • Token-level 路由最容易坍缩,因为每个 token 独立决策,容易形成一致偏好。
  • Sentence-level / Task-level 路由让整句或整个任务共享路由决策,约束更强,分布更稳。
  • Expert Choice routing:反过来让每个专家主动选择自己要处理的 token,从机制上保证每个专家都能拿到固定数量的 token,天然负载均衡,几乎不会坍缩。代价是实现更复杂,且 token 不再“自主选择”专家。

6、初始化与训练技巧

  • router 权重初始化要小,避免一开始就产生极端偏好。
  • 提高 router 的学习率或单独调参,让它能跟上专家变化。
  • warm-up:训练初期用较均匀的路由(甚至随机路由),等专家初步分化后再让 router 正常学习。
  • 梯度裁剪:防止热门专家梯度爆炸。
  • 定期重置 / 重平衡:监控到某专家占比过高时,强制干预。

7、从目标函数上解耦

有些工作把“路由均衡”和“专家专业化”解耦,比如引入对比学习式的专家分工目标,或使用可微的软分配 + 退火到硬分配,让专家先分化再固化。


五、面试中怎么答(建议结构)

  • 1、先定义:坍缩就是 router 把绝大多数 token 都送给同一个专家,其他专家收不到 token。
  • 2、说后果:有效容量退化成单个 FFN、负载不均、训练不稳、泛化下降。
  • 3、给检测:看专家 token 占比、路由熵、辅助损失。
  • 4、给方案:辅助损失、容量限制、router z-loss、噪声路由、改路由粒度(Expert Choice)、初始化与 warm-up。
  • 5、点出取舍:辅助损失权重要调、容量丢弃会损失信息、Expert Choice 实现复杂但最稳。

六、一句话总结

Router 坍缩的本质是路由分布退化成 one-hot,MoE 退化成单个 FFN;核心解法是用辅助损失、容量约束、z-loss、噪声和路由机制设计,持续给冷门专家创造被选中的机会,同时在训练中监控路由熵和专家利用率,早发现早干预。


📌 面试天下网:一款服务于大一新生的口袋书,让大家在无聊的公共课上可以学习大模型技术!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录
📌 网站公告:【大模型/Agent面试陪练1V1指导】正式启动......

评论专区

评论加载中...