rustum 发表于 2022-4-26 15:43

【推荐算法工程师】快速入坑多任务学习

在做推荐的时候,不仅仅需要优化CTR,还需要考虑收藏、加购、购买等指标,如果每个任务单独使用一个模型来优化,需要花费很多人力、机器成本。实际上,很多任务之间都是有关联的,例如用户点击后才能收藏,所以能不能用一个模型来优化这两个指标呢?答案是肯定的,也就是常常说的多任务学习。
1 多任务模型

1.1 什么是多任务模型?

Multi-task learning (MTL) is a subfield of machine learning in which multiple learning tasks are solved at the same time, while exploiting commonalities and differences across tasks. This can result in improved learning efficiency and prediction accuracy for the task-specific models, when compared to training the models separately.(wiki)
多任务学习 (MTL) 是机器学习的一个子领域,其中同时解决多个学习任务。与单独训练模型相比,MTL利用各任务之间的共性和差异,来提高特定任务模型的学习效率和预测准确性。
1.2 为什么采用多任务模型?


[*]减少多个不同任务模型的维护陈本。每个任务的模型都有自己的一套pipeline,数据收集、数据处理、离线训练、近线训练、线上服务。如果将多个子任务模型合并成一个多任务模型,可以大大减少维护成本。
[*]参数共享。通过共享embedding参数,可以减少参数规模,节省机器资源,同时可以帮助冷启动模型快速收敛。
[*]解决样本选择偏差问题。用数据更多的任务(ctr)指导学习数据较少的任务(cvr)。
[*]加快线上推理。只请求一次模型就可以获得各个任务结果,降低线上延时。
[*]增加模型泛化能力。对某任务而言,其他任务的学习都会对该任务有正则化效果。
2 参数共享

2.1 什么是参数共享(Share-Bottom)?

工业界离散特征(ID类等)往往会转换成embedding,而推荐模型中embedding部分就占据着相当大的参数规模和计算量。做多任务时,如果各任务都需要embedding映射,那么每个任务都有一个独立的sparse映射表会非常的占用资源,所以底层参数(embedding、nn)共享在多任务学习中很是常见。

[*]Hard parameter sharing.把多个任务的数据表示嵌入到同一个语义空间中,再为每个任务使用同一任务特定层提取任务特定表示。适合处理有较强相关性的任务,但遇到弱相关任务时常常表现很差。
[*]Soft parameter sharing.为每个任务都学习一个网络,但每个任务的网络都可以访问其他任务对应网络中的信息,例如表示、梯度等。软共享机制非常灵活,不需要对任务相关性做任何假设,但是由于为每个任务分配一个网络,常常需要增加很多参数。
[*]Customized Sharing. 自定义共享,不同任务的底层模块不仅有各自独立的输出,还有共享的输出


2.2 参数共享有什么特点?


[*]优点


[*]节省机器资源
[*]减少参数规模
[*]助冷启动模型快速收敛

[*]缺点


[*]相关性差的多任务模型共享参数会产生严重的跷跷板效应
3 常见模型

3.1 MOE & MMOE



相关性差的任务之间进行参数共享会产生跷跷板现象,为了解决这个问题,MMOE提出采用门控机制对若干个专家模型进行reweight(通过softmax函数确定每个专家模型对特定任务的影响程度),如果对于所有子任务只有一套Gate就是MoE模型,但是更好的处理方式是每个子任务都有一个属于自己的Gate,升级为MMoE模型。
原论文的实验有个结论,在相同参数规模下要比share-bottom有明显的提升,对于相关性低的任务联合训练MMoE效果更加明显
3.2 CGC & PLE



可以看出CGC(PLE的简单版本)与MMOE主要区别在于,CGC模型中每个任务同时有共享的专家和独有的专家,而MMOE全部是共有的专家,作者认为这样可以拟合任务间复杂的相关性。
相近的任务共享参数可以提高性能,不相近的任务会引入噪声降低性能,同时有共享参数和独有参数可以缓解这种噪声,即缓解跷跷板现象


CGC可以看作是Customized Sharing和MMoE的结合版本。每个任务有共享的Expert和独有的Expert。对任务A来说,将Experts A里面的多个Expert的输出以及Experts Shared里面的多个Expert的输出,通过类似于MMoE的门控机制之后输入到任务A的上层网络中。


在CGC的基础上,PLE考虑了不同的Expert之间的交互,可以看作是Customized Sharing和ML-MMOE的结合版本


与CGC不同的是考虑了不同expert的交互性,在底层的Extraction网络中有一个share gate,他的输入不再是cgc的独有expert和share expert,而是全部expert .
CGC/PLE作为MMOE/ML-MMOE的升级版,效果要好于MMOE/ML-MMOE
3.3 ESMM



ESMM是为了解决CVR预估面临的数据稀疏(DS)以及样本选择偏差(SSB)的问题。具体来说样本选择偏差指的是传统cvr用的是点击样本空间做训练集,但是使用时是针对全样本空间。数据稀疏指的是CVR训练数据的点击样本空间(click -> convertion)远小于CTR预估训练使用的曝光样本(show ->click)。


ESMM 将 pCVR 作为一个中间变量,并将其乘以 pCTR 得到 pCTCVR,而不是直接基于有偏的点击样本子集进行 CVR 模型训练。pCTCVR 和 pCTR 是在全空间中以所有展现样本估计的,因此衍生的 pCVR 也适用于全空间并且缓解了 https://www.zhihu.com/equation?tex=%5Ctextbf%7BSSB%7D 问题。此外,CVR 任务的特征表示网络与 CTR 任务共享,后者用更丰富的样本进行训练。这种参数共享遵循特征表示迁移学习范式,并为缓解 https://www.zhihu.com/equation?tex=%5Ctextbf%7BDS%7D 问题提供了显著的帮助。

https://www.zhihu.com/equation?tex=p_%7BCTR%7D+%3D+p%28y%3D1+%7C+x%29+%5C%5Chttps://www.zhihu.com/equation?tex=p_%7BCTCVR%7D+%3D+p%28y%3D1%2C+z%3D1+%7C+x%29+%5C%5Chttps://www.zhihu.com/equation?tex=p_%7BCVR%7D+%3D+%5Cfrac%7Bp_%7BCTCVR%7D%7D%7Bp_%7BCTR%7D%7D++%5C%5C
ESMM的损失函数如下,它由 CTR 和 CTCVR 任务中的两个损失项组成,这些任务通过所有展现次数的样本进行计算。

https://www.zhihu.com/equation?tex=L%28%5Ctheta_%7Bcvr%7D%2C+%5Ctheta_%7Bctr%7D%29+%3D+%5Csum_%7Bi%3D1%7D%5E%7BN%7D+l%28y_i%2C+f%28x_i%2C+%5Ctheta_%7Bctr%7D%29%29+%2B+%5Csum_%7Bi%3D1%7D%5E%7BN%7D+l%28z_i%5C%26y_i%2C+f%28x_i%2C+%5Ctheta_%7Bctr%7D%29+%C2%B7+f%28x_i%2C+%5Ctheta_%7Bcvr%7D%29%29++%5C%5C
欢迎关注微信公众号(算法工程师面试那些事儿),本公众号聚焦于算法工程师面试,期待和大家一起刷leecode,刷机器学习、深度学习面试题等,共勉~
Reference


[*]一文梳理多任务学习(MMoE/PLE/DUPN/ESSM等)
[*]推荐系统多任务学习(multitask)的实战总结和常见问题
[*]多任务学习,如何设计一个更好的参数共享机制?| AAAI 2020
[*]MOE & MMOE
[*]CGC & PLE
[*]ESMM
页: [1]
查看完整版本: 【推荐算法工程师】快速入坑多任务学习