1 MoE 要理解什么
训练分类模型时,我们常希望模型能处理更多样的样本:客户流失预测里既有合约即将到期的客户,也有刚开户的客户;短文本分类里既有体育新闻,也有科技新闻。增加模型参数可能提升表达能力,但如果每个样本都必须经过全部参数,训练和预测的计算量也会增长。MoE,即混合专家模型,尝试把部分计算交给若干可学习的专家,并为每个输入选择其中少量专家。这里的专家是神经网络中的参数模块,通常不是人工编写的业务规则,也不意味着它已经拥有可命名的专业知识。
先区分总参数量和激活参数量。设某层放置 8 个结构相同的专家,每个输入只选 2 个,那么模型拥有全部 8 个专家的参数,却只对当前输入执行被选中的专家。模型仍有嵌入、路由器、注意力或其他共享部分,因此不能把整个模型的计算简单说成原来的 2/8。总参数关系到存储、加载和训练状态占用;激活参数关系到当前输入参与的部分计算。理解这组区别,才能避免把“大模型容量”误读成“每次预测都免费变强”。
路由器是决定输入去向的可学习模块。它为专家产生分数,再依约定选择前 k 个专家,也就是 top-k。被选专家分别计算,结果按路由权重组合,然后送往后续层。在文本模型中,被分配的单位往往是 token,也就是文本切分后的处理单元;在表格或图像实验里,也可以让整条记录或某个局部表示参与路由。下文涉及数量时会明确单位。不能把“每个 token 选 2 个专家”误写为“整篇文章固定使用 2 个专家”。

MoE 适合讨论的核心问题是:在有限的单次计算预算下,增加可用参数是否能换来值得付出的质量提升。它不是分类任务的默认答案。以公开的 Telco Customer Churn 数据为例,输入可以包括任职月数、月费、合约类型、网络服务类型,标签是是否流失。应先建立逻辑回归或梯度提升树基线,再考虑神经网络及其 MoE 版本。数据量有限、类别特征处理不当或标签噪声较大时,增加专家可能只会扩大过拟合空间。
本课把 MoE 当作可观察的计算组织方式。你需要能描述输入如何分配、专家为何出现忙闲差异、容量限制如何影响结果,以及怎样用验证集和运行记录判断收益。专家并行的具体通信算法、复杂路由损失的推导和大规模训练实现留待后续。入门阶段先保持因果关系清楚:模型质量、分配行为和运行开销是需要同时记录的 3 类证据,任何单独的漂亮数字都不能代替它们。
2 专家路由与负载均衡
考虑包含 8 条表格记录的微型批次,模型有 4 个专家,每条记录采用 top-1,只选择 1 个专家。若分配结果是 2、2、2、2,专家接收量相同;若结果是 6、1、1、0,最后的专家没有处理记录,最忙专家则承担大部分计算。两种分配都满足“每条记录选择 1 个专家”,却会带来不同的运行效率和学习机会。负载均衡讨论的是这种实际分配,而不是专家参数的大小是否相同。
路由并非随机分组后永远固定。路由器会随训练更新,初期微小的分数差异可能使某些专家收到更多输入;这些专家获得更多训练机会后,又可能更容易被选中。实际训练常加入负载均衡相关的辅助目标,鼓励分配不要长期集中。辅助目标需要与分类损失一起看:只追求均匀可能把本来适合某个专家的样本硬分到别处,只追求当前任务损失又可能留下大量闲置专家。均衡是约束和诊断信号,不能代替任务目标。
top-k 决定每个输入能访问多少专家。top-1 的分配较少,top-2 允许组合 2 个专家的结果,但也增加专家调用和可能的通信。路由分数表示当前模块对分配的偏好,不应直接解释为分类置信度。例如路由器给某专家 0.8 的归一化权重,并不意味着这位客户有 80% 的流失概率。最终分类头才产生任务预测,而且预测概率是否可靠还需要在验证数据上检查。
观察专家时至少分清 2 种口径。分配计数是实际发往专家的输入数量;路由权重之和反映分配权重的累计大小。某专家接收很多输入,但这些输入上的权重偏低,计数占比和权重占比就可能不同。对于 top-2,1 个输入贡献 2 次专家分配,所以全部专家计数之和通常为输入数的 2 倍。绘图前应说明统计的是输入、token 还是专家调用,否则看似异常的总数可能只是口径不同。
均衡也不要求每个小批次严格平均。若 1 个批次碰巧包含相似的文本,某些专家较忙可以是正常现象;值得警惕的是多个训练窗口持续集中、验证性能没有收益、其他专家长期得不到有效更新。可以同时查看每批计数和较长窗口的均值,并按标签、文本长度或合约类型切片。切片用于寻找关联,不能直接宣称某专家就是“体育专家”或“长期合约专家”,这种命名需要稳定的样本证据。
3 容量、通信与掉队
专家容量是某个批次中允许某专家处理的分配数量上限,和模型参数容量不是同一个概念。若共有 N 个输入、每个输入选 k 个专家、专家数为 E,可以用 N×k/E 表示平均分配量。常见的教学近似是容量上限 C=向上取整(c×N×k/E),其中 c 为容量因子。真实实现还可能按设备或 token 分组计算、对容量进行对齐,本课公式用于解释约束,不是所有框架的统一定义。
例如 N=32、k=1、E=4、c=1.25,平均每个专家分到 8 个输入,容量上限为 10。如果原始需求是 16、8、6、2,第 1 个专家会出现 6 次超额分配。提高总容量可以缓解溢出,但即使另外 3 个专家还有空位,也不代表实现会自动把超额输入送给它们。是否重路由、是否保留共享支路,以及超额专家分支如何处理,都由具体实现决定,训练记录必须写清。

把超额分配称为“丢弃”容易引起误会。有些实现跳过该次专家分支,让输入沿残差路径继续传播;有些实现重路由;也有实现采用不丢弃的调度方式。它们并不等于删除原始训练样本或把标签清空。应该记录“尝试分配数、接纳数、超额数、实际处理策略”。如果 top-2 中只有 1 条分支被接纳,组合结果的处理也必须保持实现的一致语义,不能在报表里直接当成完整的 2 次计算。
当专家分布在不同设备上,输入表示需要被发送到对应设备,专家输出还要返回并重新排列。通信量受表示维度、数据类型、k 和分配位置影响,不能仅由专家总数推断。单设备教学实验可以帮助理解分配,却无法证明跨设备训练会有同样速度。数据搬运、等待和计算可能互相重叠,所以也不能把独立测到的通信耗时和计算耗时随意相加后当成端到端耗时。
“掉队”指某些计算参与者完成得更晚,迫使其余参与者等待。专家接收量不均是原因之一,设备速度差异、通信拥塞、输入长度差异也可能造成等待。若耗时最长的专家收到最多 token,负载不均是合理线索;若计数相近但耗时差异很大,就应继续检查设备和输入形状。容量因子过小可能使接纳计数看起来整齐,却隐藏大量超额分配,因此必须把容量检查前后的计数一起保存。
4 动手:观察一次专家利用率
准备使用公开 AG News 短文本分类数据,任务是预测新闻属于世界、体育、商业或科技中的哪类。输入采用标题与正文拼接后的文本,清洗时保留类别标签以外的文字字段。以官方训练集为基础,按类别分层抽取 10% 作为验证集,其余 90% 用于训练;官方测试集保持封存。若发现重复或近重复新闻,应按新闻组划分,避免同一内容同时出现在训练和验证中。保存划分索引和随机种子,才有资格比较不同路由设置。
建立相同文本编码器下的稠密前馈层基线与 MoE 前馈层实验,初始设置为 4 个专家、top-1、最大长度 128 个 token。词表或其他需要拟合的数据处理只用训练集确定;若采用固定的预训练分词器,应记录版本。每批选择 32 条文本,统计路由层中的有效 token,排除补齐位置。此时公式中的 N 是有效 token 数,绝不是固定的 32,也不是始终等于 32×128。明确这点能避免把长文本批次误判成路由异常。
每个记录窗口保存专家的尝试分配计数、接纳计数、超额计数和处理耗时,并保存有效 token 总量、训练步号与容量设置。若只使用单设备且没有可靠的逐专家计时,就先报告端到端批次时间,不编造通信收益。可以在完成预热后,对固定的验证批次运行若干次,报告耗时中位数及波动;训练中的路由轨迹和验证时的路由分配分别绘图,避免把随机训练行为与稳定预测模式混在一起。

先看 1 个便于手算的窗口:共有 100 个有效 token,top-1 的原始分配是 55、20、15、10。平均分配量为 25,最大负载与平均负载之比是 2.2,最忙专家接收 55%。如果每个专家容量为 30,第 1 个专家有 25 次超额分配;其余专家未必能替它处理。这里的“利用率”必须明确分母:接纳数除以容量描述槽位使用,分配数除以总分配描述流量占比。不能把这 2 个指标放在同一轴上而不解释。
分类质量至少报告准确率与宏平均 F1,并保存各类别的 precision 和 recall。precision 表示预测为某类的样本中有多少属于该类,recall 表示该类真实样本中有多少被找回,F1 综合这 2 个比例。宏平均 F1 对各类别等权,有助于发现少数类别被忽略。把科技类召回下降与专家分配切片并列观察可以提出假设,却不能直接证明路由导致错误。先固定数据、训练预算和评估流程,再比较路由设置,最后才使用测试集进行定稿评估。
5 模型容量与系统开销取舍
增加专家数量相当于增加可选择的参数模块,但不保证训练时间缩短。即使保持 top-1 不变,更多专家仍可能增加参数存储、优化器状态、路由输出维度及调度开销。在固定数据量下,每个专家平均收到的训练输入也可能减少。模型需要足够的数据和更新机会才能发挥新增参数的作用;“专家更多”与“每个专家学得更充分”之间并没有自动成立的联系。
比较实验时应先说明公平预算。按相同训练步数比较,可能让某模型使用更多时间;按相同墙钟时间比较,可能让它完成更少更新;按相同激活参数比较,又不代表总内存相同。入门实验可以先固定数据划分、编码器、训练步数与批次设置,同时列出总参数、激活参数估计、峰值内存和端到端时间。若要声称适合生产,再补充相同服务约束下的吞吐和延迟测试。
容量因子提供了直观取舍。沿用 32 个输入、4 个专家、top-1 以及 16、8、6、2 的需求,c=1 时每个专家容量为 8,超额分配共 8 次;c=1.5 时容量为 12,超额变成 4 次;c=2 时容量为 16,超额归零。但总可用槽位由 32 增至 64,具体实现可能需要更大的缓冲区或处理更多填充。交互中的槽位数量是教学估算,不能直接等同于真实显存字节数或预测延迟。

对表格流失任务,若正类占比较低,不能只比较准确率。可同时使用正类 precision、recall、F1 和 ROC-AUC;AUC 衡量跨阈值的排序能力,F1 则依赖具体决策阈值。阈值应在验证集按业务代价选择并冻结。若 MoE 的 AUC 略升但在规定误报预算下 recall 下降,就未必满足目标。更大参数量无法抵消指标选择错误,尤其不能把不同阈值下的 F1 当成完全公平的结构比较。
实际选择可以写成约束问题:在验证宏平均 F1 不低于基线、峰值内存不超预算、批次耗时可接受的条件下,寻找较简单的配置。若多个配置质量相近,应结合波动和维护成本判断,而不是追逐小数点后不稳定的领先。这里没有普适的最佳专家数。数据规模、样本异质性、硬件连接以及共享层占比不同,都会改变质量和开销的平衡点。
6 常见坑:专家不均导致算力浪费
最常见的误判是把“模型有 8 个专家”当成“8 个专家都在有效工作”。若持续只有 2 个专家接收绝大部分输入,其他专家的参数仍然占内存,却较少参与任务学习。忙碌专家可能超容量,闲置专家又无法自动补位,于是模型同时出现等待、超额分配和参数浪费。先检查实际路由记录,再讨论是否需要扩大设备或专家数量,否则扩容可能只是复制低效分配。
另一个坑是只记录容量裁剪后的计数。假设多个专家的接纳数都卡在上限,柱状图看起来很均衡,但其中某专家原始需求远高于其他专家。必须同时显示尝试和接纳计数,并把超额比例作为独立曲线。还应查看绝对数量:1 个只有 4 个 token 的小窗口出现高比例波动,与包含数万个 token 的持续集中,代表的证据强度并不相同。
数据问题也会伪装成路由问题。把 AG News 的标签名误拼进输入,模型可能获得虚高分数,并形成异常稳定的分配;把同一客户的不同月份记录随机拆入训练和验证,模型可能记住身份特征。应先排除标签泄漏、重复样本和跨时间泄漏。流失预测中,预测时点之后才产生的注销状态、最终服务天数等字段不能作为当时可用特征。路由均衡无法修复已经泄漏的实验。
类别不均和分布变化则需要不同处理。训练集中多数类别流量大,可能使某专家整体很忙,但并不说明少数类别一定被忽略;需要按真实标签检查召回和分配。若上线文本突然变长或语言比例改变,专家需求与超额率也可能变化。此时应该分别记录输入长度、类别或可观察群体的分布,以及任务指标的变化,避免把所有性能下降都归咎于负载均衡系数。

最后,均衡辅助目标过强也会出问题。训练可能得到漂亮的专家柱状图,却牺牲任务损失和宏平均 F1。修复应采用小步、可比较的干预:固定其他设置,只改变辅助目标权重或容量中的 1 项,再观察多个窗口。不要同时修改学习率、专家数、训练数据和阈值后,把收益归给路由。更不要根据单个批次的分配直接删除专家,暂时不活跃和长期无贡献需要不同证据。
7 案例:路由塌缩到少数专家
下面使用 AG News 设置给出教学性诊断记录,数值用于演示,不代表公开基准结果。模型有 4 个专家、采用 top-1。训练早期某固定窗口中,尝试分配占比为 26%、24%、25%、25%;随后变成 81%、9%、6%、4%。与此同时,验证宏平均 F1 从 0.86 降至 0.82,超额比例从 2% 升至 18%。这种持续集中并伴随质量和容量异常的模式,可以作为路由塌缩的候选证据。
首先核对统计是否一致:使用相同验证样本、相同有效 token 掩码和相同分配口径,排除只是新闻长度变长或日志窗口改变。然后检查容量前的分配,确认 81% 不是接纳计数归一化产生的假象。再按类别切片,如果各类都大量流入同一专家,说明集中并不限于某个类别;若只有科技类变化明显,就应进一步检查该类样本和文本分布。此时仍不应给专家随意贴上语义标签。
随后回查训练配置。假设发现均衡辅助目标没有加入总损失,日志却只打印了它的值。这解释了为什么“有均衡指标”并没有带来均衡约束。修复配置后,从同一早期检查点分出对照与实验分支,保持数据顺序、容量和训练预算一致,只改变辅助目标是否正确参与优化。保留原配置结果,记录版本与随机种子;若路由含随机性,完整保存其相关设置。
修复分支在相同预算下得到 34%、27%、22%、17% 的分配,超额比例降到 5%,验证宏平均 F1 回到 0.86。这个结果支持配置修复有帮助,但还不足以声称模型稳定优于稠密基线。应补做不同随机种子的重复比较,并检查各类 precision、recall 是否存在明显退步。辅助目标值下降只是中间证据,最终判断仍要回到任务质量、超额处理和端到端耗时。
如果修复后分配变均匀而 F1 继续下降,则应考虑辅助权重过强、专家训练不足或原先的性能波动。若提高容量后超额下降但集中程度不变,说明只是缓解了容量症状。把“集中、溢出、质量下降”拆开观察,才能知道干预修复了哪个环节。案例的可迁移方法是先确认现象,再排除数据与口径错误,最后用受控比较检验原因,而不是见到闲置专家就立即增加均衡强度。
8 把 MoE 约束写进训练方案
训练方案应先写任务和数据边界。例如客户流失预测以每月末为预测时点,使用此前可获得的月费、合约、任职月数和服务项目,预测下一时间窗是否流失。若同一客户有多条记录,需要明确按客户分组与时间划分的规则,避免身份泄漏和未来信息进入过去。若使用只有单次快照的公开数据,也应如实说明它不能直接证明跨月份泛化,不能为了写出时间实验而虚构时间字段。
模型约束写到可执行的粒度:哪些层替换为 MoE、专家数、top-k、容量公式、路由单位、补齐位置的处理、超额策略和辅助目标权重。给出稠密基线及相同部分的配置,说明比较按训练步数还是按时间预算进行。记录总参数和激活参数的计算口径,保留可重现的数据索引、初始化种子与检查点。无需在入门方案里展开复杂的并行策略,但不能把会改变输出的路由设置省略掉。
验收条件需要联合描述质量与系统行为。短文本分类可规定宏平均 F1 和各类 recall 的最低要求,同时限制峰值内存、超额比例与批次耗时。流失预测则可在固定误报预算下检查正类 recall,并辅助报告 AUC。门槛应由基线、资源和任务代价决定,示例中的 5% 超额率不是通用安全线。验证集负责选择配置与阈值,测试集用于定稿评估,不能反复根据测试集结果调均衡权重。
还要写清何时停止使用 MoE。若同等预算下持续无法优于简单基线,或收益小于随机波动,或内存与延迟已经超限,就应保留较简单方案。上线前监控输入长度、路由占比、超额比例和可获得的质量指标;标签有延迟时,不能用路由均衡代替真实正确率。回退时应使用事先验证过的模型和特征流程,不能临时关闭若干专家并假定输出质量保持不变。
9 从MoE走向长上下文与高效注意力(A47)
MoE 主要改变部分网络层如何使用参数,长上下文则带来输入长度增长的问题。对常见 Transformer,注意力负责不同位置之间的信息交互,前馈层负责每个位置表示的变换。把前馈层换成 MoE,并不会自动消除注意力中的长度相关计算与存储。即使每个 token 仍只选 1 个专家,文本从 128 个 token 增长到 1024 个 token,路由输入总数、专家工作量和表示搬运量也会增加。

这解释了为什么不能把本课的短文本耗时直接套到长文档。除了长度增加,还要检查截断策略是否损失标签线索、补齐比例是否提高、专家需求是否因内容结构而变化。在图像分类中也有类似问题:若模型将图像划分为若干局部单元,分辨率提高会改变处理单元数量。使用 CIFAR-10 这样的公开图像数据时,应固定预处理、训练验证划分与增强策略,再解释专家实验,不能让数据增强差异冒充路由收益。
进入 A47 前,应能分别回答 3 个问题:增加专家是否扩大了可选择参数;增加 k 是否增加了每个输入的专家调用;增加上下文长度是否扩大了需要处理的位置数量。它们可能同时影响时间与内存,却通过不同环节发生作用。后续学习长上下文与高效注意力时,将沿用本课的比较方法:固定任务质量目标,明确资源口径,观察真实端到端表现,并检查更长输入是否真的带来有用信息。
放进方案里
在 AG News 分类方案中,先固定官方测试集,从官方训练集按类别分层划出 10% 验证集,并保存划分索引。输入为标题与正文,最大长度设为 128 个 token,补齐位置不参与路由统计。若存在近重复新闻,按组处理后重新固定划分。词表等需要拟合的预处理仅使用训练集,记录分词器、清洗规则和数据版本。稠密模型作为基线,MoE 实验仅替换约定的前馈层。
初始配置使用 4 个专家、top-1,容量因子设为 1.25,明确容量按每批有效 token 计算,并写明超额专家分支的处理方式。均衡辅助目标权重作为待选参数,使用验证集选择。比较固定训练步数,同时记录总参数、激活参数估计、峰值内存和端到端时间。逐窗口保存尝试分配、接纳分配、超额比例及各专家耗时;无法可靠测量的通信指标标为未测。
质量报告包含准确率、宏平均 F1,以及各类别的 precision、recall。对异常窗口按类别与长度切片,先排除标签泄漏、重复样本和统计口径错误,再判断是否发生持续路由集中。修改辅助权重或容量时,每次只改变 1 项,用相同验证批次和预算比较,保留检查点与种子。增加容量后的超额下降不能单独作为解决路由塌缩的证据。
验收门槛依据基线波动和资源预算预先确定,要求质量、内存和耗时同时合格;定稿后才评估测试集。若 MoE 收益不稳定,保留稠密方案。部署记录输入长度分布与路由变化,待标签回流后核对真实质量;出现持续集中、超额上升或延迟超限时,回退到已验证版本。该方案只支持当前短文本条件下的结论,长上下文需要重新评估。
10 小结:下一步长上下文与高效注意力(A47)
MoE 用路由器为输入选择少量专家,使总参数量与当前激活计算可以分别增长。能否获得收益,要同时检查任务质量、分配是否有效、容量是否溢出以及系统是否等待。负载均衡是帮助训练的约束,容量是单批处理的限制,专家数量则决定可选择模块的规模,不能互相替代。
自测时试着解释:4 个专家、top-1、100 个有效 token 分配为 55、20、15、10,容量均为 30,会有多少次超额分配?为什么接纳后的柱状图不能完整描述需求?如果分配变均匀但宏平均 F1 下降,为什么不能宣布修复成功?接着带着“输入长度增长会增加哪些成本”的问题进入 A47,学习长上下文与高效注意力。