想象你是一位乐团指挥,面前坐着三组乐手:一组擅长演奏小提琴,一组擅长敲击打击乐,还有一组精通铜管乐。现在你要为三类不同喜好的观众准备演出——喜欢古典音乐的、喜欢摇滚的、喜欢爵士的。聪明的指挥不会让所有乐手都同时演奏同样的曲目,而是根据不同观众的喜好,动态地调整每类乐手的重要性权重:给爵士爱好者场次增加铜管比重,给摇滚现场强化打击节奏,给古典专场突出弦乐旋律。这样,一场演出就能同时满足三类观众,而且每类观众都能获得完美体验。 这正是 MMoE(Multi-gate Mixture-of-Experts,多门混合专家)在推荐系统中所做的事情。当你在刷短视频、逛电商或看新闻时,系统不仅需要预测你是否会点击,还要预测你点击后是否会购买、是否会长时间停留、是否会给创作者点赞。这些目标彼此关联但又有差异,传统的单模型无法同时优化好它们。MMoE 让模型像这位聪明的指挥一样,通过共享底层“乐手”(专家网络)和“指挥”(门控网络),针对不同目标动态调配“乐器比重”,实现一次预测多个业务指标。通过这篇文章,你将完整理解多目标排序的精髓:从共享底层的设计智慧,到门控机制的动态平衡,再到损失权重的巧妙调配,最后掌握在真实场景中落地 MMoE 的实战要领。
对于 AI 从业者,MMoE 是当下推荐系统和广告排序领域的标配技术。掌握它,意味着你能设计出同时优化点击率、转化率、时长等多目标的高效排序模型,这是从小白成长为资深推荐算法工程师的关键一步。
可视化演示
动态演示MMoE多目标排序的核心机制,通过源头/管道/节点/终端四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
MMoE多目标排序:多目标排 多目标排序MMoE概述 多目标排序MMoE原理 核心机制可视化 MMoE多目标排序整体架构与关键组件
多目标排序背景
想象你是一家综合性购物平台的运营负责人。你不仅希望用户点击商品,还希望他们下单购买、收藏店铺、评价晒图。每个行为都是平台收入的增长点。过去,团队可能为每个行为分别训练一个 AI 模型:点击模型只管预测点击率,转化模型只管预测购买率,时长模型只管预测停留时长。每个模型独立部署、单独优化。这套模式在业务初期尚可运转,但随着指标增多,问题逐渐浮现:维护成本直线上升、各模型之间的知识无法共享,更致命的是——用户在一个页面只能看到有限的几个商品,你究竟该按照哪个模型排序?点击模型推荐的商品转化率不高,转化模型推荐的商品用户又不爱点击。这就是“单目标模型各管一摊”的困境。
多任务学习顺应需求登上舞台。它的核心思想是:既然这些业务指标都源于同一个用户和商品交互过程,底层一定存在共享的语义特征——比如商品的外观吸引力、价格敏感度、品牌忠诚度等。通过让多个任务共享底层表示,既能减少重复计算,又能让不同任务互相补充学习信号,就像同一批食材可以同时做出多道菜一样。于是,业界实践从“单模型单目标”走向“单模型多目标”,MMoE 正是这条演进路线上的重要里程碑。
从工程角度看,这种演进也是必然趋势。多个独立模型在线上运行时,每次请求都要分别调用,计算资源开销成倍增加,响应延迟也难以压缩。而一个多目标模型可以在一次前向传播中同时输出所有预测结果,极大地降低服务成本。
回到运营视角,多目标排序的核心价值正是“一次预测多个业务指标”——用户看到的每个商品都能同时获得点击概率、转化概率、收藏概率等多个分数,排序时可以根据业务策略灵活融合这些分数。这就像乐队指挥可以同时为三种观众调配曲目,而不必为每类观众单独安排三支乐队。
- 单目标模型求和先看公式左边,它表示传统做法——为每个任务独立训练一个模型,然后把所有参数量加起来。任务越多,总参数量线性增长,如同每家每户都单独建厨房。
- MMoE 参数近似再看右边,MMoE 只需要一套共享的专家网络加每个任务自己的塔网络。共享底座被所有任务复用,所以参数量不再随任务数线性爆炸。
多任务学习基础
在深入 MMoE 之前,我们先回顾多任务学习的基本模式。最经典的做法是硬共享(Hard Sharing):所有任务共享底部的若干层网络,然后在顶部为每个任务分出一个独立的输出塔。用做饭来比喻,硬共享就像所有菜共用同一个灶台,先统一切菜备料,最后分锅调味。
这种模式实现简单,在任务相关性高时效果不错。如果两个任务高度相关——比如“点击”和“点赞”,它们本质都在衡量用户对内容的认可程度,共享底层网络可以互相增强特征表达。然而,当任务相关性较低时——比如“点击”和“投诉举报”,共享层的语义可能对某一方产生干扰。这就像同一口炒锅既做麻辣火锅又做清蒸鱼,味道容易串。
为了缓解任务冲突,研究者提出了软共享(Soft Sharing)机制。它不强制共享全部底层,而是让不同任务拥有各自的网络,同时通过正则化项或注意力机制让它们相互交换知识。比如 Cross-stitch 网络在每层加入可学习的组合矩阵,让两个任务网络的特征按权重相互融合,就像两个厨师在做菜时互相借鉴对方的酱料配方,但最终各自掌勺。
在此基础上,Google 于 2018 年提出了 MMoE,它吸收了共享思想的精华,但采用更灵活的“疏密结合”模式:既不像硬共享那样完全共享单一底层,也不像软共享那样维护完全独立的网络,而是在二者之间找到平衡——多个专家网络并行存在,门控网络决定“听谁的更多一些”。理解这个平衡点是后续学习的关键。
回到做饭的比喻,多任务学习的基础知识告诉我们:共享是有智慧的,但共享需要适度。硬共享像“一锅乱炖”——所有菜一起下锅,简单省事但容易串味;软共享像“独立小灶加交流”,每道菜有自己的锅,但调料可以互通;而 MMoE 则像我们故事开头那位乐团指挥——所有乐手共享一个舞台,但指挥会根据观众口味动态调整每位乐手的演奏权重。
- 方式集合先用大括号列出多任务学习的主要方式。硬共享参数最少但灵活性最低,软共享灵活但参数多,MMoE 位于二者之间。
- 策略选择理解这个集合的含义:没有绝对最优的方案,只有最匹配当前业务场景的方案。任务高度相关用硬共享,相关性低用软共享或 MMoE。
def hard_share_model(features): # 共享的底部网络 shared = shared_dense(features) click_output = task_tower_a(shared) # 点击任务塔 purchase_output = task_tower_b(shared) # 转化任务塔 return click_output, purchase_output
MMoE核心架构
现在我们来剖析 MMoE 的核心架构。假设我们的任务集合包含 K 个目标(如点击、转化、时长),MMoE 模型主要由三部分构成:专家网络(Expert)、门控网络(Gate)和输出塔(Tower)。
专家网络是一个由若干前馈神经网络构成的集合。每个专家本质上是一个特征变换器,擅长从输入中提取某种特定模式。在上面的动图中,三个专家各有所长:专家 1 偏向捕捉用户对价格的敏感度,专家 2 偏向识别商品的视觉吸引力,专家 3 偏向理解用户的历史兴趣。在训练开始时,这些专家的“专长”尚未定向,是梯度信号在训练中让它们自然分化。
门控网络是 MMoE 的“指挥家”。每个任务都配有一个独立的门控网络,它接收输入特征(如用户特征和物品特征),通过 Softmax 函数输出一个 K 维权重向量,表示对每个专家的信任程度。门控的关键特性是“输入条件计算”——不同输入样本会得到不同的专家组合权重。例如,一位喜欢低价商品的用户和一位追求高端品牌的用户,面对同一件商品时,门控网络会为前者更多调用价格敏感型专家,为后者更多调用品质偏好型专家。
最后,每个任务的输出塔接收来自所有专家的加权和:
其中 $E_i(x)$ 是第 i 个专家的输出,$h_k$ 是第 k 个任务的塔网络。
回到乐团比喻,专家网络就是不同风格乐手的合奏,门控网络是指挥在不同场景下对乐手比重的调配方案,输出塔则是最终呈现给观众的完整旋律。用户特征相当于观众席的构成,指挥根据观众构成实时调整方案,从而让每类观众都满意。
- 加权求和$\sum_{i=1}^{m} g_k(x)_i \cdot E_i(x)$ 是将所有专家输出按权重融合为一个向量。权重由门控决定,所以不同任务对相同输入可以得到不同融合结果。
- 塔网络变换$h_k(\cdot)$ 是任务专属的输出层,通常是一层或两层全连接网络,它将融合向量映射到最终的预测值(如点击概率)。
门控网络机制
门控网络是 MMoE 最具特色的组件。它不仅仅是简单的权重分配器,而是“因输入而异”的动态决策者。门控网络的输入通常是当前样本的特征向量(用户特征、上下文特征等),这与共享专家网络的输入保持一致,确保决策的依据充分。
Softmax 函数在门控中的作用至关重要。它把任意实数向量变成非负且和为 1 的分布。Softmax 还有一个特性:当某个得分明显大于其他得分时,其输出会趋近于 1,其他趋近于 0,这相当于“硬选择”;当各得分接近时,输出接近均匀分布,相当于“软混合”。温度参数可以控制这个特性的强弱——温度低时门控更“决断”,温度高时门控更“均衡”。
门控网络与任务一一对应是 MMoE 的设计精髓。每个任务都有独立的门控参数,意味着模型可以表达“不同任务对专家有不同的需求”。例如,在短视频推荐中,点击任务的门控可能更看重“标题吸引力”专家,而时长任务的门控更看重“内容深度”专家。如果所有任务共享同一个门控,模型就退化为一个单门控的中间形态,表达能力受限。
用指挥家来理解:Softmax 就是指挥家的决策逻辑——他迅速评估每类乐手对当前曲目的适配度,然后定下每类乐手的参与比例。温度参数则是指挥家的“风格偏好”:有的指挥喜欢突出某一种乐器(低温),有的指挥喜欢均衡和谐(高温)。而门控与任务的对应关系,好比指挥会为古典音乐会专门设计一套调配方案,为摇滚音乐会设计另一套——绝不会混用。
- 带温度 Softmax分子是第 i 个专家得分经过指数变换,分母是所有专家得分指数变换之和。这里除以温度 T 是为了调节分布的“锐度”。
- 参数含义$w_i$ 是门控网络中与第 i 个专家相关的权重向量,$x$ 是输入特征。这个结构让门控成为一个可学习的条件概率分布生成器。
损失加权策略
在多任务模型中,总损失通常是各任务损失的加权和。如何设定这些权重?一个直观的想法是给每个任务相同的权重——“平等对待”。但在实际业务中,不同任务的量纲和难度差异很大。比如点击率通常在 1%-10%,转化率可能只有 0.1%-1%,停留时长可能是秒级数值。如果直接加权求和,量纲大的任务会主导梯度更新,导致模型偏向优化某一个目标。
固定权重(如简单相加或人工调节)的局限性在于:很难找到一组最优的静态权重,因为最优权重在训练不同阶段会变化。训练初期,所有任务都还没学好,简单任务(如点击)的梯度下降较快,而困难任务(如转化)的梯度下降较慢。如果固定权重,模型可能被简单任务“带偏”。
不确定性加权(Uncertainty Weighting)是一种优雅的解决方案。它基于同方差不确定性的思想,将每个任务的损失权重与模型对该任务预测的置信度相关联:
其中 $\sigma_k$ 是第 k 个任务的可学习噪声参数。当模型对某个任务预测不确定性高($\sigma_k$ 大)时,损失权重自动降低;当模型对某个任务很确定时,权重自动升高。第二项 $\log \sigma_k$ 是正则项,防止 $\sigma_k$ 无限增大导致权重消失。
另一种常用思路是动态权重调整(Dynamic Weight Adjustment),例如 GradNorm 方法:根据任务梯度范数的相对大小,自适应地调整权重,使各任务的训练速度均衡。这就像指挥不仅根据观众组成调配乐手比例,还会在排练中观察哪一部分乐手明显跟不上节奏,给予更多练习时间(权重加大),最终实现整体的均衡提升。
回到运营场景,损失加权策略解决的是“如何平衡多个目标”的资源配置问题。固定权重好比一刀切给所有任务同样的精力投入;不确定性加权像是有经验的领导者,根据每个任务的进展动态分配团队精力;动态权重调整像小步快跑的迭代管理方式,每个阶段根据数据反馈调整优先级。
- 数据相关加权$\frac{1}{2\sigma_k^2} L_k$ 表示用噪声方差的倒数来缩放第 k 个任务的损失。直观理解是:不确定的任务少信一点,确定的任务多信一点。
- 正则项$\log \sigma_k$ 防止所有 $\sigma_k$ 趋于无穷大(即所有任务权重都趋近 0),保证每个任务都保留一定的梯度贡献。
负迁移应对
负迁移(Negative Transfer)是多任务学习中一个绕不开的话题。它的含义是:共享知识不但没有帮助某个任务,反而损害了它的性能。用乐团来比喻,如果让擅长古典的乐手强制用摇滚的演奏方式,不仅发挥不出水平,还可能破坏整体演出效果。
负迁移通常发生在任务相关性较低甚至目标方向相反的场景。比如“点击”与“快速跳过”就是一对潜在冲突的任务:系统希望用户点击视频,却不希望用户点击后立即跳过。如果模型在优化的过程中过度强调点击率,可能导致推荐的内容虽然有吸引力但质量不高,与提升用户时长的目标产生冲突。
MMoE 缓解负迁移的第一道防线是专家分化。由于不同门控可以选择不同的专家组合,模型不必强迫某个专家同时服务所有任务。在训练中,某些专家可能逐渐专注于服务“点击”任务,另一些专注服务“时长”任务,这相当于让乐手们自动找到自己最适合的演奏风格,指挥只需按需调配即可。研究表明,专家数在 4-8 个时通常能实现良好的分化效果。
第二道防线是梯度干预。研究者发现,负迁移的根源之一是不同的任务梯度方向冲突——在参数空间中,任务 A 希望参数往东移动,任务 B 希望参数往西移动,二者的合力可能相互抵消甚至误导。PCGrad(Projecting Conflicting Gradients)方法通过将冲突梯度投影到正交方向,消除相互干扰:
用乐团来理解负迁移应对:乐手分化相当于每个乐手找到自己最擅长的曲风——小提琴手专注古典、鼓手专注摇滚、小号手专注爵士,指挥在此基础上灵活调配。梯度干预则更像是排练时,如果两段音乐的节奏互相冲突,导演果断调整乐谱,让不同声部在不同时间段突出,而不是让它们互相打压。
- 冲突识别首先计算任务 A 与任务 B 梯度的点积。如果点积为正,两任务方向一致,无需操作;如果为负,说明方向冲突。
- 投影消除当点积为负时,将任务 A 的梯度中与任务 B 平行的分量减去,只保留与任务 B 正交的分量。这样更新参数时就不会干扰任务 B 的学习方向。
工程实践要点
理解 MMoE 的理论之后,落地部署同样关键。一位优秀的 AI 工程师不仅需要理解模型结构,还需要理解如何将它高效地应用到业务中。
特征工程首先需要考虑“保底共享”。MMoE 的多专家结构需要足够丰富的输入信息才能发挥效果。在实践中,除了常规的用户和物品特征,还应加入一些“背景知识”特征(如商品类目、用户兴趣向量、实时场景特征等),这些特征对所有任务都有信息量,就像乐团演出时舞台的灯光、音响效果,保证每位乐手都能被观众看见听见。同时,某些特征可以有针对性地增强特定任务的表达——比如用户历史购买价格区间这一特征对转化任务更重要,可以在对应的输出塔中特征拼接时显式引入。
模型部署方面,MMoE 的优势在一次前向传播中完成多任务输出。与多个独立模型相比,线上推理的时延和计算量显著降低。然而,如果专家数设置过多,计算量也随之上升。一个常用的工程优化是“低秩专家分解”:将专家网络设计为两层低秩结构,减少参数量,在服务端利用矩阵分解加速计算。
在线服务性能还需要考虑模型更新频率。推荐系统的数据分布随时间漂移,MMoE 模型需要定期增量训练。在实践中,通常使用“近端梯度优化”或者“增量专家”策略——只更新门控和塔的参数而冻结专家网络,或者定期全部重训。前者更新快但对分布变化敏感,后者效果稳定但耗时。
效果评估体系是落地多目标排序不可或缺的一环。由于 MMoE 同时优化多个指标,不能只看单一指标提升。业界常采用以下评估框架:
其中 $\alpha, \beta, \gamma$ 由业务方共同商定。除了离线指标,A/B 测试是最终验证手段。实践中还应注意“指标之间的相关性”:CTR 提升可能带来 CVR 下降(吸引来的用户质量更杂),需要综合评估 GMV 等更全局的业务指标。
回到运营场景,工程实践的核心是把 MMoE 从“模型概念”变成“生产级解决方案”。它需要工程师在特征、部署、性能、评估四个维度协同发力,如同乐团指挥不仅要懂音乐编排,还要管理排练进度、音响调试和票务策略,才能让演出大获成功。
- 业务加权综合指标是各业务指标的加权变化量之和。权重由产品和运营共同设定,反映公司当前的战略优先级——比如新用户增长期更看重点击,成熟期更看重转化。
- 协同保障此外,质量护栏指标应纳入评估,如“用户举报率”、“差评率”等。防止多目标模型为了实现“好看”的点击与转化指标而牺牲用户体验。
未来演进趋势
多目标排序作为一个充满活力的研究与应用方向,仍在持续演化。理解前沿趋势能帮助从业者判断技术投资方向。
一个明确的方向是增量学习。传统 MMoE 训练是离线批量完成的,模型上线后权重固定。但推荐系统的数据分布是不断变化的——季节性因素、用户兴趣迁移、市场供需波动都会导致模型性能衰减。增量 MMoE 技术让专家或者门控能够以在线方式小步更新,例如每隔几分钟自动微调门控网络,让模型始终保持“手感”。
另一个趋势是多场景自适应。大型平台往往拥有多个业务场景:首页推荐、搜索结果、相关推荐、广告位等。为每个场景训练独立 MMoE 模型成本太高,而单一模型难以适配所有场景。共享多门控结构的“多场景 MMoE”是当前的研究热点——不同场景复用同一组基础专家,但每个场景有自己的门控网络,从而在几乎不增加模型体量的前提下实现场景自适应。
基于 Transformer 的新架构也为 MMoE 带来了改进思路。例如将专家网络升级为注意力网络,或者让门控网络基于更丰富的上下文特征(如位置信息、页面上下文)进行更精细的权重分配。此外,强化学习与 MMoE 结合做“多目标序贯决策”也是探索方向——在多轮交互中动态调整目标权重。
从乐团的未来来看,演出成功的标准也在演化——不仅要求一次演出让观众鼓掌,还要求乐团能根据之前的演出反馈实时调整演奏风格(增量学习),能在不同演出场地(多个场景)间无缝切换,甚至能与观众的实时互动展开即兴演出(强化学习)。MMoE 的长青之道,正在于这种“灵活与共享”的哲学。
- 动态门控未来门控网络不只是基于输入特征的静态映射,而是结合强化学习或上下文建模的时序决策器。它会考虑“上一次推荐后用户的行为反馈”,实时调整权重。
- 在线更新模型从全量重训过渡到持续学习模式。关键挑战是如何避免灾难性遗忘——新数据学得太快会覆盖旧知识。
- 场景自适应通过门控共享与场景分层的组合设计,将 MMoE 从“任务多目标”推广到“任务 × 场景”的二维多目标框架。
AI 应用场景
信息流推荐:一次排序满足多个指标
阶段:模型设计与训练
解决的问题:传统信息流推荐系统为点击率、点赞率、收藏率和时长分别部署多个模型,每次请求都需执行多次推理,不仅延迟高,而且各模型相互割裂。MMoE 将多个目标统一到一个模型中,通过门控动态调配专家权重,在一次推理中同时输出各目标分数,显著降低推理成本。
具体案例:某短视频平台的首页推荐系统使用 MMoE 架构同时优化点击率、播放时长、点赞率和关注率四个目标。每个目标对应的视频被分配 pCTR、pTime、pLike、pFollow 四个分数,排序阶段通过加权融合公式生成本次请求的最终排序得分。点击率模型与播放时长模型共享了底层用户兴趣向量,前者门控更侧重“标题党”专家,后者门控更侧重“内容深度”专家。上线后平台整体播放时长提升 2.3%,点击率提升 1.1%。
电商搜索排序:兼顾 GMV 与用户满意度
阶段:模型部署与优化
解决的问题:电商搜索中,平台既要考虑商品相关性(避免用户搜“A 推 B”),又要考虑转化率(平台希望成交)、客单价(追求 GMV),还要考虑用户长期的满意度(避免退货差评)。这些目标之间存在天然的张力。MMoE 让模型捕捉每一类目标独特的特征组合。
具体案例:某电商平台在商品搜索排序中用 MMoE 同时预测“相关性评分、点击率、转化率、退货率”,并动态调整四者权重。当用户搜索“手机”,模型为追求性价比的用户提高转化率权重,为偏好旗舰机的用户提高客单权重。系统上线后,搜索 GMV 提升 5.2%,同时退货率下降 0.7%。
广告竞价排序:平衡平台收入与用户体验
阶段:模型迭代与评估
解决的问题:广告场景下平台既希望获取广告收入(高点击出价),又希望广告不影响用户体验(过差的广告会赶走用户)。多目标模型可以在收入与体验间求得最优平衡。
具体案例:某广告平台的受控广告模块用 MMoE 同时预测点击率、转化率和用户负反馈(如点踩、举报)概率。排序时,平台收入用 eCPM = pCTR × bid 计算,但引入用户负反馈概率对广告进行“质量惩罚”——负反馈概率高的广告降权。最终平台在广告收入持平的情况下,用户负面反馈率下降 12%,长期留存改善。
Python 演示
import numpy as np def softmax(z): """数值稳定的 softmax 函数""" e_z = np.exp(z - np.max(z, axis=-1, keepdims=True)) return e_z / np.sum(e_z, axis=-1, keepdims=True) class Expert: """单个专家网络: 线性变换 + ReLU 激活""" def __init__(self, in_dim, hid_dim): self.w1 = np.random.randn(in_dim, hid_dim) * 0.1 self.w2 = np.random.randn(hid_dim, hid_dim) * 0.1 def forward(self, x): self.h1 = np.maximum(0, x @ self.w1) self.h2 = np.maximum(0, self.h1 @ self.w2) return self.h2 class Gate: """门控网络: 对输入做线性变换后输出 softmax 权重""" def __init__(self, in_dim, num_experts): self.w = np.random.randn(in_dim, num_experts) * 0.1 def forward(self, x): self.logits = x @ self.w self.weight = softmax(self.logits) return self.weight class MMoE: """精简版 MMoE: 两任务、三专家""" def __init__(self, in_dim, hid_dim, num_experts=3): self.experts = [Expert(in_dim, hid_dim) for _ in range(num_experts)] self.gate_1 = Gate(in_dim, num_experts) # 任务1的门控 self.gate_2 = Gate(in_dim, num_experts) # 任务2的门控 # 每个任务的输出塔 self.tower_1 = np.random.randn(hid_dim, 1) * 0.1 self.tower_2 = np.random.randn(hid_dim, 1) * 0.1 def forward(self, x): expert_outs = np.stack([e.forward(x) for e in self.experts]) # [n_exp, B, H] w1 = self.gate_1.forward(x) # [B, n_exp] w2 = self.gate_2.forward(x) # 加权融合 fused_1 = np.sum(expert_outs * w1.T[:, :, None], axis=0) # [B, H] fused_2 = np.sum(expert_outs * w2.T[:, :, None], axis=0) out_1 = fused_1 @ self.tower_1 # [B, 1] out_2 = fused_2 @ self.tower_2 return np.concatenate([out_1, out_2], axis=-1) if __name__ == "__main__": np.random.seed(42) # 模拟 128 个样本,每个样本 10 维特征 X = np.random.randn(128, 10) # 模拟两个任务的标签(二分类) y1 = (X[:, 0] + 0.3 * X[:, 1] > 0).astype(float) y2 = (X[:, 2] - 0.2 * X[:, 3] > 0).astype(float) model = MMoE(in_dim=10, hid_dim=16, num_experts=3) preds = model.forward(X) print("输入特征形状:", X.shape) print("MMoE 输出形状:", preds.shape, "(同时输出两个任务的预测)") print("任务1预测概率范围: [%.3f, %.3f]" % (1/(1+np.exp(-preds[:, 0])).min(), 1/(1+np.exp(-preds[:, 0])).max())) print("任务2预测概率范围: [%.3f, %.3f]" % (1/(1+np.exp(-preds[:, 1])).min(), 1/(1+np.exp(-preds[:, 1])).max()))
self.experts = [Expert(...) for _ in range(num_experts)]创建一列专家网络列表,每个专家负责提取不同的特征模式。self.gate_1 = Gate(in_dim, num_experts)为任务 1 创建专属门控,输入为原始特征,输出维度为专家数量。expert_outs = np.stack([e.forward(x) for e in self.experts])将每个专家对当前批次样本的输出堆叠为一个三维张量。fused_1 = np.sum(expert_outs * w1.T[:, :, None], axis=0)按门控权重加权求和所有专家输出,得到任务 1 的融合特征表示。out_1 = fused_1 @ self.tower_1融合特征经输出塔线性变换,得到任务 1 的预测值。
常见误区
误区“既然 MMoE 用多个专家网络学习不同模式,那我干脆设 32 个专家,让模型有足够强的表达能力,效果一定更好。”
正解专家数并非多多益善。过多的专家会带来三个问题:一是参数量和计算量线性增长,训练和推理变慢;二是当任务数量有限时,多余的专家可能学到冗余模式,浪费计算资源却没有收益;三是门控网络需要从更多候选中学习分配,如果训练数据量不足,门控的决策会不稳定,产生噪声。实践中,专家数通常设置为任务数的 2-4 倍。在动图演示里,3 个专家已经能表达非常丰富的任务组合。先从小数量开始实验,观察任务性能随专家数量的收益递减曲线,找到平台点。
为何常见:“多就是好”是深度学习中容易形成的默认直觉。但在多任务结构里,模型容量应该匹配任务的复杂度和数据的丰富度。超过某个阈值后,继续增加专家只是增加冗余参数。
误区“MMoE 的门控网络不就是注意力机制吗?输入算权重,然后加权求和,这跟 Transformer 里的 attention 很像。”
正解门控和注意力表面上有相似的操作(都是加权融合),但核心逻辑不同。注意力机制中的权重是基于“查询”(query)与“键”(key)的相似度计算的,目标是让信息在不同位置之间流动。而门控网络是直接根据输入特征学习权重,不涉及跨样本或跨位置的信息交互。更本质的区别在于:门控网络的权重是任务专属的,每个任务有自己的门控,而注意力权重通常是共享的。门控回答的是“当前任务应该信任哪些专家”,注意力回答的是“当前位置应该关注哪些其他位置”。
为何常见:两者都涉及“加权求和”的数学形式,且 Softmax 函数都是常规操作。初学者容易从形式推导本质,忽略了机制设计意图的差异。
误区“自适应权重听起来高级,但我从头开始就很难调出好权重,固定权重只要我花时间多调几轮,效果也能不错。”
正解固定权重难以“从头到尾”都适用。因为在训练的不同阶段,各任务的学习速度不同。训练初期,简单任务信号充足,需要较大权重快速收敛;训练后期,简单任务基本收敛,困难任务还在挣扎,此时需要给困难任务更多权重。一组固定权重无法随此动态变化。不确定性加权或 GradNorm 这类自适应方法,本质上是把“权重调度”当成可学习的元任务,自动完成这种调整。实验证明,即使人工精心调参,固定权重也常常落后于自适应方法,尤其在数据分布变化时差距更大。更实际的操作是:先用不确定性加权算法自动优化权重,再根据业务语义人工微调关键任务的下界和上界,既保持灵活性又保证业务可控性。
为何常见:固定权重简单可控、符合直觉,而自适应方法的学习率、初始值等又引入更多超参数。很多工程师在经验不足时宁可控制变量,也不愿引入额外的复杂度。
误区“负迁移就是因为两个任务不相关,所以模型学不好。我只需要选择相关性高的任务放到同一个多任务模型里就行了。”
正解任务相关性确实是一个因素,但不是全部。即使两个任务高度相关(如点击和转化),如果训练数据规模差异巨大(点击样本百万级、转化样本万级),梯度更新就会被大数据量任务主导,小数据任务被“淹没”。另一个因素是特征冲突:共享的底层特征如果被一个任务“篡改”(为优化任务 A 改变了底层语义),另一个任务就会受损。因此,应对负迁移不仅限于选择相关任务,还需要配合专家分化、梯度干预、样本采样等策略。比如,可以在门控网络中增加稀疏化约束,让每个专家只服务少数任务,减少任务间干扰。
为何常见:人们倾向于将失败归因于最直观的一个原因——相关性低。实际多任务模型的训练过程非常复杂,数据量失衡、特征耦合、学习率不匹配同样会引发负迁移。
面试题
Q1. MMoE 中门控网络的主要作用是什么?
- A.对所有专家做梯度裁剪
- B.根据输入动态分配专家权重← 正确答案
- C.为每个任务分配独立参数
- D.对模型输出做归一化处理
答案:B。门控网络接收输入特征,通过 Softmax 输出各专家的权重分布,实现“因输入而异”的动态专家组合。选项 A 是优化技巧,C 是输出塔的职责,D 与门控无关。可以用指挥家根据观众构成调配乐手比重的比喻理解:门控就是那个指挥,实时决定每位乐手的参与度。
Q2. MMoE 相比于硬共享参数方法的优势在于?
- A.参数量严格小于任何硬共享模型
- B.不同任务可以有不同的专家组合← 正确答案
- C.不需要训练输出塔
- D.天然避免所有过拟合问题
答案:B。硬共享模式下所有任务强制共享同一个底层表示,灵活性不足。MMoE 让不同任务通过各自门控选择不同的专家组合,兼顾了共享与个性化。选项 A 错误,参数量取决于专家数量设置;C 错误,MMoE 仍需输出塔;D 说法绝对化,任何模型都可能过拟合。
Q3. 以下哪些策略可以有效缓解负迁移?
- A.增加更多专家网络数量
- B.梯度冲突投影(如 PCGrad)← 正确答案
- C.任务门控的稀疏化约束← 正确答案
- D.调大所有任务的损失权重
答案:BC。PCGrad 将冲突梯度投影到正交方向,避免任务间梯度的相互抵消,是有效的负迁移缓解手段。门控稀疏化约束可以让每个专家只专注服务少数任务,促进专家分化。单纯增加专家数不一定缓解负迁移,反而可能带来冗余;统一调大所有损失权重不改变梯度方向的冲突,起不到缓解作用。
Q4. 不确定性加权(Uncertainty Weighting)中,损失权重与噪声参数 σ 的关系是?
- A.权重正比于 σ
- B.权重反比于 σ 的平方← 正确答案
- C.权重与 σ 无关
- D.权重等于 σ
答案:B。不确定性加权中损失项乘以 1/(2σ²),因此噪声参数越大(不确定性越高),权重越小。这符合直觉:模型对某个任务的预测越不确定,越不该给它大权重去主导梯度。
Q5. MMoE 中 Softmax 函数用于门控网络的目的是?
- A.将专家输出映射到 0-1 区间
- B.将得分转成非负且和为 1 的权重分布← 正确答案
- C.对特征做标准化处理
- D.计算任务间的相似度
答案:B。Softmax 将任意实数的得分向量转换为概率分布,保证权重非负且总和为 1,便于作为专家组合的加权系数。选项 A 是 Sigmoid 的功能,C 是 BatchNorm 的工作,D 是余弦相似度的功能。
Q6. 以下哪些属于 MMoE 相比多个独立单目标模型的优势?
- A.减少在线推理时延← 正确答案
- B.降低总参数规模← 正确答案
- C.共享底层特征表示← 正确答案
- D.保证每个目标独立最优
答案:ABC。MMoE 一次前向传播输出所有任务结果,降低推理延迟;共享专家网络减少总体参数量;多任务共享底层语义特征可以互相增强。选项 D 错误——多目标模型的本质是在共享和差异化之间取舍,无法保证每个目标都达到独立模型的最优水平。
Q7. 在 MMoE 的训练中,如果两个任务梯度方向接近 180° 夹角,以下说法正确的是?
- A.梯度更新会被加速
- B.PCGrad 会投影掉部分冲突分量← 正确答案
- C.模型一定陷入局部最优
- D.应立刻移除其中一个任务
答案:B。两个任务梯度方向接近相反说明冲突严重。PCGrad 会将每个任务的梯度投影到另一个任务梯度的正交方向上,消除冲突部分,使更新互不干扰,这是其设计核心。选项 A 与事实相反,冲突会阻碍收敛;C 过于绝对;D 放弃任务不是好方法。
Q8. 关于 MMoE 的专家网络,下列说法正确的是?
- A.每个专家只处理单个任务的数据
- B.专家网络的输出经过加权融合后进入输出塔← 正确答案
- C.专家数量必须等于任务数量
- D.专家网络参数完全独立,不依赖输入样本
答案:B。MMoE 的流程是所有专家接收同样的输入,各自输出表征向量;门控网络分配权重后,不同任务使用不同的加权融合结果。选项 A 错误——专家不为特定任务专有,而是由门控动态组合。C 不成立,典型设置专家数多于任务数。D 中“不依赖输入”是误解——专家本身是输入的函数,依赖程度由门控调节。
Q9. 损失函数 L_total 以极小化 ∑ᵢ(1/(2σᵢ²))Lᵢ + logσᵢ 为目标时,若一个任务的 σᵢ 变得非常大,模型会?
- A.增加该任务影响
- B.减少该任务影响← 正确答案
- C.导致训练崩溃
- D.冻结该任务塔参数
答案:B。当 σᵢ 很大时,权重项 1/(2σᵢ²) 趋近于 0,该任务损失对总梯度的贡献极小。正则项 logσᵢ 的存在则防止 σᵢ 无限增大,在二者平衡下自适应权重被合理约束。这相当于不确定的任务自动“让路”,避免干扰确定任务的学习。
Q10. MMoE 的实践部署中,下列哪些做法是合理的?
- A.为门控网络引入温度参数调节决策锐度← 正确答案
- B.结合业务语义设定核心任务的损失权重下界← 正确答案
- C.部署多目标模型后同时监控综合指标和护栏指标← 正确答案
- D.将专家数量直接设为 64 以提升表达能力
答案:ABC。温度参数可以调节门控的软硬决策倾向;给核心任务设权重下界保证其影响力;监控护栏指标防止“指标优化但体验恶化”。专家数量需要实验确定,盲目设 64 可能带来巨大的计算开销和过拟合,不合理。