想象一座三甲医院的综合会诊中心。一位患者同时患有膝盖疼痛和睡眠障碍——表面看是两个不相干的病,但可能都源于同一个肥胖问题。如果骨科医生只治膝盖、神经内科医生只治失眠,两人会开出互不相干甚至相互冲突的药方;可要是让两位医生共享病历、坐在一起讨论,就会发现共同病因,开出一套协同治疗方案。这就是多任务学习的思想雏形。 在推荐系统里,用户行为同样包含两个紧密关联的问题:“会不会点”(点击率CTR)和“点了会不会买”(转化率CVR)。传统做法是分别训练两个模型,如同两个互不通气的科室各治各的;多任务学习则让两个任务共享一套“病历”(底层特征表示),互相借力。最早的共享方案是一个“全科门诊”——Shared-Bottom结构,所有任务共用一张基础检查单,简单却僵硬。后来升级为“专家会诊”——MMOE,请来几位专家从不同视角分析档案,每个科室由主持人(门控)按患者情况给专家意见分配权重。再后来有了“分层会诊中心”——PLE,先由全科医生提取基础信息,再由专科医生深挖各自领域,有效遏制了“跷跷板效应”。 这篇文章,我们就沿着会诊中心的三次升级,把MMOE与PLE的结构、原理、训练与落地讲得明明白白。
掌握MMOE/PLE结构,是推荐算法工程师设计多目标排序模型的必备技能,能显著提升CTR与CVR的联合预估精度,也是迈向高级算法岗位的硬通货。
可视化演示
动态演示多任务学习MMOE与PLE结的核心机制,通过采集/分析/决策/反馈四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
多任务学习MMOE与PLE结:多任务学 多任务学习硬参数与软参数共享 MMoE多门控混合专家网络架构 核心机制可视化 多任务学习MMOE与PLE结整体架构与关键组件
多任务学习概述
医院里的“全科门诊”只有一位医生、一张标准检查单。患者来了,量血压、测体温、问几个通用问题,然后这位医生根据仅有的信息,硬着头皮给出所有科室的诊断建议。这就是最早的多任务学习方案——Shared-Bottom结构:底层共享一张“检查单”(参数),顶部为每个任务各自接一个“诊断台”(任务塔)。结构简单、参数节省,是所有多任务模型的起点。
多任务学习(Multi-Task Learning, MTL)的核心想法是:让多个相关任务一起训练,共享底层的特征表示,借助任务之间的相关性互相“借力”。就像脊柱问题既能引发腰痛也能引发腿麻,共享一份核磁共振报告,两个症状的诊断都能受益。放在推荐场景里,CTR和CVR共享用户的浏览行为序列、物品属性等底层特征,点击行为中学到的“兴趣表达”也能帮助转化率判断。
Shared-Bottom的数学描述十分简洁:所有任务共用一个底层网络 $f(x)$,每个任务 $k$ 再配备一个自己的映射 $h^k$。它的问题在于“一刀切”——当任务差异较大时,共享层学到的表示对谁都不够友好。CTR任务偏好“抓眼球”的特征,CVR任务偏好“真金白银购买意愿”的特征,硬塞进同一个底层,就会出现著名的“跷跷板效应”:一个任务指标上升,另一个任务指标必然下降,像跷跷板两端互相压制。
Shared-Bottom像极了那个“一位医生撑全科”的门诊:便宜、高效,但当患者同时需要骨科和神经内科的深度检查时,一张单薄的检查单根本不够用。于是,医院决定请专家来会诊——MMOE 就这样登场了。
- 原始特征输入$x$ 是模型的输入特征,相当于患者的病历与主诉,内容相同、对所有任务开放。
- 共享底层网络$f(x)$ 是全部任务共用的特征提取器,相当于全科医生开出的那张基础检查单。
- 任务专属塔$h^k$ 是第 $k$ 个任务的专属预测网络,相当于各科室医生根据检查单给出专科判断。
- 任务输出$y^k$ 是第 $k$ 个任务的最终预测结果,如点击概率、转化概率等。
- 任务遍历$k = 1, 2, \dots, K$ 表明共有 $K$ 个任务,每个任务都要经历“共享检查 + 专科判断”的流程。
MMOE核心原理
医院把会诊升级为“专家团”:请来心内科、骨科、神经内科、康复科四位专家,每位专家独立翻阅病历,提出自己的初步判断。但最终意见谁说了算?不能简单取平均。于是每个科室各派一名会诊主持人,主持人根据患者当下的具体症状,给四位专家的意见分配不同的权重——膝盖疼得厉害时,骨科的嗓门就大;失眠严重时,神经内科的分量就重。这套“多位专家 + 按需加权”的机制,正是MMOE的骨架。
MMOE(Multi-gate Mixture-of-Experts,多门控专家混合)由两部分构成:专家网络与门控网络。专家网络是若干个相互独立的全连接网络,每个网络相当于一位专家,从原始特征中提取一种“视角”的表示——有的专家擅长捕捉用户短期兴趣,有的擅长捕捉物品属性关联,各有分工。门控网络则相当于会诊主持人,它接收同样的输入特征,输出一组归一化的权重,决定当前样本下每个专家的话语权。
每个任务 $k$ 都拥有自己独立的门控 $g^k$,因此不同任务可以“偏心”不同的专家。CTR任务可能更信任擅长“兴趣挖掘”的专家,CVR任务则更信任擅长“购买意图”的专家。最终,任务的输入是所有专家输出的加权和,数学表达如下:
MMOE聪明在“分而治之”:专家各自深耕一种视角,门控按需取用。相比Shared-Bottom,当任务差异大时,不同任务可以通过门控选择不同的专家组合,互不干扰。但会诊中仍少了一个角色——那位负责基础检查的全科医生。PLE正是看准了这个盲区。
- 专家输出$f_i(x)$ 是第 $i$ 个专家网络对输入 $x$ 的提取结果,代表一种独立视角下的特征表达。
- 门控权重$g^k(x)_i$ 是任务 $k$ 分配给第 $i$ 个专家的权重,权重越大表示越信任这位专家。
- softmax归一化$\operatorname{softmax}(W_{gk} x)$ 将门控原始打分转化为概率分布,确保所有专家权重之和为 1。
- 加权融合$\sum_{i=1}^{n} g^k(x)_i \cdot f_i(x)$ 把 $n$ 位专家的意见按权重加起来,得到任务 $k$ 的融合输入。
PLE结构创新
一座成熟的会诊中心应该有明确的分工。患者进门后,先由全科医生做全套基础检查(血常规、尿常规、影像初筛),形成一份“基础病历”;这份病历同步发给所有专科医生参考。随后,骨科医生结合基础病历做膝关节专项检查,神经内科结合基础病历做睡眠监测——既充分共享“公共信息”,又保留各科室的“独门绝活”。这就是PLE的设计哲学:渐进式分层提取。
PLE(Progressive Layered Extraction,渐进式分层提取)把MMOE中的专家划分为两类:共享专家和任务特定专家。共享专家相当于全科医生,从原始特征中提取所有任务通用的知识;任务特定专家相当于专科医生,只提取与本任务强相关的信息。在结构上,PLE使用多层堆叠,每一层都同时包含两类专家,下层输出作为上层的输入,信息逐层精炼。
以任务 $k$ 为例,PLE的每一层先分别对共享专家和特定专家做门控加权,然后将两类结果相加,送入任务塔。共享专家部分保证“公共病历”不浪费,特定专家部分保证“专科判断”不失焦:
PLE在MMOE基础上做的是“分层治理”:全科医生兜底,专科医生深挖。在腾讯视频、微信看一看等大规模推荐场景中,PLE被验证能显著缓解跷跷板效应,成为多任务学习的标杆结构。结构到位了,接下来还要解决“怎么训练”的问题。
- 特定专家融合$\sum_{i=1}^{P_k} g_{sp}^{k,i}(x) \cdot W_{k,i}(x)$ 是任务 $k$ 专属的 $P_k$ 个“专科医生”加权意见,解决任务个性问题。
- 共享专家融合$\sum_{j=1}^{Q} g_{sh}^{k,j}(x) \cdot S_j(x)$ 是所有任务共用的 $Q$ 个“全科医生”加权意见,提炼通用规律。
- 两类门控$g_{sp}^{k,i}$ 与 $g_{sh}^{k,j}$ 分别是特定专家和共享专家的门控权重,都由输入 $x$ 决定,softmax归一化后求和为 1。
- 任务塔输出两类意见相加后经过任务塔 $h^k$,得到最终的预测结果 $y^k$。
模型训练要点
会诊中心有了架构,还需要一套管理规范:各科室意见如何汇总、谁的话更有分量、复查流程怎么安排。多任务模型的训练同样是一场精细的“流程管理”——不同任务的损失怎么合并、权重怎么分配、训练节奏怎么控制,直接决定这个“会诊中心”是高效协作还是吵成一团。
多任务学习的损失函数绝不是简单相加,而是每个任务损失的加权求和。假设共有 $K$ 个任务,每个任务有各自的损失 $L_k$(如CTR用交叉熵、CVR用交叉熵),总损失如下:
经验上,样本稀疏的任务需要更大的权重,否则它的话语权会被样本量大的任务淹没。比如CVR样本通常远少于CTR样本,就需要给CVR任务设置更高的 $w_k$,让模型“偏心”地照顾它。
除了损失权重,常见的训练策略还包括:一是梯度调和——当两个任务的梯度方向夹角为钝角(即“打架”)时,通过梯度投影消解冲突;二是课程学习——先训练共享专家,让“全科医生”先学会基础检查,再训练任务特定专家,让“专科医生”在稳定地基上精修;三是动态权重——训练过程中根据各任务loss下降速度在线调整 $w_k$,避免某个任务过早收敛而另一个还在挣扎。
会诊中心刚成立时,科室之间难免手忙脚乱,此时流程管理就是生命线:谁说话声音大(任务权重)、谁先发言(课程学习)、意见冲突时找谁调解(梯度调和)。训练策略理顺了,多任务模型才真正开始“会诊”,而不是“吵架”。训练完成后,这个会诊中心被派往哪里?答案是推荐系统的第一线。
- 总损失目标$L$ 是整个模型的最终优化目标,是各任务损失的加权和。
- 单任务损失$L_k(\theta)$ 是第 $k$ 个任务的损失函数,$\theta$ 代表模型全部参数。
- 任务权重$w_k$ 是第 $k$ 个任务的权重系数,控制该任务在总损失中的话语权。
- 遍历全部任务$\sum_{k=1}^{K}$ 表示对所有 $K$ 个任务的加权损失求和。
推荐系统应用
患者走进会诊中心,先挂号、再分诊、最后进对应诊疗室。推荐系统也是一条流水线:先判断“用户会不会点”(CTR),再判断“点了之后会不会买”(CVR)。两个任务天生适合共享“病历”——用户画像、物品属性、上下文特征,都是同一份输入。MMOE/PLE在这里扮演的角色,就是那座高效运作的会诊中心。
传统的推荐做法是分别训练CTR模型和CVR模型,如同两个各自为政的科室:CTR模型精于捕捉“吸引力”,CVR模型精于捕捉“购买力”,但互相不知道对方学到了什么,造成特征信息的大量浪费。更重要的是,CVR任务的训练样本只来源于“点击后”的用户,存在严重的样本选择偏差。
用MMOE/PLE做CTR与CVR联合建模,是工业界的标准打法:底部是共享的embedding特征层,中间是几位“专家”MLP,再往上分成两个任务塔——一个输出点击概率 $\hat{p}_{ctr}$,一个输出转化概率 $\hat{p}_{cvr}$。两个门控各管各的任务,按需调配专家权重。最终线上排序时,把两个概率加权合成一个综合分数:
其中 $\alpha$ 和 $\beta$ 是业务权重,由运营目标决定——如果当前阶段更看重成交,就调高 $\beta$。在更复杂的场景中,还可以加入“GMV预估”“停留时长预估”等多个任务,形成多目标排序体系。
分诊护士(排序模块)根据患者当下的核心诉求(点击兴趣 vs 购买意图),调配各科室意见,给出一个综合方案。MMOE/PLE已在抖音、淘宝、腾讯广告等大规模产品中落地,普遍带来GMV与用户体验的双重提升。不过,把模型从论文搬进生产环境,还有一段崎岖的山路要爬。
- 点击概率$\hat{p}_{ctr}$ 是CTR任务塔输出的预估点击概率,值域在 0 到 1 之间。
- 转化概率$\hat{p}_{cvr}$ 是CVR任务塔输出的预估转化概率,反映点击后的购买可能。
- 加权求和$\alpha \cdot \hat{p}_{ctr} + \beta \cdot \hat{p}_{cvr}$ 将两个概率线性组合,得到最终排序分。
- 业务权重$\alpha$ 与 $\beta$ 由业务方设定,二者相对大小决定排序更偏点击还是更偏转化。
工程实践挑战
会诊中心再先进,也得靠挂号系统、病历系统、检查设备顺畅协作才能运转。MMOE/PLE从论文走向工程落地,同样要翻越几座大山:数据稀疏、模型规模、在线延迟、调参玄学。任何一个环节掉链子,“会诊中心”都可能从能力满格变成纸上谈兵。
第一座大山是数据稀疏。CVR任务的训练样本往往只有CTR任务的十分之一甚至百分之一。共享专家很容易被CTR任务“带偏”,把CVR任务的需求晾在一边。常见的解法包括:对小样本任务过采样、负样本加权,或引入ESMM(Entire Space Multi-task Model)思想,把“曝光→点击→转化”的全体样本空间纳入建模,用多任务架构缓解稀疏问题。
第二座大山是模型规模与在线延迟。MMOE动辄4-8个专家,PLE的专家更多,参数量和计算量水涨船高。线上推理时,如果把每个专家和门控都完整算一遍,延迟压力很大。工程上的通用做法是门控TopK稀疏化——既然门控权重本身就接近“偏科”,那不如只取出权重最大的前 $t$ 个专家参与计算,其余直接跳过:
配合专家网络的hidden size压缩(如从256降到64)、量化剪枝等手段,可以在几乎不掉点的情况下把推理成本砍掉一大半。
第三座大山是调参经验。门控网络初始化的偏置不宜过大,否则训练一开始就“独宠”某一位专家,其他专家形同虚设;共享专家与特定专家的初始化最好有所差异,避免两者功能趋同;任务权重的搜索一般从 $1:1$ 起步,再向样本稀疏的任务倾斜,每次小步调整、观察线上指标。
一家优秀的医院从来不是靠某位神医单打独斗,而是靠整个信息系统的精密协作。MMOE/PLE落地同样如此——对数据稀疏的理解、对性能开销的取舍、对参数的耐心调试,这些工程能力,恰恰是一名算法工程师最值钱的核心竞争力。
- TopK截断$\operatorname{TopK}(\cdot, t)$ 表示只保留权重最大的 $t$ 个专家,其余权重强制置零。
- 稀疏门控输出$g^k(x)$ 经过TopK后成为稀疏向量,仅有 $t$ 个非零项,对应真正参与计算的专家。
- 门控打分$\operatorname{softmax}(W_{gk} x)$ 是门控网络对输入的打分并归一化,TopK作用在归一化之后。
AI 应用场景
电商信息流多目标排序
阶段:模型训练与在线推理
解决的问题:电商App的推荐信息流传统做法是CTR、CVR两个模型独立预测,互相不共享特征,导致信息浪费;且CVR样本稀疏,单独训练精度差。MMOE/PLE将两任务置于同一模型,共享用户行为序列、商品embedding等底层特征,让点击任务和转化任务互相借力,显著缓解稀疏样本问题。
具体案例:某电商平台将信息流排序从“单CTR模型”升级为“MMOE双塔(CTR+CVR)”,共享用户实时行为特征。上线后CTR持平的前提下,整体GMV提升4.2%,支付转化率提升11%。后续进一步升级为PLE结构,商品详情页的“加入购物车率”与“支付率”两个任务也都纳入同一模型,负迁移现象明显下降。
短视频平台时长与互动联合预估
阶段:特征工程与模型结构设计
解决的问题:短视频推荐的核心指标包括“播放时长”与“点赞/评论率”,两者相关性高但各有侧重。传统单模型无法同时优化两个目标,而PLE允许共享专家提取“内容质量”等公共信号,同时为每个任务保留特定专家强化各自目标。
具体案例:某短视频App用PLE同时建模“播放时长”与“互动率”两个任务,通过分层提取使公共表征与个性表征解耦。实验表明,相比Shared-Bottom基线,播放时长提升6.5%,互动率提升3.8%,且线上资源的推理耗时仅增加8%。
广告系统CTR与ROI协同优化
阶段:模型评估与线上调参
解决的问题:广告系统既要预估点击率(决定流量分配),又要预估广告主的投资回报率ROI(决定出价策略)。两者目标不完全一致,门控机制可以让每个广告主账户动态调节对“点击”与“转化”专家的依赖,实现按需协同。
具体案例:某广告平台在竞价排序模型中使用MMOE结构,以CTR与“广告点击后30分钟内的下单概率”为双任务;通过动态调整任务权重,使广告主的整体ROI提升9.7%,同时平台流量变现效率保持稳定。
Python 演示
import numpy as np class MMOE: """简化版 MMOE:专家网络 + 每任务独立门控 + 任务塔""" def __init__(self, input_dim=8, n_experts=4, hidden_dim=16, n_tasks=2, n_classes=2, seed=42): rng = np.random.default_rng(seed) self.n_experts = n_experts self.n_tasks = n_tasks # 专家网络:input_dim -> hidden_dim,每个专家一套参数 self.expert_W = [rng.normal(0, 0.1, (input_dim, hidden_dim)) for _ in range(n_experts)] self.expert_b = [rng.normal(0, 0.1, hidden_dim) for _ in range(n_experts)] # 门控网络:每个任务独立一套参数,input_dim -> n_experts self.gate_W = [rng.normal(0, 0.1, (input_dim, n_experts)) for _ in range(n_tasks)] self.gate_b = [rng.normal(0, 0.1, n_experts) for _ in range(n_tasks)] # 任务塔:hidden_dim -> n_classes,每个任务一个 self.task_W = [rng.normal(0, 0.1, (hidden_dim, n_classes)) for _ in range(n_tasks)] self.task_b = [rng.normal(0, 0.1, n_classes) for _ in range(n_tasks)] def forward(self, x): """返回每个任务的 logits 以及任务 0 的门控权重(便于观察)""" expert_outs = [np.tanh(x @ self.expert_W[i] + self.expert_b[i]) for i in range(self.n_experts)] all_logits = [] g0 = None for k in range(self.n_tasks): # 门控打分 gate_logits = x @ self.gate_W[k] + self.gate_b[k] gate_logits = gate_logits - gate_logits.max(axis=1, keepdims=True) gate = np.exp(gate_logits) / np.exp(gate_logits).sum(axis=1, keepdims=True) if k == 0: g0 = gate[0] # 专家加权融合 fused = np.zeros_like(expert_outs[0]) for i in range(self.n_experts): fused += gate[:, i:i+1] * expert_outs[i] logits = fused @ self.task_W[k] + self.task_b[k] all_logits.append(logits) return all_logits, g0 def compute_loss(self, x, y_list): """多任务交叉熵损失加权求和""" all_logits, _ = self.forward(x) total_loss = 0.0 for k in range(self.n_tasks): exp_logits = np.exp(all_logits[k] - all_logits[k].max(axis=1, keepdims=True)) probs = exp_logits / exp_logits.sum(axis=1, keepdims=True) n = y_list[k].shape[0] total_loss -= np.mean(np.log(probs[np.arange(n), y_list[k]])) return total_loss def main(): rng = np.random.default_rng(0) n_sample = 128 x = rng.normal(0, 1, (n_sample, 8)) # 任务0:与第2、3个特征正相关的二分类 prob0 = 1.0 / (1.0 + np.exp(-(x[:, 2] + 0.5 * x[:, 3]))) y0 = (rng.random(n_sample) < prob0).astype(int) # 任务1:与第5、6个特征负相关的二分类,与任务0部分相关 prob1 = 1.0 / (1.0 + np.exp(-(-x[:, 5] + 0.3 * x[:, 2]))) y1 = (rng.random(n_sample) < prob1).astype(int) model = MMOE(input_dim=8, n_experts=4, hidden_dim=16, n_tasks=2, n_classes=2, seed=42) loss = model.compute_loss(x, [y0, y1]) logits, gate0 = model.forward(x) pred0 = np.argmax(logits[0], axis=1) pred1 = np.argmax(logits[1], axis=1) acc0 = float((pred0 == y0).mean()) acc1 = float((pred1 == y1).mean()) print("多任务总损失: %.4f" % loss) print("任务0(CTR)预测准确率: %.2f" % acc0) print("任务1(CVR)预测准确率: %.2f" % acc1) print("第一个样本的任务0门控权重: %s" % np.round(gate0, 3)) if __name__ == "__main__": main()
expert_W = [rng.normal(0, 0.1, (input_dim, hidden_dim)) for _ in range(n_experts)]为每位专家初始化一套独立的权重矩阵,专家之间互不共享参数。self.gate_W = [rng.normal(0, 0.1, (input_dim, n_experts)) for _ in range(n_tasks)]每个任务拥有自己独立的门控网络参数,这是“多门控”(Multi-gate)的名称由来。gate_softmax门控打分经 softmax 归一化,确保所有专家权重之和为 1,模拟“主持人分配话语权”。fused = np.zeros_like(expert_outs[0]); for i in range(...): fused += gate[:, i:i+1] * expert_outs[i]对专家输出做加权求和,得到本任务融合后的特征表示。total_loss -= np.mean(np.log(probs[...]))多任务总损失为各任务交叉熵之和,简化版中未加额外任务权重。
常见误区
误区反正多任务共享参数能互相促进,那我干脆把点击、转化、收藏、分享、停留时长全塞进一个模型,任务越多模型越强。
正解任务之间相关性是前提。如果把相关性低甚至目标冲突的任务硬塞一起,共享底层会被“互扯后腿”,出现负迁移——这就是跷跷板效应的根源。正确的做法是先做任务相关性分析,用实验验证每个新增任务是否给原有任务带来显著提升,而不是无脑堆任务。
为何常见:因为多任务学习论文大多强调“共享促进”,初学者容易忽略其适用条件,误以为共享总是有益的。
误区门控网络输出的是“该用哪个专家”的判断,所以每个样本只会选择权重最大的那一个专家去计算。
正解门控输出经过 softmax,是一个软加权分布。所有专家都会参与计算,只是权重有大有小。只有在工程优化时,才刻意用 TopK 机制做稀疏化,只计算前几个专家以降低延迟,这是取舍而非模型本意。
为何常见:因为“主持人选择专家意见”的比喻容易被理解成单选,加上工程上 TopK 稀疏化的应用,让人误以为门控天然是硬路由。
误区PLE 结构更新、论文指标更好,所以任何场景无脑用 PLE 就对了,MMOE 已经过时。
正解PLE 引入了任务特定专家和分层结构,参数量和计算量都大于 MMOE。当任务相关性很高、共享知识占绝对主导时,PLE 的特定专家可能学不到足够多的差异化信号,收益有限,还白白增加部署成本。工程上应基于任务相关性和资源预算做选择。
为何常见:因为论文对比实验通常展示在多个数据集上的平均提升,让人误以为“新结构全面碾压旧结构”,忽略了场景差异与成本权衡。
误区多任务学习的精髓是共享,那我让所有任务尽可能多共享底层参数,共享越充分,迁移学习的效果越好。
正解共享存在“度”的问题。底层共享过多,任务独特的信息无法被充分表达,任务间冲突加剧。MMOE 和 PLE 的精髓恰恰在于“分治”——专家各司其职、门控按需分配、特定专家保留个性。共享的是“基础病历”,而不是“全部思考过程”。
为何常见:因为从 Shared-Bottom 出发理解多任务,容易把“共享”当作唯一关键词,忽略了后续结构创新都是在“减少过度共享”上做文章。
面试题
Q1. 在 MMOE 中,门控网络的输出具有什么特性?
- A.总和大于一的权重分配
- B.各专家权重和为一的软加权← 正确答案
- C.每个样本只激活单个专家
- D.权重完全由任务塔决定
答案:B。门控输出经 softmax 归一化,所有专家权重之和恒为 1,且是软加权(所有专家都参与)。选项 A 违反归一化,C 是硬路由误解,D 错误——门控输入是原始特征而非任务塔输出。
Q2. Shared-Bottom 结构的主要缺陷是什么?
- A.模型参数量过大难以训练
- B.任务差异大时产生负迁移← 正确答案
- C.无法处理高维稀疏特征
- D.在线推理延迟不可接受
答案:B。Shared-Bottom 让所有任务共用一套底层参数,当任务相关性低时,底层表示会顾此失彼,一个任务涨、另一个任务跌,即负迁移(跷跷板效应)。它参数少、训练快,A、C、D 均不是其主要缺陷。
Q3. 多任务学习的核心目标是什么?
- A.让相关任务共享表示互相促进← 正确答案
- B.为每个任务训练独立模型
- C.减少输入特征的数量
- D.强制增加模型参数量
答案:A。多任务学习的本质是让多个相关任务共享底层表示,利用任务相关性互相“借力”,从而提升每个任务的泛化性能。独立建模违背共享思想,减少特征与增加参数量都不是目标。
Q4. 下列哪些属于 PLE 相比 MMOE 的改进?
- A.引入任务特定专家← 正确答案
- B.引入共享专家← 正确答案
- C.完全去掉门控网络
- D.退化为单层网络结构
答案:AB。PLE 的核心创新是把专家显式分为“共享专家”和“任务特定专家”,共享专家提炼公共信息、特定专家保留任务个性,再配合分层提取。它保留了门控机制,且是多层结构,因此 C、D 错误。
Q5. 以下哪个现象最符合多任务学习中的“跷跷板效应”?
- A.一个任务指标上升另一个任务指标下降← 正确答案
- B.训练损失剧烈震荡无法收敛
- C.模型参数量随任务数线性增长
- D.门控权重在训练中不断跳变
答案:A。跷跷板效应指多任务模型中一个任务性能提升导致另一个任务性能下降,如同跷跷板两端此起彼伏。它是任务间负迁移的典型表现,是 MMOE 和 PLE 着力解决的问题。B、C、D 均与此概念无关。
Q6. 为什么 MMOE 的门控要使用 softmax 而不是 sigmoid?
- A.保证所有专家权重之和为 1← 正确答案
- B.加快模型收敛速度
- C.减少专家网络参数量
- D.让门控输出变成二值向量
答案:A。softmax 将多个专家打分归一化为概率分布,输出非负且总和为 1,含义清晰(话语权份额)。sigmoid 是逐元素独立激活,输出之和不为 1,无法表达“在专家之间分配话语权”的语义。
Q7. 多任务训练中,防止小样本任务被大样本任务淹没的常用方法有哪些?
- A.增大该任务的损失权重← 正确答案
- B.对小样本任务进行过采样← 正确答案
- C.删除大样本任务的部分样本
- D.将所有任务权重置为零
答案:AB。增大损失权重能让模型更重视小样本任务,过采样则直接平衡样本比例,两者都是工业界常用手段。直接删大样本数据会造成信息浪费,权重全置零则等于放弃训练,C、D 均不合理。
Q8. 在 MMOE 中,“专家”网络的本质是什么?
- A.相互独立的特征提取网络← 正确答案
- B.多个并行的任务输出层
- C.不同损失函数的组合器
- D.用于数据采样的生成器
答案:A。专家网络是若干相互独立的特征提取器,每个专家从原始特征中提取一种视角的表示,是 MMOE 结构的基础。任务输出层(任务塔)是另一层结构,损失函数与数据采样是训练策略,与专家定义无关。
Q9. 在线推理时降低 MMOE 计算延迟的有效手段是什么?
- A.对门控做 TopK 只计算部分专家← 正确答案
- B.增加专家网络的数量
- C.扩大专家隐藏层维度
- D.让所有任务共享同一个门控
答案:A。门控 TopK 稀疏化只保留权重最大的前 t 个专家参与计算,将专家网络的计算量从 n 次降为常数次,是工业界常见的降延迟手段。增加专家数、扩大维度都会增延迟,共享门控则违背多门控设计。
Q10. 关于 MMOE 中门控网络的输入与输出,下列说法正确的有哪些?
- A.门控与专家共享相同的输入特征← 正确答案
- B.不同任务的门控参数相互独立← 正确答案
- C.门控输出的专家权重之和为 1← 正确答案
- D.门控输出必须经过 ReLU 激活
答案:ABC。MMOE 中所有门控和专家都接收同一份输入特征 x(A 对);每个任务拥有自己的门控参数矩阵 W_{gk},彼此独立(B 对);门控输出经 softmax 归一化,权重和为 1(C 对)。门控用 softmax 而非 ReLU,D 错误。