AI++
模型能力·进阶·9 分钟阅读·AI++ 编辑部

无辅助损失 MoE:DeepSeek-V3 让专家负载均衡不再「伤主任务」

传统 MoE 用一个辅助损失(auxiliary loss)逼专家负载均衡,但这会干扰主任务、拉低最终质量。 DeepSeek-V3 提出无辅助损失的均衡方案:在路由打分上加一个动态 bias,bias 由负载统计更新而非梯度驱动。 这样均衡控制彻底脱离主损失,模型质量回升、训练更稳,是 MoE 工程化的重要一步。

一句话结论

DeepSeek-V3 抛弃了 MoE 训练里用了多年的「辅助损失均衡」,改用一个与梯度无关的动态 bias 项来调节专家路由——均衡照样达成,主任务不再被拉扯,模型最终质量明显提升。

背景问题

Mixture-of-Experts(MoE)让模型「参数多但激活少」:每个 token 只走少数几个专家,总参数量大但单次计算量小。这让大模型能在可控算力下扩张参数。

但 MoE 有个老毛病:负载不均衡。路由器(gate)很容易陷入「赢家通吃」——少数专家被疯狂选中,其他专家闲着、训不动。这会导致:

  • 算力浪费:闲置专家占显存却不干活。
  • 容量溢出:热门专家的 token buffer 撑爆,多余 token 被丢弃(drop)。
  • 质量塌缩:模型实际只用了几个专家,等效参数量远小于设计值。

传统解法是加一个辅助损失(auxiliary loss),惩罚负载不均:

$$ \mathcal{L}{\text{aux}} = \alpha \cdot N \sum{i=1}^{N} f_i \cdot P_i $$

其中 $f_i$ 是专家 $i$ 实际接收的 token 比例,$P_i$ 是路由器给专家 $i$ 的平均概率。当所有专家均匀时这个值最小,不均时变大,于是梯度推着路由器走向均衡。

问题在于:这个 $\mathcal{L}{\text{aux}}$ 和主语言建模损失 $\mathcal{L}{\text{main}}$ 是加在一起反传的。它俩的目标经常打架——主任务想让最合适的专家接 token,辅助损失想让所有专家均匀接 token。$\alpha$ 调大均衡好但质量掉,调小质量好但均衡崩。这是一个长期存在、没人完全满意的折中。

核心思路

DeepSeek-V3 的思路直接:既然辅助损失是为了调节路由打分,那我直接在路由打分上加一个可调节的 bias,但让这个 bias 不参与梯度反传。

回顾 MoE 路由:对每个 token $t$,路由器算每个专家的分数 $s_i = \text{softmax}(e_i \cdot h_t)$,然后选 top-k 个专家。DeepSeek-V3 把它改成:

$$ s_i = \text{softmax}(e_i \cdot h_t + b_i) $$

其中 $b_i$ 是专家 $i$ 的偏置项。关键约束:$b_i$ 在反传时被 detach,梯度不流过它

那 $b_i$ 怎么更新?用一个简单的、基于负载统计的规则:

  • 如果专家 $i$ 当前负载偏轻(接收的 token 少),就把 $b_i$ 调大一点,让它更容易被选中;
  • 如果专家 $i$ 负载偏重,就把 $b_i$ 调小,抑制它。

更新不依赖梯度,只依赖运行时的负载计数,类似一个控制器里的「积分项」。这样:

  • 均衡目标被完全外移出主损失,$\mathcal{L}_{\text{main}}$ 和均衡不再互相拉扯。
  • bias 只在推理路由时起作用,相当于动态调整专家的「吸引力」,不影响模型学到的表示。
  • 训练全程没有一个需要调的 $\alpha$,少一个超参,工程更省心。

关键技术点

1. bias 更新是「无梯度控制回路」

把 bias 更新看成一个反馈控制问题:负载是观测值、bias 是控制量、目标是均衡。这种思路在系统调度里很常见,但放到深度学习里相对新鲜——大多数训练都默认「所有可学参数都靠梯度更新」。DeepSeek-V3 证明:不是所有该变的东西都必须靠梯度变

2. 偏置只影响「选谁」,不影响「学什么」

注意 $b_i$ 是加在 softmax 输入上的。它改变 token 选哪些专家,但:

  • 一旦专家选定,该 token 在该专家内部的计算、梯度都和没 bias 时一样
  • bias 不进入专家权重的梯度,专家学到的能力完全由数据驱动。

这是它比辅助损失干净的根本原因:辅助损失的梯度会渗进专家权重,把专家往「均衡友好」的方向推,扭曲了表示;bias 不会。

3. 配合「偏置-free 推理」

一个细节:推理时 bias 还要不要保留?DeepSeek-V3 在推理阶段保留 bias,因为它本质上反映的是「该专家被偏置到的状态」,删掉会破坏训练-推理一致性。但 bias 值在训练收敛后趋于稳定,不影响推理成本。

4. 与「共享专家」协同

DeepSeek-V2/V3 还用了「共享专家」设计:每个 token 除了走 top-k 路由专家,还必走几个共享专家。共享专家承担通用能力、路由专家承担专精能力。无辅助损失均衡让路由专家分工更干净——以前辅助损失会把本应专精的专家也往通用方向拉,现在不会了。

5. 序列级而非 token 级辅助损失(前身)

DeepSeek-V2 已经注意到辅助损失的副作用,提出过「序列级辅助损失」(在一个序列内做均衡约束,缓解 batch 内不均)。V3 的无辅助损失方案是这个思路的彻底化——干脆把均衡赶出损失函数。

效果与局限

效果:

  • DeepSeek-V3 报告:在相同配置下,无辅助损失方案比传统辅助损失在最终 benchmark 上有稳定提升(论文给出了多个任务的对比),且训练全程没有负载崩塌。
  • 训练更稳:去掉了 $\alpha$ 这个难调的超参,不需要在不同训练阶段动态调 $\alpha$。
  • 专家利用率更均匀:监控显示各专家接收的 token 数方差显著小于辅助损失方案。

局限:

  • bias 更新规则仍需调参。bias 的更新步长、判定「偏轻/偏重」的阈值都需调,只是从「调一个 loss 系数」换成「调控制器的几个参数」,并非完全免调。
  • 强依赖高效 all-to-all 通信。负载统计要在多卡间汇总,通信开销在高专家数下不容忽视。
  • 公开复现有限。DeepSeek 之外,社区对无辅助损失 MoE 的复现还在早期,泛化性结论需更多验证。
  • 和 top-k 路由强绑定。bias 加在 softmax 上的设计针对 top-k 路由,对其他路由形式(如专家选择路由 Expert Choice)需重新设计。

谁该关心

  • 做 MoE 训练的人:如果你被辅助损失的 $\alpha$ 折磨过、见过它把质量拉低,这是目前最干净的替代方案,值得严肃评估。
  • 大模型架构设计者:无辅助损失代表了一种「把控制逻辑外移出梯度」的思路,这种思路对其他需要均衡/约束的场景(如多任务平衡、数据混合比例)也有启发。
  • 复刻 DeepSeek-V3 的团队:这是 V3 的核心架构改动之一,跳过它复现质量会打折。
  • 研究稀疏模型的人:它重新定义了「均衡」这件事该怎么做,是 MoE 工程化的一个分水岭。

一个判断:无辅助损失 MoE 不会立刻取代所有辅助损失方案——大量存量代码、教材、论文都基于辅助损失,迁移有成本。但它在「质量敏感、训练成本高」的场景下优势明显,很可能成为新一代大 MoE 模型的默认选择。

MoE负载均衡稀疏激活模型架构