前两篇的方法各有局限:Importance Loss 不反映实际 token 数,Expected Load Loss 依赖噪声推导。工业界需要一种实现简单、同时捕捉"实际分配"和"Router 偏好"的方案。Switch Transformer 与 GShard 采用的 f·P 辅助损失 满足了这一需求,成为当前最主流的软正则方法。
核心定义
设模型有 $N$ 个专家,一个 batch 内有 $T$ 个 token,每个 token 选 $k$ 个专家。
定义两个量:
- $f_i$:专家 $i$ 实际收到的 token 数 ÷ 总分配次数($T \times k$)。这是一个硬计数,反映真实的路由结果。
- $P_i$:Router 对专家 $i$ 输出的平均软概率(所有 token 上该专家 softmax 分数的均值)。这是一个连续值,携带梯度信息。
均衡损失为:
$$L = \alpha \sum_{i=1}^{N} f_i \cdot P_i$$
理想均匀状态下,$f_i = 1/N$,$P_i = 1/N$,损失值为 $\alpha / N$。两者越偏离均匀,损失越大。
用一个例子走通
沿用前文的设定:3 个专家,4 个 token,Top-1 路由。假设实际路由结果为:
- token 1 → E0
- token 2 → E0
- token 3 → E1
- token 4 → E0
总分配次数为 4。各专家的 $f_i$:
- $f_0 = 3/4 = 0.75$
- $f_1 = 1/4 = 0.25$
- $f_2 = 0/4 = 0$
再假设 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 |
各专家的 $P_i$(逐列平均):
- $P_0 = (0.70 + 0.60 + 0.10 + 0.20) / 4 = 0.40$
- $P_1 = (0.20 + 0.30 + 0.80 + 0.20) / 4 = 0.375$
- $P_2 = (0.10 + 0.10 + 0.10 + 0.60) / 4 = 0.225$
损失为 $\alpha \times (0.75 \times 0.40 + 0.25 \times 0.375 + 0 \times 0.225) = \alpha \times 0.39375$。
若路由完全均匀($f_i = 1/3$,$P_i = 1/3$),损失为 $\alpha \times 0.333$。当前值偏高,说明分配偏斜,优化器会推动 Router 降低 E0 的 $P_i$,同时让其他专家获得更多实际分配。
为什么同时需要 f 和 P
| 分量 | 性质 | 作用 |
|---|---|---|
| $f_i$ | 离散硬计数,不可微 | 反映真实负载,但无法直接反传梯度 |
| $P_i$ | 连续软概率,可微 | 为 Router 提供梯度方向 |
两者相乘,损失函数既能感知真实分配结果,又能通过 $P_i$ 将梯度回传到 Router 参数。$f_i$ 过大时,损失推动 Router 降低该专家的 $P_i$,从而减少后续被选中的概率。
超参数 α 的权衡
$\alpha$ 控制均衡惩罚的强度:
- 过小:惩罚信号弱,Router 仍可能偏科
- 过大:均衡梯度干扰任务损失的优化,迫使本应路由到某专家的 token 改道,损害模型主目标
实践中 $\alpha$ 通常取较小值(如 0.01),在均衡与主任务之间取得平衡。
小结
| 方法 | 均衡目标 | 实现复杂度 | 工业应用 |
|---|---|---|---|
| Importance Loss | 权重总和 | 低 | 已基本淘汰 |
| Expected Load Loss | 预计 token 数 | 高(需噪声推导) | 较少使用 |
| f·P 辅助损失 | 实际分配 × 软概率 | 低 | 主流方案 |
f·P 损失简洁有效,但它仍属于软正则——不保证严格均衡,且引入的均衡梯度可能干扰主任务。下一篇将讨论如何在多粒度上扩展这一思路,以及工程层面的硬兜底机制。
**下一篇预告:多层级辅助损失与 Expert Capacity——从专家级均衡到设备级、通信级均衡,以及 Token Dropping 的取舍。