推荐系统中的多任务建模:从动机到 Loss 融合

推荐系统中的多任务建模:从动机到 Loss 融合

摘要:本文以问题驱动的视角,系统梳理多任务学习在推荐系统中的核心原理与工程实践。从单任务建模的结构性缺陷出发,逐步引出任务关系设计、网络架构选择、多目标 Loss 融合三大核心问题,并重点对 GradNorm、Uncertainty Weighting、PCGrad 三种动态权重方法进行公式推导与横向对比。最后讨论如何通过离线评估体系判断新增目标是否真正有效。

第一章:单任务建模的根本局限

在推荐系统的早期实践中,工程师通常为每一个业务目标单独训练一个模型:预测点击率的模型、预测完播率的模型、预测转化率的模型各自独立,互不干扰。这种做法直觉上清晰,工程上简单,但它隐藏着两个在规模化后会逐渐暴露的结构性问题。

1.1 信号稀疏与选择性偏差

以电商场景中的转化率(CVR)预测为例。在一次完整的用户行为链路中,曝光数量级为亿,点击数量级为千万,而最终发生购买的样本数量级可能只有百万甚至更少。如果只用转化样本来训练 CVR 模型,正样本极度稀疏,模型的泛化能力会非常差。

一个看似合理的补救方案是用全量曝光样本训练,将未点击的样本也标记为负例。但这引入了另一个问题,即选择性偏差(Sample Selection Bias,SSB):CVR 模型在训练时从未见过"曝光但未点击"的样本分布,而在线上服务时却需要对所有曝光物品打分。训练分布与推断分布之间的偏差,会使模型的预测值在全量样本空间上系统性地失真。

阿里巴巴于 2018 年提出的 ESMM 模型正是针对这一问题设计的。它将 CVR 预测分解为 CTR 和 CTCVR(点击后转化率)两个子任务,在全量曝光样本空间上联合训练,通过任务之间的参数共享,使 CVR 子塔借助 CTR 的大量样本获得充分训练,同时避免了在全量样本上直接标注 CVR 标签的问题。这是多任务建模在推荐系统中最早期也最典型的一次工业应用。

1.2 单一指标的价值对齐偏差

即便信号稀疏的问题得到缓解,单任务建模仍然面临一个更根本的困境:任何单一行为指标都只是用户真实满意度的局部投影,孤立优化这一指标必然导致系统目标与用户价值之间的偏差。

这一现象可以用"Goodhart 定律"来理解------当一个指标成为优化目标后,它就不再是好的评估指标,因为系统会找到在这一指标上得分高但实际对用户无益的路径。

在视频推荐中,纯粹优化 CTR 会导致封面夸张、标题党内容被高估,因为这类内容确实能引发点击,但用户进入后的满意度很低。改为优化完播率,又会系统性地倾向于推荐时长极短的内容,因为短视频的完播率天然更高。优化互动率(点赞、评论)则会偏向情绪化内容,因为这类内容更容易激发用户的即时反应。

每一个指标单独看都有其合理性,但它们从不同侧面反映同一件事:用户对当前内容是否满意。没有任何单一指标能完整捕捉这一多维度的满意度信号。用户行为的本质是多维的,推荐系统的优化目标也理应是多维的。

这是引入多任务建模的根本动机:不是为了同时优化多个指标,而是通过多个指标的联合学习,更准确地逼近无法被任何单一指标完整描述的用户价值。


第二章:多任务建模引入了哪些新问题

多任务建模解决了上述问题,但同时引入了三个新的挑战,这三个挑战构成了本文后续章节的主线。

第一个问题:哪些任务应该放在一起建模? 多任务学习的核心假设是任务之间存在可以共享的知识,参数共享能使任务之间互相提供监督信号,从而改善各自的泛化能力。但这一假设并非总是成立。如果两个任务的学习目标在语义上存在冲突,强行将它们放入同一个模型,共享的参数会同时收到两个方向相反的梯度更新,最终谁也训练不好,甚至两个任务的效果都不如单独建模------这就是所谓的**负迁移(Negative Transfer)**问题。因此,在设计多任务系统之前,必须先对任务之间的关系有清晰的认知。

第二个问题:任务之间的梯度冲突如何处理? 即便任务在整体上是相关的,在具体的训练样本上也会出现梯度方向相反的情形。例如,一个用户点击了某条内容(click=1),但此后三天内没有再消费任何语义相似的内容(delay_click=0)。在这条样本上,点击目标要求共享参数向"推动用户嵌入与物品嵌入靠近"的方向更新,而延续消费目标则要求其向相反方向更新。这种样本级别的梯度冲突,通过共享的 Embedding 层传播到所有目标,是多任务优化中最难处理的问题之一。

第三个问题:多个目标的 Loss 如何合理融合为一个优化目标? 将各任务损失值直接相加,看似公平,实则不然。不同任务的损失函数类型不同(分类任务用 BCE,回归任务用 MSE),量级差距可能达到一个数量级;不同任务的样本覆盖率差异极大,稀疏目标的有效梯度在整个批次维度上贡献极小;不同任务的学习速率不同,收敛快的任务在后期实际上持续主导着共享参数的更新。这三个因素叠加,会使简单求和的多目标优化严重失衡。

这三个问题之间并非独立,而是有内在的逻辑顺序:先回答哪些任务该共享(任务关系),再设计如何共享(网络架构),最后解决多少程度共享(Loss 融合中的权重分配)。接下来的三章将依次展开。


第三章:任务关系的先验认知

在动手设计模型架构之前,有一个问题必须先行回答:哪些任务适合共享参数? 这是多任务系统设计的逻辑起点,也是工程实践中最容易被跳过的环节。

3.1 任务关系的三种分类

根据任务之间的依赖结构,可以将多任务场景大致分为三类。

并行任务是最常见的情形,各任务地位对等,没有条件依赖关系,互相提供辅助监督信号。视频推荐中的点击、完播、点赞、评论四个目标就是典型的并行任务------它们作用于同一条曝光样本,从不同行为维度反映用户满意度,适合在同一模型中共享底层特征表示。

级联任务存在严格的条件依赖关系,下游任务的训练样本是上游任务样本的子集。电商中的曝光→点击→加购→购买就是一条典型的级联链路。这类任务的特殊性在于,不同任务的样本空间本身就不一致,直接混合训练会引入 SSB 问题。ESMM 的设计思路是将 CVR 分解为可在全量空间训练的 CTCVR,从根本上规避了样本空间不一致的问题。

主辅任务中的辅助任务并不参与最终的线上打分,其存在的唯一目的是为主任务提供额外的监督信号,改善主任务的特征表示质量。例如,在语义相似度建模中加入自监督对比学习作为辅助目标,并不要求对比学习的打分具有独立的业务含义,只需要它能使 Embedding 空间的结构更合理。这类辅助任务的 Loss 权重通常较低,且往往在线上服务时直接裁掉对应的计算路径。

3.2 任务相关性的度量方法

明确了任务的结构关系之后,还需要定量评估任务之间的相关程度,从而判断共享参数是否会产生互益效果。以下是两种工程上可操作的方法。

方法一:梯度余弦相似度分析。 选取网络中的某一层共享参数(通常是共享 MLP 的最后一层),在验证集上分别计算每个任务对该层参数的梯度向量 \(\mathbf{g}_i\) 和 \(\mathbf{g}_j\),然后计算两两任务之间的余弦相似度:

\[\text{sim}(i, j) = \frac{\mathbf{g}_i \cdot \mathbf{g}_j}{\|\mathbf{g}_i\| \cdot \|\mathbf{g}_j\|} \]

在验证集上统计多个批次的均值,得到一个 \(K \times K\) 的相似度矩阵,其中 \(K\) 为任务数量。相似度持续为负的任务对,意味着在共享参数上两者的梯度方向长期相反,是负迁移风险最高的组合,需要在架构设计中为其提供独立的参数空间,或在 Loss 融合中降低两者共享参数上的梯度叠加程度。

方法二:AUC 差异矩阵。 以单任务模型为基线,依次将各任务加入多任务模型,观测每个目标的 AUC 变化。具体地,设 \(\text{AUC}_k^{ST}\) 为任务 \(k\) 单独训练时在其专属评估集上的 AUC,\(\text{AUC}_k^{MT}\) 为其加入多任务模型后的 AUC,定义增益为:

\[\Delta \text{AUC}_k = \text{AUC}_k^{MT} - \text{AUC}_k^{ST} \]

对所有任务对 \((i, j)\) 构建增益矩阵,正值表示任务 \(j\) 的加入使任务 \(i\) 受益(正迁移),负值表示受损(负迁移)。这一矩阵直观地展示了任务组合的全景收益,是决定"哪些任务该放在一起"最直接的依据。

通过上述两种分析,如果发现某对任务的梯度余弦相似度长期为负、且 AUC 差异矩阵显示存在相互损害,就应当在架构层面为这对任务提供独立的参数通道,而非强行共享所有参数。 这一结论自然引出下一章的架构讨论。


第四章:架构层面的应对------从 MMoE 到 PLE

在明确任务关系之后,网络架构设计的核心问题是:如何控制参数共享的粒度,使相关任务能够充分共享知识,同时减少不相关任务之间的梯度干扰?

4.1 Hard Sharing 的局限

最早期的多任务架构采用硬参数共享(Hard Parameter Sharing):多个任务共享同一个底层网络,各自在顶层接独立的输出头。这种结构简单高效,但当任务之间的相关性较弱时,共享的底层网络会被迫学习一个所有任务都"勉强可用"但没有哪个任务真正满意的折中表示。

4.2 MMoE:软性的参数共享

Google 在 KDD 2018 提出的 MMoE(Multi-gate Mixture-of-Experts)将参数共享从"全有或全无"的硬选择,变为可学习的软混合。具体地,MMoE 设置 \(K\) 个 Expert 网络,每个 Expert 对输入特征学习不同的变换;每个任务有一个独立的 Gate 网络,输出 \(K\) 维的 Softmax 权重,决定该任务从各 Expert 中"借用"多少比例的知识:

\[\mathbf{h}t = \sum{k=1}^{K} g_t^k \cdot E_k(\mathbf{x}), \quad \text{其中} \sum_{k=1}^{K} g_t^k = 1 \]

这样,相关性强的任务 Gate 权重分布相近,自然地共享同一批 Expert 的表示;相关性弱的任务则 Gate 权重分布差异较大,实际上调用了不同的 Expert 组合。

但 MMoE 存在一个结构性问题:所有 Expert 是被所有任务共享的。当任务之间差异较大时,每个 Expert 都会同时受到来自不同任务的梯度拉扯,最终学到的是各任务梯度的某种折中表示,而非任何一个任务真正需要的特征。这会导致"跷跷板现象"------在联合训练中,某个任务的指标提升时,另一个任务的指标往往随之下降,难以同时改善所有任务。

4.3 PLE:显式分离的参数空间

腾讯在 RecSys 2020 提出的 PLE(Progressive Layered Extraction)在 MMoE 的基础上引入了一个关键改进:每个任务不仅有共享 Expert,还有只属于自己的独享 Expert(Task-Specific Expert)。在计算任务表示时,Gate 网络的加权范围从"所有 Expert"缩小为"本任务独享 Expert + 共享 Expert":

\[\mathbf{h}t = \sum{k \in \mathcal{E}_{shared} \cup \mathcal{E}_t} g_t^k \cdot E_k(\mathbf{x}) \]

其中 \(\mathcal{E}_{shared}\) 为共享 Expert 集合,\(\mathcal{E}_t\) 为任务 \(t\) 的独享 Expert 集合。这一结构性改变使得:任务特有的梯度更新只流向独享 Expert,不再污染其他任务的参数;跨任务的共有知识仍通过共享 Expert 传递。从实验结果来看,PLE 在腾讯视频的多个任务上均同时取得提升,从根本上缓解了 MMoE 的跷跷板问题。

架构设计层面的改进有其上限:它只能在结构上减少任务间的梯度干扰,但无法解决各任务 Loss 在量级和梯度幅度上的优化失衡问题。 即便在 PLE 框架下,共享 Expert 仍然同时受到所有任务的梯度更新,当各任务的 Loss 权重不合理时,主导性任务的梯度仍会过度影响共享参数的更新方向。这正是 Loss 融合设计要解决的核心问题。


第五章:多目标 Loss 融合

这是本文最核心的章节。多目标 Loss 融合的目标,是为每个任务在梯度优化层面分配合理的"话语权",使每个任务都能得到有效训练,而不是被覆盖率更高、Loss 量级更大的强势任务主导。

5.1 等权求和的三个隐患

将各任务损失直接相加得到总损失:

\[\mathcal{L}{total} = \sum{k=1}^{K} \mathcal{L}_k \]

这是最简单的做法,也是大多数早期多任务模型的默认选择。但它隐含着三个结构性偏差,在实践中经常导致部分任务实际上没有被有效训练。

隐患一:Loss 量级不一致。 二分类任务通常使用 Binary Cross-Entropy(BCE)作为损失函数,其值域约为 \([0, \log 2] \approx [0, 0.69]\);而回归任务使用均方误差(MSE),其值域与目标变量的方差直接相关,量级可能远大于 BCE。以时长预测为例,如果目标值(归一化后的时长比例)的方差为 0.1,则 MSE 的典型值约为 0.1,但如果未做归一化,目标值的方差可能达到数百,MSE 的值也随之放大。在这种情况下,等权求和的总 Loss 中,MSE 目标产生的梯度绝对值会远大于 BCE 目标(MSE 的梯度为 \(2(q-y)\),BCE 的梯度为 \(q-y\)),实际上以不成比例的权重主导了共享参数的更新,而 BCE 目标的学习信号几乎被淹没。

隐患二:样本覆盖率差异导致有效梯度失衡。 在工业推荐系统中,不同目标的有效样本数量差距极大。以延续消费目标(delay_click)为例,其正样本要求用户在三天内对语义相似的内容消费步长不低于 3,这一条件只有少数高质量消费行为才能满足,正样本覆盖率可能仅有全量样本的 5%~10%。即便通过 mean_with_mask 对有效样本内部做了均值归一化,该目标在整个批次维度上的绝对梯度贡献,仍与其有效样本数量成正比。覆盖率只有 5% 的目标,对共享参数的实际梯度影响,大约只有覆盖率 95% 的主目标的 \(\frac{1}{19}\)。在等权求和的框架下,这一目标实际上几乎没有参与共享参数的训练。

隐患三:收敛速度差异导致主导任务固化。 不同任务的收敛速度不同。收敛快的任务(通常是样本丰富、标签干净的主任务)在训练的中后期 Loss 已趋近于最优值,梯度幅度快速萎缩;而收敛慢的稀疏任务此时还在主动学习,但其梯度贡献被快速萎缩的主任务梯度所掩盖。这种动态不平衡会随训练步数的增加而加剧,形成"强者恒强"的马太效应:主任务持续主导共享参数的更新,稀疏任务的学习信号长期被压制。

5.2 固定权重加权

将总 Loss 改为加权求和:

\[\mathcal{L}{total} = \sum{k=1}^{K} w_k \mathcal{L}_k \]

其中 \(w_k\) 为人工设定的固定系数。这是工业界使用最广泛的方案,实现简单,且不引入额外的计算开销。

固定权重方案的效果好坏,很大程度上取决于权重初始化是否合理。一种常见的初始化思路是:在单任务模式下运行若干步(或一个 epoch),记录各任务的平均 Loss 值 \(\bar{\mathcal{L}}_k^{(0)}\),然后以主任务 Loss 为基准,将各任务的初始权重设置为:

\[w_k^{(0)} = \frac{\bar{\mathcal{L}}_{main}^{(0)}}{\bar{\mathcal{L}}_k^{(0)}} \]

这一初始化的目的是使所有任务在训练初期的加权 Loss 处于同一量级,从而使各任务对共享参数的初始梯度幅度大致对齐。此后,基于第六章中介绍的 AUC 差异矩阵,根据各任务的实际离线效果进行小步调整。

需要纠正工程实践中的一个常见误区:权重 \(w_k\) 调大不等于该任务"在业务上更重要",它的实际含义是对该任务因样本稀疏或 Loss 量级偏小导致的梯度弱势进行补偿。 如果一个任务的覆盖率只有主任务的 5%,将其权重设为 20 也只是将其梯度贡献拉回与主任务同等水平,而非给予它额外的优先级。权重设计的目标是公平,而非偏袒。

5.3 动态权重学习

固定权重的缺点在于,各任务之间的相对 Loss 量级会随训练进行而不断变化,静态权重无法持续保证各任务的梯度平衡。动态权重方法的思路是,将权重本身作为训练过程的一部分,使其随模型状态自动调整。下面介绍三种主流方法。

方法一:GradNorm(Chen et al., NeurIPS 2018)

GradNorm 的核心思想是:各任务应当以相同的相对速率学习。 如果某个任务学得过快(Loss 下降比例远大于其他任务),它不应该继续主导梯度更新;反之,如果某个任务学得过慢,应当给予它更多的梯度权重。

设各任务的权重 \(w_k(t)\) 在训练步 \(t\) 时为可学习参数。选取共享网络的某一层参数 \(W\)(通常为最后一层共享层),定义任务 \(k\) 在该层的加权梯度范数为:

\[G_k(t) = \left\| \nabla_W \left[ w_k(t) \mathcal{L}_k(t) \right] \right\|_2 \]

为了度量各任务的相对学习进度,定义任务 \(k\) 在第 \(t\) 步的训练速率比(Task Training Rate)

\[\tilde{r}_k(t) = \frac{\mathcal{L}_k(t) / \mathcal{L}k(0)}{\mathbb{E}{j}\left[ \mathcal{L}_j(t) / \mathcal{L}_j(0) \right]} \]

分子 \(\mathcal{L}_k(t) / \mathcal{L}_k(0)\) 是任务 \(k\) 的 Loss 相对初始值的下降比例,分母是所有任务的该比例均值。\(\tilde{r}_k(t) > 1\) 说明任务 \(k\) 学得比平均水平慢(Loss 下降不足),需要更大的梯度权重;\(\tilde{r}_k(t) < 1\) 则反之。

GradNorm 的目标是使每个任务的梯度范数正比于其训练速率比,即:

\[G_k(t) \rightarrow \bar{G}(t) \cdot \tilde{r}_k(t)^\alpha \]

其中 \(\bar{G}(t) = \mathbb{E}_j[G_j(t)]\) 为当前步所有任务梯度范数的均值,超参数 \(\alpha > 0\) 控制对训练速率差异的敏感程度(原论文推荐 \(\alpha = 1.5\))。据此构造 GradNorm 的辅助损失:

\[\mathcal{L}{GradNorm} = \sum{k=1}^{K} \left| G_k(t) - \bar{G}(t) \cdot \tilde{r}_k(t)^\alpha \right|_1 \]

在每个训练步中,固定主模型参数,只对 \(\{w_k\}\) 求 \(\mathcal{L}_{GradNorm}\) 的梯度并更新权重;随后对权重做归一化:

\[w_k \leftarrow w_k \cdot \frac{K}{\sum_j w_j} \]

保持总权重之和等于任务数 \(K\),防止权重整体漂移导致学习率等效变化。

GradNorm 的优势在于直接在梯度幅度层面进行调控,理论上能消除因 Loss 量级差异导致的梯度失衡。其局限在于,梯度范数的计算发生在反向传播之后,在分布式训练中需要额外的通信开销;同时,\(\alpha\) 超参对结果比较敏感,需要在具体任务上验证。

方法二:Uncertainty Weighting(Kendall et al., CVPR 2018)

Uncertainty Weighting 从贝叶斯视角出发,将各任务的 Loss 权重建模为该任务输出的同方差不确定性(Homoscedastic Uncertainty) 的函数,并将不确定性参数 \(\sigma_k\) 作为模型参数与网络权重端到端联合学习。

对于回归任务 ,假设任务 \(k\) 的输出服从以模型预测为均值、\(\sigma_k^2\) 为方差的高斯分布:

\[p(y_k | f_k(\mathbf{x})) = \mathcal{N}(f_k(\mathbf{x}),\ \sigma_k^2) \]

其对数似然为:

\[\log p(y_k | f_k(\mathbf{x})) = -\frac{1}{2\sigma_k^2} \left\| y_k - f_k(\mathbf{x}) \right\|^2 - \log \sigma_k \]

对于分类任务 ,将 Softmax 输出的 logit 除以 \(\sigma_k^2\) 后再做 Softmax,近似的对数似然为:

\[\log p(y_k | f_k(\mathbf{x})) \approx \frac{1}{\sigma_k^2} \log p(y_k | f_k(\mathbf{x}) / \sigma_k^2) - \log \sigma_k \]

将 \(K\) 个任务的联合对数似然相加并取负号,得到多任务的总 Loss:

\[\mathcal{L}{total} = \sum{k=1}^{K} \left( \frac{1}{2\sigma_k^2} \mathcal{L}_k + \log \sigma_k \right) \]

这一公式揭示了一个优美的自动平衡机制:

  • 当任务 \(k\) 的不确定性 \(\sigma_k\) 较大时,有效权重 \(\frac{1}{2\sigma_k^2}\) 自动降低,该任务对总梯度的贡献减小。直觉上,不确定性大的任务标签噪声更高,过度拟合的收益有限,理应被降权。
  • 正则项 \(\log \sigma_k\) 防止模型将 \(\sigma_k\) 无限增大来规避所有任务的训练,确保每个任务都受到最低程度的监督。

Uncertainty Weighting 的核心优势是无需任何人工调参 ,权重由数据的内在噪声结构自动决定,且实现极为简单------只需在模型中增加 \(K\) 个可学习的标量参数 \(\log \sigma_k\)(通常在 log 空间参数化以保证数值稳定性)。

其局限在于,同方差不确定性假设(即 \(\sigma_k\) 与输入 \(\mathbf{x}\) 无关)在实践中并不总是成立。若不同样本的标签噪声差异很大(例如某些用户行为记录本身就更嘈杂),同方差假设会导致权重估计偏差。此外,当样本已经通过 sample_weight 等机制进行了手动 reweight 后,噪声分布的同方差性质可能已被破坏,此时 Uncertainty Weighting 的理论保证不再成立。

方法三:PCGrad(Yu et al., NeurIPS 2020)

PCGrad(Projecting Conflicting Gradients)与前两种方法不同,它不调整各任务的 Loss 权重,而是直接在反向传播阶段修正梯度方向,消除任务之间的梯度冲突分量

对于任意两个任务 \(i\) 和 \(j\),分别计算其对共享参数的梯度向量 \(\mathbf{g}_i\) 和 \(\mathbf{g}_j\)。若两个梯度之间存在冲突(余弦相似度为负,即 \(\mathbf{g}_i \cdot \mathbf{g}_j < 0\)),则将 \(\mathbf{g}_i\) 投影到 \(\mathbf{g}_j\) 的法平面上,消除 \(\mathbf{g}_i\) 在 \(\mathbf{g}_j\) 方向上的分量:

\[\mathbf{g}_i^{PC} = \mathbf{g}_i - \frac{\mathbf{g}_i \cdot \mathbf{g}_j}{\left\| \mathbf{g}_j \right\|^2} \mathbf{g}_j \]

若两个梯度方向不冲突(\(\mathbf{g}_i \cdot \mathbf{g}_j \geq 0\)),则保持原梯度不变:\(\mathbf{g}_i^{PC} = \mathbf{g}_i\)。

对每个任务,将其梯度与所有其他任务的梯度逐一进行上述 PCGrad 处理,最终每个任务的实际更新梯度为所有 PCGrad 处理结果的累加:

\[\mathbf{g}{i}^{final} = \sum{j \neq i} \mathbf{g}_{i,j}^{PC} \]

其中 \(\mathbf{g}_{i,j}^{PC}\) 表示任务 \(i\) 的梯度相对于任务 \(j\) 进行 PCGrad 处理后的结果。

PCGrad 的直觉非常清晰:保留各任务梯度中不相互冲突的部分,过滤掉会"拖后腿"的对抗分量,使每一步参数更新对所有任务都至少不是有害的。理论上,PCGrad 能保证更新后的参数对所有任务的 Loss 均不增加(在一阶近似下)。

其局限主要体现在计算开销上:对于 \(K\) 个任务,需要计算 \(O(K^2)\) 对梯度内积,当任务数量超过 10 个时,计算开销开始变得可观。此外,梯度内积的计算通常要求在同一设备上持有所有任务的梯度,在大规模数据并行训练中实现较为复杂。

三种方法的横向对比

维度 GradNorm Uncertainty Weighting PCGrad
权重来源 动态学习(梯度范数比) 动态学习(同方差不确定性) 不调权重,修正梯度方向
是否需要人工初始化 需要(超参 \(\alpha\)) 不需要 不需要
额外计算开销 中等(需计算共享层梯度范数) 极低(仅增加 \(K\) 个标量参数) 较高(\(O(K^2)\) 梯度内积)
对任务数量的敏感性 中等
核心假设 各任务应以等速率学习 任务标签噪声服从各向同性高斯 梯度冲突分量应被消除

5.4 工程选型建议

动态权重方法在学术基准上的表现通常优于固定权重,但在大规模工业系统中落地时面临若干实际障碍。GradNorm 需要在每个训练步中额外计算特定层的梯度范数,在大规模数据并行(Data Parallelism)训练中需要对不同 Worker 上的梯度做全局归约(All-Reduce),通信开销不可忽视。Uncertainty Weighting 在样本已经过手动 reweight 的场景下理论保证减弱,且当不同样本的噪声结构存在显著差异时,同方差假设容易失效。PCGrad 的 \(O(K^2)\) 计算复杂度在任务数超过 15 个的大型多目标系统中开销明显。

因此,在实际的大规模推荐系统中,最常见的选择仍然是固定权重加权,辅以精细的样本 mask 设计,并以梯度余弦相似度分析和 AUC 差异矩阵作为权重调整的依据。一个可操作的调权流程如下:

  1. 分析梯度相似度矩阵,识别出存在持续梯度冲突的任务对,为这些任务对考虑架构层面的参数隔离(如 PLE 的独享 Expert);
  2. 以覆盖率比值初始化权重,使各任务在训练初期的加权 Loss 处于同一量级;
  3. 构建 AUC 差异矩阵,在一个完整实验周期后评估各任务的互益情况,识别存在负迁移的任务对;
  4. 小步调整权重并验证,主要保证主目标 AUC 无退化,辅助目标整体无显著下降,新增目标在其专属评估集上有明确提升。

第六章:离线评估体系------如何判断新目标是否真正有效

多任务建模在工业界最常见的失败模式,不是方法选错了,而是评估体系跟不上。新目标加入之后,如果仍然用全量样本上的主目标 AUC 作为唯一的离线评估指标,很多有价值的多任务方案会被误判为无效,而真正有问题的方案则可能被漏过。

6.1 为什么全量主目标 AUC 不够用

假设现在要评估"加入延续消费目标(delay_click)之后,模型是否变好了"。最直觉的做法是:在相同的随机采样测试集上,对比加入 delay_click 前后主目标(点击 AUC)的变化。

这一做法存在一个根本性的问题:delay_click 目标所提供的监督信号是"用户对内容语义方向的持续兴趣",它改善的是模型对高质量长期兴趣样本的预测精度,而非全量样本的平均点击预测精度。在随机采样的全量测试集上,这类高质量长期兴趣样本只占少数,其 AUC 的提升会被大量普通样本所稀释,导致整体 AUC 变化极不显著甚至为零。

此时,如果我们就此下结论认为 delay_click 目标"没有效果",就犯了一个根本性的评估错误:我们在错误的样本分布上评估了一个目标对正确样本分布的影响。

6.2 目标专属评估集的构造方法

正确的做法是:为每一个新增目标构造其专属的评估集,在该目标真正能够施加影响的样本分布上进行评估。

delay_click 为例,其有效样本由 has_delay_click=1 的掩码决定,即满足"触发了延续消费行为观测条件(is_delay_ins=1)"的样本。专属评估集应从这一子集中采样构造,评估指标为 delay_click 目标在该子集上的 AUC,而非全量 AUC。

这样构造的专属评估集,具有两个重要性质。第一,它的样本分布与该目标的训练分布一致,AUC 的变化能真实反映模型对这类样本的判别能力提升;第二,它是对新增目标价值最直接的离线验证------如果模型在加入 delay_click 目标后,在这个专属集上的 delay_click AUC 反而下降,说明新目标的训练出现了严重问题,需要检查样本构造逻辑或 Loss 权重设置。

6.3 多任务 AUC 矩阵的完整构造

仅仅评估新目标自身的效果还不够,还需要系统地检查新目标的加入是否损害了原有目标。标准的评估框架是构建多任务 AUC 差异矩阵

设实验组为加入新目标的多任务模型,对照组为不含新目标的基线模型。对每一个已有目标 \(k\),分别在其对应的专属评估子集上计算两个模型的 AUC,得到增益:

\[\Delta \text{AUC}_k = \text{AUC}_k^{实验组} - \text{AUC}_k^{对照组} \]

一个健康的多任务模型上线,需要满足以下三个条件:

  1. 主目标 \(\Delta \text{AUC}_{main} \geq 0\)(红线,不可违反);
  2. 已有辅助目标 \(\Delta \text{AUC}_k\) 整体无显著退化(允许个别目标有微小波动,但不应出现多个目标同时明显下降);
  3. 新增目标 在其专属评估集上的 AUC 相对单任务基线有明确提升。

三个条件同时满足,方可判定新目标的加入有效。

6.4 一个常见误判场景及其正确解读

在实践中经常出现这样的情形:加入新目标后,主目标的全量 AUC 持平,但新目标在其专属评估集上的 AUC 有明显提升,且主目标在高质量长期兴趣用户的子集上(即 is_delay_ins=1 且步长较高的用户子集)AUC 也有提升,只是这部分提升被全量集上的其他样本稀释了。

这种情况不应被判定为"新目标无效",而应被解读为:新目标的监督信号改善了模型对高价值用户行为的判别能力,但这一改善在全量离线评估集上暂时不可见,需要等待线上实验中的长周期留存指标来最终验证。

离线 AUC 矩阵是判断新目标有效性的必要条件 ------如果专属评估集上的 AUC 都没有提升,线上也大概率不会有改善;但 AUC 矩阵不是充分条件------离线 AUC 的提升不能完全保证线上指标的正向变化,因为离线评估集本身是由历史推荐策略采样的,存在位置偏差和曝光偏差。

将离线 AUC 矩阵与线上的小流量实验(用长周期留存指标作为核心观测指标)配合使用,才能对新增目标的真实价值做出完整的判断。


总结

本文以问题驱动的逻辑,系统梳理了多任务建模在推荐系统中的核心挑战与应对方法。单任务建模因信号稀疏和价值对齐偏差而存在结构性局限;引入多任务后,任务关系设计、梯度冲突、Loss 融合三个问题依次浮现。MMoE 和 PLE 在架构层面缓解了任务间的梯度干扰,但无法从根本上解决 Loss 融合层面的优化失衡。GradNorm、Uncertainty Weighting 和 PCGrad 分别从梯度范数、贝叶斯不确定性和梯度方向三个角度提出了动态权重方案,各有其适用场景和局限。而无论采用哪种融合方法,配套完善的离线评估体系------以目标专属评估集和多任务 AUC 差异矩阵为核心------都是判断新目标价值、防止误判的必要保障。


本文AI辅助生成

参考文献

  • Ma, J., et al. "Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts." KDD 2018.
  • Tang, H., et al. "Progressive Layered Extraction (PLE): A Novel Multi-Task Learning (MTL) Model for Personalized Recommendations." RecSys 2020.
  • Ma, X., et al. "Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate at Alibaba." SIGIR 2018.
  • Chen, Z., et al. "GradNorm: Gradient Normalization for Adaptive Loss Balancing in Deep Multitask Networks." ICML 2018.
  • Kendall, A., Gal, Y., and Cipolla, R. "Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics." CVPR 2018.
  • Yu, T., et al. "Gradient Surgery for Multi-Task Learning." NeurIPS 2020.
  • Wang, Y., et al. "Multi-Task Deep Recommender Systems: A Survey." arXiv 2302.03525, 2023.
  • Zhang, M., et al. "Advances and Challenges of Multi-task Learning Method in Recommender System: A Survey." arXiv 2305.13843, 2023.
相关推荐
codeの诱惑4 小时前
推荐算法(二):核心概念——余弦定理 & 余弦相似度
算法·机器学习·推荐算法
散峰而望5 小时前
【数据结构】并查集从入门到精通:基础实现、路径压缩、扩展域、带权,一网打尽
数据结构·c++·算法·github·剪枝·推荐算法
codeの诱惑1 天前
推荐算法(一):数学基础回顾——勾股定理与欧氏距离
算法·机器学习·推荐算法
codeの诱惑1 天前
推荐算法(三):余弦定理和余弦相似度的关系及公式推导
人工智能·机器学习·推荐算法
源码之家2 天前
计算机毕业设计:基于Python的美食推荐可视化系统 Django框架 可视化 协同过滤推荐算法 推荐系统 食物 食品 大数据 数据分析(建议收藏)✅
python·django·flask·课程设计·推荐算法·美食
陈天伟教授3 天前
人工智能应用- AI 增强显微镜:08.实时辅助诊断
人工智能·神经网络·机器学习·推荐算法
散峰而望3 天前
【数据结构】单调栈与单调队列深度解析:从模板到实战,一网打尽
开发语言·数据结构·c++·后端·算法·github·推荐算法
zhishidi4 天前
推荐算法核心课:基于距离的相似度度量
算法·机器学习·推荐算法
LDG_AGI6 天前
【人工智能】OpenClaw(一):MacOS极简安装OpenClaw之Docker版
运维·人工智能·深度学习·机器学习·docker·容器·推荐算法