0%

多目标建模

在推荐、广告和内容分发系统里,我们往往不会只优化一个目标。

以信息流场景为例,平台可能同时关心:

  • 点击率(CTR)
  • 转化率(CVR)
  • 停留时长
  • 收藏、加购、分享等互动行为

这些目标都和“用户价值”有关,但又并不完全一致。只做单目标建模会有两个明显问题:

  • 每个目标单独训练一套模型,维护成本高,特征利用也不充分
  • 不同目标之间本来存在关联,如果完全拆开训练,会损失任务间可以共享的统计规律

因此,多任务学习(Multi-task Learning, MTL)在推荐系统里非常常见。它的基本思想是:

  • 用一个模型同时学习多个目标
  • 让任务之间共享一部分表示能力
  • 又保留各自的个性化建模能力

多目标建模里最经典的一条演化路线,大致可以概括为:

  • Shared-Bottom:先做最基础的参数共享
  • MMoE:引入专家网络和门控机制,让不同任务学会“按需共享”
  • PLE:进一步缓解任务冲突,把共享信息和任务专属信息分层解耦
MMoE

基础架构:Shared-Bottom

Shared-Bottom 是多任务学习里最朴素、也最好理解的结构。

它的做法非常直接:

  1. 底部使用一套共享的特征抽取网络
  2. 共享层输出一个公共表示
  3. 每个任务在顶部再接自己的 tower
  4. 各任务分别输出自己的预测结果

如果写成形式化表达,可以理解为:

$$
h = f_{shared}(x)
$$

第 $k$ 个任务的输出为:

$$
y_k = f_k(h)
$$

其中:

  • $x$ 是输入特征
  • $f_{shared}$ 是所有任务共用的底层网络
  • $f_k$ 是第 $k$ 个任务自己的输出头

它之所以叫 Shared-Bottom,就是因为“共享”主要发生在底部。

优势

Shared-Bottom 能成为最早期、最广泛使用的多任务结构,不是没有原因的。

  1. 共享层的存在显著降低了模型总参数量。相比每个目标都单独建模,底层只训练一套网络,训练和部署成本都更低。
  2. 共享参数天然带来正则化效应。多个任务共同约束底层表示,能够减少单一任务在数据不足时的过拟合风险。
  3. 当任务之间确实存在相关性时,共享层可以学习到通用模式,从而产生知识迁移,提高泛化能力。

例如在广告场景中:

  • CTR 任务会帮助模型学到“用户是否愿意点进来”
  • CVR 任务会帮助模型学到“点进来之后是否会成交”

虽然两者不完全一样,但用户、商品、上下文之间的一部分交互规律是可以共享的。

缺陷

Shared-Bottom 的问题也同样明显:它默认所有任务都应该共享同一套底层表示

这在任务高度相关时通常还可以工作,但一旦任务相关性较弱,甚至存在冲突,就会出现典型的负迁移(negative transfer):

  • 某个任务希望强化一类特征
  • 另一个任务却希望抑制这类特征
  • 共享层被多个目标同时拉扯,最后谁都学不舒服

例如:

  • CTR 更关注“是否吸引点击”
  • 时长任务更关注“内容是否耐看”

有些标题党内容可能很容易带来点击,却未必能带来长时停留。此时多个目标对共享表示的优化方向并不一致。

所以 Shared-Bottom 的核心问题可以总结为一句话:

  • 共享是静态且强制的,无法根据任务差异动态分配表示能力

这也是后续 MMoE 出现的直接动机。

MMoE

MMoE(Multi-gate Mixture-of-Experts)是 Google 在多任务学习场景里提出的一类经典结构。它试图解决的,不是“要不要共享”,而是:

  • 哪些知识该共享
  • 共享多少
  • 不同任务该从哪些专家那里获取信息

相比 Shared-Bottom 的“一刀切共享”,MMoE 把共享改成了可学习的软选择

OMoE

在正式理解 MMoE 之前,先看一个过渡结构:OMoE(One-gate Mixture-of-Experts)。

OMoE 的核心结构是:

  1. 底部不再只有一个共享网络,而是放置多个 expert
  2. 所有 expert 并行接收同一份输入
  3. 用一个共享 gate 生成权重
  4. 将多个 expert 的输出加权汇总后,再送给不同任务头

设有 $n$ 个 expert,第 $i$ 个 expert 输出为:

$$
e_i(x)
$$

共享 gate 生成权重:

$$
g(x) = \mathrm{softmax}(W_g x)
$$

则融合表示可写成:

$$
h = \sum_{i=1}^{n} g_i(x)e_i(x)
$$

然后再由不同任务塔做预测。

OMoE 比 Shared-Bottom 更灵活,因为:

  • 不再强迫所有任务只使用同一个底层表征
  • 模型可以把不同模式分散到不同 expert 中

但它仍然有一个很大的限制:

  • 所有任务共享同一个 gate

也就是说,虽然 expert 变多了,但“如何组合这些 expert”仍然是一套统一策略。这意味着不同任务最终看到的仍是同一种专家加权结果。

所以 OMoE 只解决了“共享网络容量不足”的问题,却没有真正解决“任务对共享知识需求不同”的问题。

MMoE 架构及原理

MMoE 相比 OMoE 的关键变化只有一句话:

  • 每个任务都有自己独立的 gate

整体结构变成:

  1. 底部有多个共享 expert
  2. 每个任务都拥有一个自己的 gating network
  3. 不同任务分别对同一组 expert 进行加权组合
  4. 每个任务再接自己的 tower 输出预测结果

设共有 $n$ 个 expert,第 $k$ 个任务的 gate 输出为:

$$
g^{(k)}(x) = \mathrm{softmax}(W^{(k)}_g x)
$$

则第 $k$ 个任务获得的输入表示为:

$$
h^{(k)} = \sum_{i=1}^{n} g^{(k)}_i(x)e_i(x)
$$

最后第 $k$ 个任务输出:

$$
y_k = f_k(h^{(k)})
$$

这个变化看似不大,但本质上完成了从“统一共享”到“按任务路由”的转变。

直观理解 MMoE,可以把 expert 看成一组不同能力的老师:

  • 有的 expert 更擅长建模点击模式
  • 有的 expert 更擅长建模转化倾向
  • 有的 expert 更擅长建模长时兴趣

而每个任务自己的 gate,决定它更愿意听哪些老师的意见。

MMoE 相比 Shared-Bottom 的改进

MMoE 的优势主要体现在三个方面。

  1. 共享不再是硬性的,而是软性的。不同任务可以根据自身需要,从多个 expert 中动态组合信息。
  2. expert 之间天然形成某种功能分化。即使没有显式标注,训练过程中也可能出现“某些 expert 更偏向某类任务模式”的现象。
  3. 当任务相关性复杂、部分共享但又不完全重叠时,MMoE 往往比 Shared-Bottom 更稳健。

从经验上看,任务越多、任务差异越大,MMoE 相比 Shared-Bottom 的优势通常越明显。

MMoE 的局限

虽然 MMoE 比 Shared-Bottom 强很多,但它并没有彻底消灭负迁移。

主要原因有两个。

第一,expert 本身仍然是所有任务共享的。

也就是说,即便 gate 不同,底层 expert 参数还是被多个任务共同训练。如果任务冲突很强,expert 仍然可能学成“折中结果”。

第二,门控决策负担很重。

gate 需要同时完成两件事:

  • 判断当前样本更适合走哪些 expert
  • 间接协调不同任务之间的冲突

如果 expert 没有形成足够清晰的职责分工,gate 的选择空间就会变得混乱。最终模型可能出现:

  • 多个任务都偏向同一批 expert
  • 某些 expert 长期得不到充分训练
  • 任务冲突被转移到 gate 和 shared expert 上,但没有真正被拆开

换句话说,MMoE 让“共享”变聪明了,但共享和专属之间的边界仍然不够清楚。

这正是 PLE 想进一步解决的问题。

PLE

PLE(Progressive Layered Extraction)可以看作是对 MMoE 的进一步结构化改造。它的核心判断是:

  • MMoE 之所以仍会出现负迁移,不仅是因为共享方式不够灵活
  • 更因为“共享知识”和“任务私有知识”没有被显式拆开

因此,PLE 希望把信息流分成两类:

  • 共享信息
  • 任务专属信息

并通过逐层提取(progressive layered extraction)的方式,让二者既能交互,又不过度混杂。

MMoE 负迁移未根除,门控决策负担重,PLE 正是在这个背景下提出的。

CGC结构

PLE 的基础模块叫 CGC(Customized Gate Control)。

一个 CGC 层通常包含两类 expert:

  • shared experts:为所有任务提供公共知识
  • task-specific experts:只服务于某一个任务

然后,每个任务自己的 gate 不再对“全体 expert”做无差别选择,而是从:

  • 本任务的 task-specific experts
  • shared experts

这两部分中进行加权组合。

与此同时,共享分支自己也会有一个 gate,用来聚合:

  • 所有任务的专属 expert
  • shared experts

从而形成下一层共享表示。

这套机制的关键价值,在于它把“所有 expert 都放在一个池子里竞争”改成了“共享池 + 专属池”的显式分层。

1. 专家职责强制分离

这是 PLE 相比 MMoE 最重要的一点。

在 MMoE 中,所有 expert 理论上都服务于所有任务,最终是否形成分工,主要依赖训练过程的自发演化。

而在 PLE 中,模型结构直接规定:

  • 有些 expert 就是公共专家
  • 有些 expert 就是任务私有专家

这样做的好处是:

  • 公共模式可以沉淀在 shared experts 中
  • 任务特有模式可以沉淀在 task-specific experts 中
  • 不必把“共享多少、私有多少”都压给 gate 自己去学

也就是说,PLE 用结构先验主动帮助模型做职责划分。

2. 任务专属门控的输入限制

另一个关键点是,任务 gate 的可选范围被限制了。

对于第 $k$ 个任务,它不会像 MMoE 一样面对所有 expert,而只会从下面两类中选择:

  • 第 $k$ 个任务自己的专属 experts
  • shared experts

这意味着:

  • 任务不会直接去读取别的任务的私有 expert
  • 跨任务共享必须通过 shared experts 这一“公共通道”完成

这种限制非常重要,因为它减少了无序的信息串扰。

可以把它理解为:

  • MMoE 像一个开放式大群,所有任务都能直接找所有 expert
  • PLE 更像有公共会议室,也有每个任务自己的办公室

共享问题去公共会议室讨论,私有问题留在各自办公室解决。

PLE架构及原理

PLE 往往不是只堆一层 CGC,而是堆叠多层,形成 progressive layered extraction。

它的基本流程可以理解为:

  1. 输入特征进入第一层 CGC
  2. 每个任务分支和共享分支分别得到自己的表示
  3. 这些表示继续送入下一层 CGC
  4. 随着层数加深,共享信息与任务专属信息被逐步提炼
  5. 最后每个任务分支接自己的 tower 输出结果

如果从建模逻辑上理解,PLE 做的是一种“逐层去混叠”:

  • 底层允许较多共享,因为原始特征里确实有大量共性
  • 越往上走,任务差异越明显,专属分支承担更多个性化建模

这比只在单层上做一次专家选择更细致,也更符合多任务学习中“底层偏通用、高层偏任务化”的经验规律。

PLE 的优势

PLE 在工业界受欢迎,主要是因为它比 MMoE 更稳定。

  1. 显式区分共享专家和任务专家,能更有效缓解负迁移。
  2. gate 的选择空间被约束后,决策难度下降,训练更容易稳定。
  3. 多层 CGC 让共享信息和私有信息可以逐步分化,而不是一次性硬切。
  4. 在任务相关但不完全一致的场景中,通常比 Shared-Bottom 和 MMoE 更鲁棒。

特别是在推荐和广告系统中,像:

  • CTR
  • CVR
  • 完播率
  • 停留时长
  • 互动率

这些目标往往既有共性,又各自强调不同的行为结果,PLE 通常会比简单共享结构更合适。

PLE 的代价

当然,PLE 也不是没有成本。

  • 结构更复杂,参数量和训练成本通常高于 Shared-Bottom。
  • 超参数更多,例如 shared experts 数量、task-specific experts 数量、CGC 层数等,调参复杂度更高。
  • 当任务非常少、而且相关性很强时,PLE 的收益未必足以覆盖其复杂度。

因此是否使用 PLE,本质上还是一个工程权衡:

  • 任务越多
  • 目标差异越大
  • 负迁移越明显

PLE 的价值通常越大。

总结

如果把这几种结构放在同一条演进线上,可以这样理解:

1. Shared-Bottom

  • 假设所有任务共享同一套底层表示
  • 优点是简单、高效、易落地
  • 缺点是容易受到负迁移影响

2. MMoE

  • 通过多个 expert 和任务独立 gate,实现按任务动态共享
  • 比 Shared-Bottom 更灵活
  • 但 expert 仍是全共享的,任务冲突没有被彻底拆解

3. PLE

  • 在 MMoE 基础上进一步显式区分共享专家和任务专家
  • 通过分层提取逐步解耦共享信息与私有信息
  • 通常在复杂多目标场景下表现更稳

所以从本质上说,这三者是在回答同一个问题:

  • 多个任务到底应该如何共享表示能力

它们给出的答案分别是:

  • Shared-Bottom:大家先共用一套底层再说
  • MMoE:共享可以,但要让不同任务自己决定怎么用
  • PLE:共享和私有都要有,而且要在结构上明确分开

在真实业务里,没有哪个结构对所有问题都最优。更合理的做法通常是根据场景判断:

  • 如果任务少且高度相关,Shared-Bottom 可能已经足够
  • 如果任务关系复杂,MMoE 往往是一个很好的起点
  • 如果负迁移明显、目标差异较大,PLE 通常更值得尝试

理解这条演化链条,比死记某个结构图更重要。因为多目标建模的核心从来不是“哪篇论文最火”,而是:

  • 如何在共享收益和任务冲突之间找到合适的平衡