MTL多目标优化在推荐领域的应用
-
多目标学习提出的背景
一般来说在搜索和推荐等信息检索场景下,最基础的一个目标就是用户的 CTR。但其实用户在产品上的行为是多种多样的(点赞、收藏、分享、留言)。虽然可以对用户的 CTR 进行单个目标的优化,但是这样的做法也会带来负面影响:靠用户点击这个行为推荐出来的内容并不一定是用户非常满意的内容,比如一些热门内容,像一些引发讨论的热点事件、社会新闻,或者是一些轻松娱乐的内容,用户也会点击。这样造成的后果就是:CTR 的指标非常高,但是实际的推荐结果并不是他们最满意的。
当单目标 CTR 优化到了一个比较高的点之后,用户的阅读量虽然上去了,但是其他的各种行为(收藏、点赞、分享等等)是下降的,也就是说用户接收到太多不实用的东西。于是,推荐系统研究者开始思考:能不能预估用户在其他行为上的概率? 多种目标综合起来,包括阅读、点赞、收藏、分享等等一系列的行为,归纳到一个模型里面进行学习,这就是推荐系统的多目标学习。
做推荐算法肯定绕不开多目标。点击率模型、时长模型和完播率模型是大部分信息流产品推荐算法团队都会尝试去做的模型。单独优化点击率模型容易推出来标题党,单独优化时长模型可能推出来的都是长视频或长文章,单独优化完播率模型可能短视频短图文就容易被推出来,所以多目标就应运而生。
多目标排序问题的解决方案,大概有以下四种:通过改变样本权重、多模型分数融合、多任务学习(Multi-Task Learning,MTL)。
-
通过样本权重进行多目标优化
如果主目标是点击率,分享功能是我们希望提高的功能。那么点击和分享都是正样本(分享是点击行为的延续),分享的样本可以设置更高的样本权重。在模型训练计算梯度更新参数时,梯度要乘以权重,对样本权重大的样本给予更大的权重。
因此,样本权重大的样本,如果预测错误就会带来更大的损失。通过这种方法能够在优化某个目标(点击率)的基础上,优化其他目标(分享率)。实际AB测试会发现,这样的方法,目标A会受到一定的损失换取目标B的增长。通过线上AB测试和样本权重调整的联动,可以保证在可接受的A目标损失下,优化目标B,实现初级的多目标优化。
优点:
-
模型简单,仅在训练时通过梯度上乘样本权重实现对某些目标的放大或者减弱。
-
带有权重样本的模型和线上的base模型完全相同,不需要架构的额外支持,可以作为多目标的第一个模型尝试。
缺点:
-
本质上并不是对多目标的建模,而是将不同的目标折算成同一个目标。样本的折算权重需要根据AB测试才能确定。比如认为一次分享算两次点击,在视频中停留了2分钟等价于3次对视频的点击行为等,这里面的数字需要根据线上评估指标测试出来。
-
从原理上讲无法达到最优,多目标问题本质上是一个帕累托寻找有效解的过程。
-
多模型分数融合
假如我们有多个优化的目标,每个优化的目标都有一个独立的模型来优化。可以根据优化目标的不同,采用更匹配的模型。如视频信息流场景中,我们用分类模型优化点击率,用回归模型优化停留时长。不同的模型得到预测的score之后,通过一个函数将多个目标融合在一起。最常见的是weighted sum融合多个目标,给不同的目标分配不同的权重。当然,融合的函数可以有很多,比如连乘或者指数相关的函数,这里和业务场景和目标的含义强相关,可以根据自己的实际场景探索。

优点:模型简单;
缺点:
-
线上serving部分需要额外的时间开销,通常我们采用并行的方式请求多个模型进行融合。
-
多个模型之间相互独立,不能互相利用各自训练的部分作为先验,容易过拟合。
-
多任务学习
-
共享底层参数的多塔结构
也称Hard parameter sharing的方法,将排序模型底层的全连接层进行共享,学习共同的模式,上层用一些特定的全连接层学习任务特定的模式。

这种方法最大的优势是Task越多,单任务不容易过拟合,劣势是底层强制shared layers难以学得适用于所有任务的表达。谷歌在MMoE论文中的实验显示,任务相关性越高,模型的loss可以降到更低。当两个任务相关性没有那么好时(例如,推荐系统排序中的点击率和互动率、点击率和停留时长等),Hard parameter sharing 的模式就不是那么适用了,会损害到一些效果。

如上图,根据业务目标,我们把点击率、时长和完播率拆分出来,形成三个独立的训练目标。虽然解决了一部分问题,但是把多个模型融合在一起,通过一个模型去学习一个目标的方式仍然存在问题。首先,目标之间的相关性决定了这个模型学习的上限能有多少。比如:如果一个模型中点赞和点击是完全耦合的,那么这个模型在学习点赞的过程中,也就学习了点击。但是对用户来讲,它的意义是不一样的,这并不是一个完全耦合的系统。在这个学习任务下,如果去共享底层网络参数的话,可能会造成底层的每个目标都能学习一点,但是每个目标学习的都不够充分,这是多目标学习系统实现的一个难点。
后来,阿里妈妈的Xiao Ma等人发现,在推荐系统中不同任务之间通常存在一种序列依赖关系。例如,电商推荐中的多目标预估经常是CTR和CVR,其中转化这个行为只有在点击发生后才会发生。这种序列依赖关系其实可以被利用,来解决一些任务预估中存在的样本选择偏差(Sample Selection Bias,SSB)和数据稀疏性(Data Sparisity,DS)问题。因此提出Entire Space Multi-Task Model(ESMM)。
SSB问题:后一阶段的模型基于上一阶段采样后的样本子集进行训练,但是最终在全样本空间进行推理,带来严重的泛化性问题。
DS问题:后一阶段的模型训练样本通常远小于前一阶段任务。
-
ESMM-任务序列依赖关系建模

ESMM模型首次把样本空间分成了三大部分,从曝光到点击再到转化的三步行为链,并引入了浏览转化率(pCTCVR)的概念。在CVR任务中,默认只在点击的空间上来做,认为曝光、点击并转化了就是正样本,曝光、点击并未转化为负样本。如果这样想的话,样本全空间只有点击的样本,而没有考虑到未点击的样本。ESMM论文就提出曝光点击、曝光不点击以及点击之后是否转化所有的这些样本都考虑进来。

ESMM模型是一个双塔、双任务的模式在全样本空间上进行训练。这样训练的好处:一是,样本选择的问题,CVR是在点击的基础上进行训练,训练集只有点击的,实际数据可能有曝光点击和曝光未点击的数据,我们往往把曝光未点击的数据给忽略了,这样就造成了样本选择偏差,训练集和实际数据分布不一致的情况。二是,解决数据稀疏的问题。因为我们现在在全样本空间上进行训练,不是只在点击的样本上进行训练,所以样本就多了很多,所有样本可以进行辅助更新CVR网络中的Embedding,这样Embedding向量就会训练的更加充分。
-
soft parameter sharing
ESMM 是典型的 share-bottom 结构,即底层特征共享方式,适用于任务之间都比较相似或者相关性比较大的场景,而对于任务间差异比较大的场景,这种MTL共享结构就有点捉襟见肘了。
这个方法比较具有代表性的是谷歌提出的MoE和其改进版本MMoE。MoE模型将“共享参数”划分为N个Expert子网络,而Gate网络负责输出N个Expert子网络的权重,最终结果是Expert子网络与Gate的加权和。思想上其实类似于后来的Attenton。MMoE则是在MoE的基础上,对每一个任务有独自的Gate网络负责输出权重,使不同的任务能更多样化地使用Expert网络。

-
MoE要解决的问题
MTL的本质就是共享表示以及相关任务的相互影响。通常,相似的子任务也拥有比较接近的底层特征,可以很好地进行底层特征共享;而对于不相似的子任务,他们的底层表示差异很大,在进行参数共享时很有可能会互相冲突或噪声太多,导致效果不佳。
实际的应用场景中,像 CTR、CVR 这样的强相关的子任务只是少数,还会遇到子任务间关系没那么紧密的多任务学习场景,而且很多情况下,你很难判断任务在数据层面是否是相似的。所以多任务学习如何在相关性不高的任务上获得好效果是一件很有挑战性也很有实际意义的事。
其实在 MoE之前,已经有一些其他结构来解决这个问题了,比如两个任务的参数不共用,通过增加 L2 范数的限制,或者设计任务特定隐藏层嵌入的独特组合。这些结构和 Shared-Bottom 结构相比,其构成的模型会针对每个任务添加更多参数以适应任务间差异,虽然能够带来一定的效果提升,但是增加了更多的参数也就意味着需要更大的数据样本来训练模型,而且这些方法会使模型变得更复杂,也不利于在真实生产环境中部署使用。
-
MoE模型
MoE 由许多 “专家” 组成,每个 “专家” 都有一个简单的前馈神经网络和一个可训练的门控网络(gating network),该门控网络选择 “专家” 的一个稀疏组合来处理每个输入,它可以实现自动分配参数以捕获多个任务可共享的信息或是特定于某个任务的信息,而无需为每个任务添加很多新参数,而且网络的所有部分都可以通过反向传播一起训练。MoE 结构图如下所示:

MoE 可以作为一个基本的组成单元,也可以是多个 MoE 结构堆叠在一个大网络中。比如一个 MoE 层可以接受上一层 MoE 层的输出作为输入,其输出作为下一层的输入使用。在谷歌大脑的论文中,MoE 就是作为循环神经网络中的一个循环单元。
MoE 神经网络结构有两个非常明显的好处:
(1)实现一种多专家集成的效果。
MoE 的思想是训练多个神经网络(也就是多个专家),每个神经网络(专家)通过门控网络(Gating NetWork)被指定应用于数据集的不同部分,最后再通过门控网络将多个专家的结果进行组合。单个模型往往善于处理一部分数据,不擅长处理另外一部分数据(在这部分数据上犯错多),而多专家系统则很好的解决了这个问题:系统中的每一个神经网络,也就是每一个专家都会有一个擅长的数据区域,在这组区域上该专家就是 “权威”,要比其他专家表现得好。因此多专家系统是单一全局模型或者多个局部模型的一个很好的折中,这样的网络结构能够处理更加复杂的数据分布,在相应的任务中,性能也会有很大的提升。
(2)只需增加很小的计算力,便能高效地提升模型的性能。
神经网络吸收信息的能力受其参数数量的限制。有人在理论上提出了条件计算(conditional computation)的概念,作为大幅提升模型容量而不会大幅增加计算力需求的一种方法。MoE 就是条件计算的一种实现,并在论文中证实,这种网络结构可实现在计算效率方面只有微小损失情况下,可以显着提高性能。
-
MMoE模型(Multi-gate Mixture-of-Experts)
有了以上信息,我们就很容易理解为什么要将 MoE (one-gate Mixture-of-Experts)引入多任务学习中了,因为多专家集成的机制刚好可以用来解决多任务间的差异问题,并且还不会带来很大计算损耗。
- Shared-Bottom Multi-task是MTL中最经典的 Shared-Bottom DNN 网络结构,如下图a所示:

- One-gate MoE model用一组由专家网络(expert network,$$f_i(x)$$)组成的神经网络结构来替换掉 Shared-Bottom 部分,这里的每个 “专家” 都是一个前馈神经网络,再加上一个门控网络,就构成了 MoE 结构的 MTL 模型。因为只有一个门网络$$g(x)$$,为了与 MMoE 对应,也称这种结构为 OMoE(One-gate Mixture-of-Experts),多任务共享门控:

浙公网安备 33010602011771号