推荐系统中如何做多目标优化

star2017 1年前 ⋅ 3379 阅读

发布于 2019-12-11
原文: 推荐系统中如何做多目标优化

在做推荐系统的过程中,我们希望同时优化多个业务目标。比如电商场景中,希望能够在优化 GMV 的基础上提高点击率,从而提高用户的粘性;在信息流场景中,希望提高用户点击率的基础上提高用户关注,点赞,评论等行为,营造更好的社区氛围从而提高留存。因此推荐系统做到后期,往往会向多目标方向演化,承担起更多的业务目标。下面就介绍几种多目标相关的算法。其中有些是笔者实践过取得了线上的收益,有些是最新的论文中提出的新的解决方案,文章没有公式,易于理解,拿出来和大家一起讨论。

A. 通过 sample weight 进行多目标优化

该方法是多目标的 0.1 版本,是 rank 主模型上的微调,以实现多目标。这里以信息流场景为例,我们的主目标是 feed 的点击率,用户在 feed 上的任何点击行为都被认为是正反馈。与此同时,在 feed 中的点赞功能是我们希望 boost 的功能。此时点击和点赞都是正样本(点赞本身也是一种点击行为),但是点赞的样本可以设置更高的 sample weight。模型训练在计算梯度更新参数时,梯度要乘以权重,对 sample weight 大的样本给予更大的权重。直观理解,对于 sample weight 大的样本,如果预测错误就会带来更大的损失。通过这种方法能够在优化某个目标(点击率)的基础上,优化其他目标(点赞率)。实际 AB 测试会发现,这样的方法,目标 A 会受到一定的损失换取目标 B 的增长。通过线上 AB 测试和 sample weight 调整的联动,可以保证在可接受的 A 目标损失下,优化目标 B,实现初级的多目标优化。

  • 优点:
    • 模型简单,仅在训练时通过梯度上乘 sample weight 实现对某些目标的 boost 或者 decay
    • 带有 sample weight 的模型和线上的 base 模型完全相同,不需要架构的额外支持,可以作为多目标的第一个模型尝试。
  • 缺点:
  • 本质上并不是对多目标的建模,而是将不同的目标折算成同一个目标。相关的折算可能需要多次 AB 测试才能确定。此处有点难理解,设置 sample weight,本质上是用 base 样本去度量其他样本。比如认为一个点赞算两次点击。比如在视频中停留了 5min 是等价于 2 次对视频的点击行为等。
  • 从原理上讲无法达到最优,多目标问题本质上是一个帕累托寻找有效解的过程。有很多文章给出多目标的数学建模,如[1]。我们后续从这些文章中给出更详细的证明。

B. 多个模型 stacking

这个思路是也是很直接的。我们有多个优化的目标,每个优化的目标都有一个独立的模型来优化。可以根据优化目标的不同,采用更匹配的模型。如视频信息流场景中,我们用分类模型优化点击率,用回归模型优化停留时长。不同的模型得到预测的 score 之后,通过一个函数将多个目标融合在一起。
preview

最常见的是 weighted sum 融合多个目标,给不同的目标分配不同的权重。当然,融合的函数可以有很多,比如连乘或者指数相关的函数,这里和业务场景和目标的含义强相关,可以根据自己的实际场景探索。

  • 优点:
    • 模型简单
  • 缺点:
  • 线上 serving 部分需要有额外的时间开销,通常我们采用并行的方式请求两个模型进行融合。
  • 多个模型之间相互独立,不能互相利用各自训练的部分作为先验,容易过拟合。

C. Shared bottom NN model 多个模型 stacking 会带来更多的训练参数,导致模型的规模变大。这种情况在 NN 模型中更为常见,从而带来过拟合的风险。因此在基于深度学习的推荐模型中,引入了 shared bottom layer 来加强参数共享。多个目标的模型可以联合训练,减小模型的参数规模,防止模型过拟合。具体模型结果如下:



preview
但是问题也显而易见,由于不同的任务最终预测的目标不同。而共享参数一定程度上限制了不同目标的特异性,最终训练的效果就会打折扣。因此 Shared bottom NN model 能够成功的前提,是预测的目标之间的相关性比较高。这样参数共享层不会带来太大的损失。在[2]中有相关的实验证明,当任务的相关性越高,模型的 loss 会下降,模型的准确度才会更高。所以,在文献[3]的中,也提出了一些任务之间相关性衡量的方法,以及如何在众多任务中选择合适的任务子集做多目标学习。

在参数共享中,还有一类方法是 soft parameter sharing 的方法。
preview
在这个 NN 的场景中,通过给模型参数之间距离加正则化,鼓励参数趋于一致,从而减小过拟合的风险,同时也为训练样本少的模型提供一些先验信息。但是在实际的推荐系统多目标优化中,没有看到类似的模型结构,可能是因为线上 serving 的时候计算量显著高于 shared bottom NN model,且效果也不一定好。

**D. MMoE **MMoE 是 Google 的研究人员提出的一种 NN 模型中多目标优化的模型结构[2]。在 Recsys 2019 中,我们也发现,Google 已经将 MMoE 用在 YouTube 中进行视频相关推荐[4]。MMoE 为每一个模型目标设置一个 gate,所有的目标共享多个 expert,每个 expert 通常是数层规模比较小的全连接层。gate 用来选择每个 expert 的信号占比。每个 expert 都有其擅长的预测方向,最后共同作用于上面的多个目标。
preview
此处我们可以将每一个 gate 认为是 weighted sum pooling 操作。如果我们选择将 gate 换成 max 操作。x 为输入,g(x)中分量最大值对应的 expert 被唯一选中,向上传递信号。如果 g(x)与 input 无关,则模型退化成多个独立的 NN 模型 stacking,这样就便于我们更方便理解模型的进化关系。Recsys 2019 Google 的文章,是在 shared bottom layer 上面增加 MMoE 层。这样做是为了减少模型的复杂度,降低训练的参数数量。只不过此处的 shared bottom layer 层数很少,推荐系统中特征的输入非常稀疏,input 对应的参数维度很大,因此先作用于浅层的 shared bottom layer,有利于减小上层 MMoE 的模型复杂度,也减少线上 serving 的开销。
preview

先介绍这些多目标相关的优化算法,这些算法中 A,C 是经过业务验证可行的算法,大家可以优先尝试。欢迎大家留言讨论。

参考

[1] Lin X, Chen H, Pei C, et al. A pareto-efficient algorithm for multiple objective optimization in e-commerce recommendation[C]//Proceedings of the 13th ACM Conference on Recommender Systems. ACM, 2019: 20-28.

[2] Ma J, Zhao Z, Yi X, et al. Modeling task relationships in multi-task learning with multi-gate mixture-of-experts[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. ACM, 2018: 1930-1939.

[3] Ruder S. An overview of multi-task learning in deep neural networks[J]. arXiv preprint arXiv:1706.05098, 2017.

[4] Zhao Z, Hong L, Wei L, et al. Recommending what video to watch next: A multitask ranking system[C]//Proceedings of the 13th ACM Conference on Recommender Systems. ACM, 2019: 43-51.


本文地址:https://www.6aiq.com/article/1604194668368
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: