专栏首页机器学习与推荐算法深度总结 | 多任务学习方法在推荐中的演变

深度总结 | 多任务学习方法在推荐中的演变

前言

最近归辰在多任务学习(Multi Task Learning, MTL)方面做了一些实质性的工作,就顺手整理了一下,希望大家感兴趣的可以看看,关于细节方面欢迎交流。

以我们自己的大脑为例,通常大脑在工作的时候会学习多种不同的任务,无论你是在看论文时边听音乐,还是在看视频时边吃零食,以及走路时接电话等。这些过程其实我们人脑都能很容易地完成。那么如果对应到机器学习模型中的话,该如何去完成这种多任务式的工作呢?答案是采用同一个网络来同时完成这个多任务工作,那么完成这种工作的过程就可以称为“多任务学习”。

那么机器学习在实际应用中为什么会出现“多任务”的需求呢?因为机器学习的关注点一般在单个特定度量优化的任务上,然而实际情况中比如推荐系统,往往都是一对多,即一个场景对应多个业务目标,如果只倾向于关注其中一个目标而忽略了其它目标则会出现排序结果一直不理想。但多任务学习通过共享目标之间的表征,就可以使我们的模型更好地概括原始每一个目标,即只优化一个损失函数即可借助辅助目标来改善原目标任务模型的目的,需要明确的是这里的损失函数为多个子任务损失函数融合后的。由于可以带来可观收益。因此将多任务学习应用于推荐系统中已成为热门研究方向。

多任务学习网络设计

先简单介绍下如何衡量任务之间相关性,一般可以通过计算目标分布之间的皮尔逊相关系数来量化任务之间相关性,即皮尔逊系数越大,任务相关性越高。前面说到的多任务用同一个网络来进行学习,理论上也是可以用多个不同的网络其实就是拆分为多个单任务学习网络,但是在实际情况中会面临比较大的线上开销和样本稀疏性问题,而这两个问题在业界均有个共识,那就是不能同时很好地解决。除了这两个问题之外,单任务学习还有个很重要的问题,容易陷入局部最优,而多任务学习由于不同任务的局部最优解处于不同位置,通过相互作用可以逃离局部最优。多任务学习可以简称为MTL,其网络设计一般可以分为两种情况:Hard-parameter sharing和Soft-parameter sharing[1],关于它们的详细解读如下。

Hard-parameter sharing

最先开始在业界通用的是Hard-parameter sharing,结构简单,是在很多场景下非常重要的baseline之一。它直接将网络底层的全连接层进行共享,学习一些各任务之间比较通用的信息,这一步相当于encode任务信息,再在上层分割成不同的全连接层学习各任务属于自己的特定信息,这就相当于根据特定任务进行decode。该方法在相关性较高的多任务之间效果会比较好,且任务越多,单任务越不可能过拟合,即泛化能力越强;缺点是当任务之间不相关时底层共享层难以学到各个任务之间比较通用的特征和模式。在业界具体的代表为美团“猜你喜欢”的深度多目标排序模型[2]和知乎推荐页Ranking的实践[3]以及美图在推荐排序的实践[4]。

美团应用实践一

以美团的猜你喜欢应用场景为例,其深度多目标排序模型的演进之路主要是:Multi- task DNN—>引入NFM的Multi-task DNN。先介绍Multi-task DNN,其模型主体结构如下,线上预测时,将Click-output和Pay-output做一个线性融合。在此结构的基础上,结合数据分布特点和业务目标进行了进一步的优化:针对特征缺失普遍存在的情况提出Missing Value Layer,以用更合理的方式拟合线上数据分布;考虑将不同任务的物理意义关联起来,提出KL-divergence Bound,以减轻某单一目标的Noise影响,这可以一定程度上减小前面说到的硬参数共享缺陷的影响。

美团Multi-task DNN

通常在训练样本中难以避免地有部分连续特征存在缺失值,更好地处理缺失值会对训练的收敛和最终效果都有一定帮助。设计了Miss Value Layer来自适应地学习缺失值的权重,其结构如下:

同时考虑到,不同任务下的Label会有不同的Noise,如果能通过物理意义将有关系的Label关联起来,一定程度上可以提高模型学习的鲁棒性,更容易学习到不同任务之间通用的模式。比如电商场景中同时学习pCTR、pCVR和pCTCVR,三者满足前两者相乘得到pCTCVR的关系。因此可利用这样的关系在网络中引入KL散度的Bound,使得预测的前两者相乘的结果更接近于pCTCVR。但由于KL散度是非对称的,所以实际中优化的是KL(p||q)+KL(q||p)。

为了引入Low-order特征组合,在Multi-task DNN的基础上进行了加入NFM的尝试。各个域的离散特征首先通过Embedding层学习得到相应的向量表达,作为NFM的输入,NFM通过Bi-Interaction Pooling的方式对输入向量对应的每一维进行2-order的特征组合,最终输出一个跟输入维度相同的向量。把NFM输出的向量与DNN的隐层拼接在一起,作为样本的表达,进行后续的学习。在这里NFM的主要作用是加快训练的收敛速度,从而更有利于Embedding层的学习。

美团引入NFM的Multi-task DNN

后期的主要努力方向为尝试加入更多的特征域,以提供足够的信息帮助NFM学出有用的表达,深挖NFM的潜力。比如借鉴DIN思想中的注意力机制,通过引入用户行为序列来自适应地学习用户历史兴趣向量。

知乎应用实践二

知乎推荐页深度排序模型演进之路主要是:Multi-task DNN—>引入Last View(DIN) 和Last Display(GRU)的Multi-task DNN。先介绍下Multi-task DNN,和传统的Hard-parameter sharing几乎一致,每个task共享前面的几层权重,Loss可以是几个task的loss做简单的线性加权,上线要确定各个预估目标的加权值,经验比较重要,上线后显示点击率基本不变,而其余指标均大幅提升,证明多任务学习框架能有效地提升业务指标,增大收益。

知乎Multi-task DNN

由于用户过去点击的内容必定会对将来点击的内容产生动态影响,因此可以基于Topic对过去用户看过的内容进行划分,再根据DIN的思想来得到用户兴趣的向量化表达。此外过去展示的内容中没有点击的内容对当下的点击行为同样会产生影响,因此需要加入没点击的所有数据,再进入GRU模块,可以得到存在没有点击内容的情况下的影响向量。将各个域的向量经过FM模块得到二阶交叉特征,再与各个域的低阶特征拼接,来输入Multi-task DNN学习。

知乎引入Last View(DIN)和Last Display(GRU)的Multi-task DNN

美图应用实践三

美图的推荐排序深度多目标模型演进之路主要是前期以Multi-task NFwFM为代表,后期辅以各种策略优化方法。其前4个隐含层是共享的,在最后即将预估多个目标时通过全连接层进行拆分,各自学习对应任务的参数,从而专注地拟合各自任务。其中FwFM模块为Field-weighted Factorization Machines[5],是FFM的改进版,参数量小得多但性能却和FFM差不多,特别适合在工程上应用。在线上预估时,因为模型尺寸没有变化,推理效率和线上的点击率预估模型一致。由于美图的场景中是在点击率任务的基础上同时优化关注转化率,融合公式上体现为优先按照点击率排序再按照曝光—>关注的转化率排序。

 美图深度多目标排序模型

为了最大化模型的价值,reweight成为了美图的选择,在美图来看,使用该方法的好处是样本reweight天然的支持随机shuffle特性,还有能产生更多更高质量的数据,而这样对训练来说几乎总是能带来提升。另一种方法是通过梯度平衡方法来减小share conflict,美图采取的方法是通过增大上层特定任务网络的学习率来加大整体网络中点击率预估任务的重要性,以此来主导底层共享层的学习,进而影响整体模型的预估性能。

Soft-paramater sharing

然后是第二种情况的网络设计方法——Soft-parameter sharing。该方法其实是硬参数共享的另一极端,可适用于任务之间相关性没有那么好的情况,比如排序中的点击率和停留时长,点击率和互动率等。而这个方法比较具有代表性的是谷歌提出的MoE[6]和其改进版本MMoE[7]。

Soft-parameter sharing
MoE
MMoE

两者的共同点都是把原先Hard-parameter sharing中底层全连接层网络划分成了多个子网络Expert,这样的做法更多是模仿了集成学习中的思想,即同等规模下单个网络无法有效学习到所有任务之间通用的表达但通过划分得到多个子网络后每个子网络总能学到某个任务中一些相关独特的表达,再通过Gate的输出(Softmax)加权各个Expert输出,送入各自多层全连接就能将特定任务学习地较好。

MoE只有一个Gate输出,而MMoE是有多个输出。所以不同点在于MMoE针对不同任务均设置了一个对应的Gate,这样的好处是在不添加大量的新参数的情况下学习任务特定的函数去平衡共享的表达来对任务之间的关系进行更明确地建模。MMoE具体公式如下:

y_k = h^k(f^k(x))
f^k (x) = \sum_{i=1}^n g^k(x)_i f_i(x)
g^k(x)= softmax(W_{gk}x)

在将MMoE应用在Youtube的论文[8]中可以得到不同的Expert在不同任务中的重要性不同(可通过看各个Gate的输出来判断每个任务对应哪些Expert比较重要),因此如果想要某个Expert与某个任务之间的相关性越高,可以在输入Gate之前加入一些预设好的任务和Expert权值关系,或者直接自定义Softmax函数,让占比大的Expert输出更大。该论文中提出了wide&deep的框架并有效结合了MMoE的优势,wide部分引入一个浅层网络来缓和选择偏见问题,这被证明是一个很有效的解决方案。应用实践方面,知乎在2019年利用MMoE替换了Hard-parameter sharing并取得了用户互动率提升100%的巨大成绩[9],而互动率直接影响的就是用户体验。知乎后期的努力方向也主要是使用各种策略优化方法来最大化模型的价值,也就是更好地改善用户的体验。一个好的多任务学习方法应该存在一种最合理的方式去对目标进行权衡和融合,才能得到用户和平台收益的最大化。这就是知乎正在尝试的方法:即对用户进行分群,利用用户对不同内容的不同层次的满意度来动态地调整每个目标的权重,最终融合输出,给出一个最终的排序。

其他网络设计

MTL+NAS

由于前面两种网络结构均存在较多的共享区域,显得不够灵活和性能消耗过大,因此近年来借助NAS技术可保留经典底层共享网络结构性能优势的同时实现更灵活的参数共享为MTL网络设计提供了新思路。谷歌提出的SNR[10]与MMoE类似,也将共享的底层网络模块化为子网络,不同的是前者使用编码变量来控制子网络之间的连接,通过NAS技术可以学习子网络的最优组合,即搜索得到一个针对给定多任务场景的最优网络结构,并且设计了两种类型的连接方式:SNR-Trans和SNR-Aver,如下所示。

在YouTube8M数据集上对比结果证明SNR方法可以获得更好的多目标优化效果,且SNR-Trans可以在更小的模型参数量情况下达到和SNR-Aver一样的效果。

序列依赖建模

1. ESMM

任务序列依赖关系建模方法中极具有代表性的是阿里妈妈在2018年提出来的Entire Space Multi-Task Model(ESMM)[11]。

在推荐系统中,不同任务之间通常存在一种序列依赖关系。在电商中的多目标预估一般是点击率和转化率,其中购买这个行为只有在点击发生后才会发生。因此这是一种序列依赖关系,可以被利用来解决一些任务预估中存在的SSB和DS问题。第一个问题主要是训练转化率预估模型时采用的是点击+转化数据,而用户登录后直接看到的并不是具体的商品详情页,而是首页或者列表页,因此转化率预估模型需要在产品曝光的场景下进行预估,这就导致了训练场景与预估场景(全样本空间)不一致的问题,不同场景肯定会产生有偏的预估结果,进而导致应用效果的损失。第二个问题是指转化率预估模型的训练样本通常远小于点击率预估模型,如下图所示。

ESMM的模型结构如下:

从模型结构上看,底层的嵌入层是转化率部分和点击率部分共享的,共享的目的主要是解决转化率预估任务正样本稀疏的问题,利用点击率的数据生成更准确的用户和物品的特征表达。

中间层是转化率和点击率部分各自利用完全隔离的神经网络拟合自己的优化目标,最终将两者相乘得到pCTCVR。

上式可转变为:

因此可以通过分别估计pCTCVR和pCTR,然后通过两者相除来解决。同时两者均可在全样本空间进行训练和预估。但预估时会出现前者大于后者的情况,导致pCVR预估值大于1。为了解决这个问题,引入了pCTCVR和pCTR两个辅助任务,并巧妙地将除法改为乘法,训练时,Loss为两者相加。

这样将三个目标同时融合进一个统一的模型,可以一次性得出所有三个优化目标的值,解决了“训练空间和预测空间不一致”和“同时利用点击和转化数据进行全局优化”两个关键问题。因此ESMM的思想是一种较为通用的序列依赖关系建模思路。

2. ESM2

ESM2是阿里最新提出的序列依赖关系建模框架,是ESMM的改进版。由于ESMM在CVR预估场景中仍然面临一定的样本稀疏问题,因为点击到购买的样本相对于点击的样本非常少。但幸运的是我们可以利用一个用户在购买某个商品之前产生的一系列其它行为信息,比如将商品加入购物车或心愿单,如图。

那么可以把加入购物车或心愿单的行为定义为Deterministic Action (DAction),表示购买目的很明确的一类行为。而其他对购买相关性不是很大的行为称作 Other Action (OAction)。那原来的Impression→Click→Buy 购物过程就变为:Impression→Click→DAction/OAction→Buy过程。

ESM2的模型结构如下:

通过引入一些中间行为即可将两个任务拆分成更多子任务:点击率、点击到DAction的概率、DAction到购买的概率和OAction到购买的概率。这样做的好处就是更好地缓解样本稀疏问题。

从模型结构中可以看到,总共有四个子任务,但是损失函数一共有三个,分别是:Impression→Click、Impression→Click→DAction和Impression→Click→DAction/OAction→Buy

由二分类交叉熵损失函数形式可得第一个损失函数表达式为:

第二个损失函数表达式为:

第三个损失函数表达式为:

在论文中,总的损失函数由以上三个损失函数加权相加得到,文中的权值均为1,在实际业务场景中也可以根据经验进行动态调整。

在CVR和CTCVR的数据集中测试,该模型显示比当前的SOTA模型在各个指标上效果都更优,且更有效地解决了SSB和DS问题。

结论

现实世界中很多问题不能分解为一个一个独立的子问题,即使可以分解,各个子问题之间也是相互关联的,通过一些共享因素或共享表示联系在一起。把现实问题当做一个个独立的单任务处理,忽略了问题之间所富含的丰富的关联信息。多任务学习就是为了解决这个问题而诞生的。

多任务学习本质是一种归纳迁移机制,利用额外的信息来源来提高当前任务的学习性能,包括提高泛化准确率、学习速率和已学习模型的可理解性。多任务学习的不同任务在共享层里的局部极小值位置是不同的,通过多任务之间不相关的部分的相互作用,有助于逃离局部极小值点;而多任务之前相关的部分则有利于底部共享层对通用特征表示的学习,因此通常多任务能够取得比单任务模型更好的效果。多任务学习未来的发展可能会出现更多新的思路或者是现有的思路相结合,后者在业内已有一些研究,比如阿里发表在KDD2020的M2GRL:引入多视图后的GRL与MTL框架结合来更好地进行推荐。另外多任务中的损失函数设计也是一个很重要的研究方向,将另外展开叙述。

因此多任务学习能提高泛化能力的可能原因主要有:

第一,不相关任务对于聚合梯度的贡献相对于其他任务来说可以视为噪声,不相关任务也可以通过作为噪声源来提高泛化能力。

第二,增加任务会影响网络参数的更新,比如增加了隐层有效的学习率。

第三,多任务网络在所有任务之间共享网络底部的隐层,或许更小的容量就可以获得同水平或更好的泛化能力。

参考文献

  1. Sebastian Ruber. An Overview of Multi-Task Learning in Deep Neural Networks.
  2. 美团“猜你喜欢”深度学习排序模型实践.
  3. 知乎推荐页Ranking经验分享.
  4. 多任务学习在美图推荐排序的近期实践.
  5. Junwei Pan, Jian Xu, et al. Field-weighted Factorization Machines for Click-Through Rate Prediction in Display Advertising.
  6. Noam Shazeer, Azalia Mirhoseini, et al. Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer.
  7. Jiaqi Ma, Zhe Zhao, et al. Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts.
  8. Zhe Zhao, Lichan Hong, et al. Recommending What Video to Watch: A Multi-task Ranking System.
  9. 进击的推荐系统:多目标学习如何让知乎用户互动率提升100%?
  10. Jiaqi Ma, Zhe Zhao, et al. SNR: Sub-Network Routing for Flexible Parameter Sharing in Multi-Task Learning.
  11. Xiao Ma, Liqin Zhao, et al. Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate.
  12. Hong Wen, Jing Zhang, et al. Entire Space Multi-Task Modeling via Post-Click Behavior Decomposition for Conversion Rate Prediction.

本文分享自微信公众号 - 机器学习与推荐算法(ML_RSer),作者:归辰

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • (ACL+ICML)2020推荐系统相关论文聚焦

    第58届国际计算语言学协会年会(ACL,The Association for Computational Linguistics)将于2020年7月6号-8号...

    张小磊
  • 最新推荐系统论文速递

    检索到了两篇关于推荐系统的论文,一篇是关于在知识图上改进负采样策略的,另一篇是在图上进行对抗学习的综述。

    张小磊
  • 网络表示学习概述

    随着社交媒体的飞速发展,在线社交网络成为了人们赖以生存的第二世界。大规模社交网络用户的形成使得传统的网络表示方法遇到了瓶颈,由于随着深度学习技术的蓬勃发展以及受...

    张小磊
  • Kotlin 协程真的比 Java 线程更高效吗?

    网上几乎全部介绍Kotlin的文章都会说Kotlin的协程是多么的高效,比线程性能好很多,然而事情的真相真是如此么?

    2020labs小助手
  • 基于Redis和Lua的分布式限流

    Java单机限流可以使用AtomicInteger,RateLimiter或Semaphore来实现,但是上述方案都不支持集群限流。集群限流的应用场景有两个,一...

    猿天地
  • 基于Redis和Lua的分布式限流

     Java单机限流可以使用AtomicInteger,RateLimiter或Semaphore来实现,但是上述方案都不支持集群限流。集群限流的应用场景有两个,...

    程序员历小冰
  • App之底部导航栏的设计

    hi,这是系列文章:App之xxx的第2篇,第1篇我总结了App之“文字”的设计技巧。今天来总结下app的底部导航栏的设计。 我为什么写这个系列的文章。因为我正...

    mixlab
  • Linux下sshd服务及服务管理命令详解

    SSH为Secure Shell的缩写,是应用层的安全协议。SSH是目前较可靠,专为远程登陆会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管...

    砸漏
  • 如何使虚拟特技人模仿的动作流畅自然?Berkeley实验室利用RSI结合ET技术另辟蹊径

    AiTechYun 编辑:chux ? 运动控制问题作为强化学习的基准,深度强化学习方法无论对操纵还是运动型任务都十分有效。然而,经过深度强化学习训练的人体模型...

    AiTechYun
  • REST API和SOAP API之间的区别

    The Representational State Transfer (REST)架构风格不是可以购买的技术,也不是可以添加到软件开发项目中的库。REST是一...

    程序你好

扫码关注云+社区

领取腾讯云代金券