深度学习-多任务学习总结

深度学习中多任务学习的方法和问题总结

  • 为什么要做多任务学习
  • 多任务学习的实现方法
  • 介绍下ESSM
  • 介绍下PLE

为什么要做多任务学习

多任务算法的应用场景还是很广泛的,只要是推荐技术涉及的业务,比如搜索、广告还是推荐都有需求,另外无论是成熟的大规模推荐系统还是处于上升期的初创场景对于多个目标的联合训练一般都有强需求。

常见多任务学习的动机和需求还是围绕提升(主)模型的精度(泛化能力)、资源性能和维护成本,具体如下也欢迎更多同学补充交流。

(1)多任务场景下,多个任务(相关性较强)会从不同的角度学习特征,增强模型泛化能力来提升收益,最常见的就是通过增加优化目标,比如在信息流推荐领域中的点击,时长,评论,点赞等多个维度,比如在电商领域的点击和转化。

(2)共享参数,不额外增加资源的前提下变相增加参数规模。推荐系统的核心是embedding,对于相关的多个目标,比如点击/时长等,用户及相关特征的重合或者接近的,多个任务共享这部分参数可以极大的节省离线和在线资源

(3)用数据更多的任务指导学习数据较少的任务。一般常见的就是某个任务的数据量较少,期望能通过大数据训练较好的模型指导稀疏数据场景下的模型,比如点击率和转化率,一跳场景和二跳场景。

(4)冷启模型的快速收敛。将冷启模型和收敛模型同时训练,帮助冷启模型可以在一个相对正确的方向上快速收敛

(5)有更多反馈和指导的模型(人工参与或更接近用户反馈层)指导学习其他模型。最常见的就是在精排阶段或者重排序阶段有一些"精准"评分用来指导更上层的粗排或者召回模型

(6)多个模型合并为一个模型后的线上资源多路请求可以合并为一路,减少请求资源。这个一般是架构同学的强需求,毕竟线上资源还是非常贵的。

(7)减少多模型的维护成本。有很多策略和架构同学减少维护多个"相似"模型的需求是强烈的,一般一个模型有数据链条,离线训练任务,在线任务等多个环节,如果能合并成一个任务会极大的减轻工作量。

(8)混合数据中训练不同任务。由于数据生成或者任务形式的不同,常见的需求是期望不同的数据训练不同的模型(比如mlp塔),而不是所有数据都训练每个模型,这也是多任务学习中的常见需求。不同的数据一般指不同的样本 或者一条样本的不同特征。

总结一下,一般优化多于一个的目标函数的任务都可以称为多任务。多任务学习的主要动机还是围绕提升(主)模型的精度(泛化能力)、资源性能和维护成本

以上回答来自知乎。另外,关于多任务学习的发展历史可参考Multi-task Learning(Review)多任务学习概述这篇文章。

参考文章

  • 一文"看透"多任务学习
  • 多任务学习综述:推荐系统多任务学习(multitask)的实战总结和常见问题(一)
  • Multi-task Learning(Review)多任务学习概述
  • 多任务学习优化(Optimization in Multi-task learning)
  • 收藏|浅谈多任务学习(Multi-task Learning)
  • 多任务学习成功的原因是引入了别的数据库还是多任务框架本身呢?
  • 迁移学习和多任务学习有什么本质区别?
  • 多目标优化和多任务学习的区别是什么?
  • 模型汇总-14 多任务学习-Multitask Learning概述
  • 推荐系统时代热点(3):多任务学习的实践意义
  • 理解多任务学习(Multi-task Learning)的三个层面
  • 深度学习中的多任务学习(Multi-task-learning)——keras实现

多任务学习的实现方法

第一种是hard parameter sharing,如下图所示:
深度学习-多任务学习总结_第1张图片
比较简单,前几层dnn为各个任务共享,后面分离出不同任务的layers。这种方法有效降低了过拟合的风险: 模型同时学习的任务数越多,模型在共享层就要学到一个通用的嵌入式表达使得每个任务都表现较好,从而降低过拟合的风险。

第二种是soft parameter sharing,如下图所示:
深度学习-多任务学习总结_第2张图片
在这种方法下,每个任务都有自己的模型,有自己的参数,但是对不同模型之间的参数是有限制的,不同模型的参数之间必须相似,由此会有个distance描述参数之间的相似度,会作为额外的任务加入到模型的学习中,类似正则化项。

多任务学习能提效,主要是由于以下几点原因:

  • 隐式数据增强:每个任务都有自己的样本,使用多任务学习的话,模型的样本量会提升很多。而且数据都会有噪声,如果单学A任务,模型会把A数据的噪声也学进去,如果是多任务学习,模型因为要求B任务也要学习好,就会忽视掉A任务的噪声,同理,模型学A的时候也会忽视掉B任务的噪声,因此多任务学习可以学到一个更精确的嵌入表达。
  • 注意力聚焦:如果任务的数据噪声非常多,数据很少且非常高维,模型对相关特征和非相关特征就无法区分。多任务学习可以帮助模型聚焦到有用的特征上,因为不同任务都会反应特征与任务的相关性。
  • 特征信息窃取:有些特征在任务B中容易学习,在任务A中较难学习,主要原因是任务A与这些特征的交互更为复杂,且对于任务A来说其他特征可能会阻碍部分特征的学习,因此通过多任务学习,模型可以高效的学习每一个重要的特征。
  • 表达偏差:MTL使模型学到所有任务都偏好的向量表示。这也将有助于该模型推广到未来的新任务,因为假设空间对于足够多的训练任务表现良好,对于学习新任务也表现良好。
  • 正则化:对于一个任务而言,其他任务的学习都会对该任务有正则化效果。

思考:
多任务学习中,如何平衡不同任务的loss

参考文章

  • 一文梳理多任务学习(MMoE/PLE/DUPN/ESSM等)

介绍下ESSM

在电商场景下,转化是指从点击到购买。在CVR预估时候,我们往往会遇到两个问题:样本偏差数据稀疏问题样本偏差是指训练和测试集样本不同,拿电商举例,模型用点击的数据来训练,而预估的却是整个样本空间。数据稀疏问题就更严重了,本身点击样本就很少,转化就更少了,所以可以借鉴多任务学习的思路,引入辅助学习任务,拟合pCTR和pCTCVR(pCTCVR = pCTR * pCVR),如下图所示:
深度学习-多任务学习总结_第3张图片

  • 对于pCTR来说,可将有点击行为的曝光事件作为正样本,没有点击行为的曝光事件作为负样本
  • 对于pCTCVR来说,可将同时有点击行为和购买行为的曝光事件作为正样本,其他作为负样本
  • 对于pCVR来说,只有曝光没有点击的样本中的梯度也能回传到main task的网络中

另外这两个子网络的embedding层是共享的,由于CTR任务的训练样本量要远超过CVR任务的训练样本量,从而能够缓解训练数据稀疏性问题。

进一步阅读并思考:

1)ESMM算法原理和解决的两个问题
2)ESMM中如何解决CVR样本过于稀疏的问题,实际上解决了吗
3)ESMM训练是否使用全量样本

参考文章

  • 一文梳理多任务学习(MMoE/PLE/DUPN/ESSM等)
  • 论文笔记:ESMM(阿里出品)
  • 多任务学习ESMM系列
  • 没有ESSM和MMOE等多目标模型之前是如何解决cvr样本稀疏问题的?
  • 推荐系统CTR(CVR)预估模型(多任务学习)之ESMM

介绍下PLE

深度学习-多任务学习总结_第4张图片
PLE其实可以认为是多层的CGC:

  • 由多个Extraction Network组成,每个Extraction Network就是CGC网络层,做法与CGC一致;
  • 第一层Extraction Network的输入是原生模型输入Input;
  • 但后面的Extraction Network,输入就不再是Input,而是所有Gate与Experts的加权平均的融合,这里的融合一般做法包括:拼接、加法融合、乘法融合,或者这三种的组合;
  • 最后一层Extraction Network中gate的数量等于task的数量,对应每个task的gate;
  • 而前面层的Extraction Network中gate的数量是task的数量+1,这里其实就是对应每个task的gate,加上共享expert的gate。

进一步阅读并思考:

1)PLE中loss如何平衡
2)PLE模型中,是否有尝试对不同的gate用不同的特征,是否有尝试不同业务用不同的特征组合

参考文章

  • 一文梳理多任务学习(MMoE/PLE/DUPN/ESSM等)
  • 多任务学习MTL模型:MMoE、PLE
  • 多任务学习系列之PLE

你可能感兴趣的:(深度学习)