如果 router 坍缩到只选一个专家会怎样、怎么解决?
这是 MoE 面试中非常经典的一个追问。要回答好,需要说清楚三件事:坍缩是什么、会导致什么后果、怎么解决。
正常情况下,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$ 上。
MoE 的卖点是“总参数量大、单 token 计算量小”。如果只有 1 个专家在工作,那实际有效的参数量就退化成了一个普通 FFN,花了 MoE 的存储和通信成本,却没拿到 MoE 的容量收益。
热门专家的梯度会不断累积、更新幅度过大,容易导致数值不稳定。Switch Transformer 等工作中观察到,router 一旦开始偏向,往往会自我强化,最终崩溃。
不同专家本应学到不同的子模式(比如不同语言、不同语法结构、不同领域)。坍缩后模型失去这种“分工”,表达能力下降,效果可能还不如同等计算量的稠密模型。
工程上常用的监控指标:
$$ H = -\sum_{i=1}^{N} p_i \log p_i $$
熵越低说明分布越集中。熵持续下降且趋近 0,就是坍缩的前兆。
解决思路可以分为四类:加约束、加噪声、改路由、改初始化与训练策略。
最经典的做法。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$ 是辅助损失权重。
给每个专家设一个容量上限:
$$ \text{capacity} = \text{capacity\_factor} \times \frac{T}{N} $$
超出容量的 token 不再进入该专家,而是:
这能防止单个专家被压垮,但会损失部分 token 的计算。容量因子是超参,通常取 1.0~2.0。
惩罚 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 等工作中被采用。
训练时给 router logits 加高斯噪声,增加探索、打破“强者恒强”的正反馈:
$$ \tilde{z}_i = z_i + \epsilon_i, \quad \epsilon_i \sim \mathcal{N}(0, \sigma^2) $$
推理时通常去掉噪声。噪声让冷门专家也有机会被选中,从而获得梯度。
有些工作把“路由均衡”和“专家专业化”解耦,比如引入对比学习式的专家分工目标,或使用可微的软分配 + 退火到硬分配,让专家先分化再固化。
Router 坍缩的本质是路由分布退化成 one-hot,MoE 退化成单个 FFN;核心解法是用辅助损失、容量约束、z-loss、噪声和路由机制设计,持续给冷门专家创造被选中的机会,同时在训练中监控路由熵和专家利用率,早发现早干预。
评论专区
评论加载中...登录后即可发表评论