MoE 做 SFT 时,任务损失只优化预测准确率,完全不关心 token 如何分配给专家。若 Router 持续偏好少数专家,其余专家将因长期拿不到梯度而退化。这是任务损失中漏掉的一个维度。
负载均衡的第一类思路是在损失函数中补一项惩罚,将均匀分配纳入优化目标。这类方法统称软正则——不强制均匀,仅通过梯度劝导 Router 调整偏好。本节用同一例子说明最早的两个软正则方法。
设定:3 个专家(E0、E1、E2),4 个 token,Top-1 路由。Router 输出的 softmax 概率如下:
| Token | E0 | E1 | E2 |
|---|---|---|---|
| t1 | 0.70 | 0.20 | 0.10 |
| t2 | 0.60 | 0.30 | 0.10 |
| t3 | 0.10 | 0.80 | 0.10 |
| t4 | 0.20 | 0.20 | 0.60 |
方法一:Importance Loss
每个专家的 Importance 定义为一个 batch 内所有 token 分配给该专家的概率之和。上表逐列求和得:E0 为 1.60,E1 为 1.50,E2 为 0.90。理想均匀值为 1.33。
损失函数计算这组 Importance 的变异系数平方(CV²),加到总损失中:
总损失 = 任务损失 + α × CV²
CV 是标准差与均值之比,消除了绝对尺度影响,只衡量相对离散程度。CV 越大,惩罚越重,反向传播会推动 Router 将信任分散到各个专家。
其盲区在于:Importance 只反映权重总和,不反映实际 token 数。两个专家可能拥有相同的 Importance,但一个接收少量高权重 token,另一个接收大量低权重 token,实际计算负载截然不同。
方法二:Expected Load Loss
为弥补上述盲区,Expected Load Loss 将惩罚目标从"权重总和"推进到"预计收到的 token 数"。
原始 MoE 在 Router logits 上施加随机噪声后再取 Top-1。利用噪声分布可估计每个专家对每个 token 成为 Top-1 的概率。沿用上例,加噪后的选中概率如下:
| Token | E0 | E1 | E2 |
|---|---|---|---|
| t1 | 0.80 | 0.15 | 0.05 |
| t2 | 0.70 | 0.20 | 0.10 |
| t3 | 0.10 | 0.60 | 0.30 |
| t4 | 0.75 | 0.15 | 0.10 |
各专家的期望负载为概率之和:E0 为 2.35,E1 为 1.10,E2 为 0.55。理想值为 1.33。损失函数惩罚期望负载的偏离,推动 Router 让预计 token 数趋向均匀。
相比 Importance Loss,Expected Load 更贴近实际计算负载。但其依赖 Noisy Top-k 的噪声推导,实现复杂。现代大模型更常用 f·P 辅助损失——无需噪声,实现更简洁。
小结
| 方法 | 补的漏洞 | 能否严格保证 | 主要局限 |
|---|---|---|---|
| Importance Loss | 权重总和太偏 | 否 | 不反映实际 token 数 |
| Expected Load Loss | 预计 token 数太偏 | 否 | 依赖噪声推导,实现复杂 |
两者均为软正则,通过损失函数补漏洞,但不保证结果。下一篇进入工业界主流方案:f·P 辅助损失。