常见的监督学习包括:

  • 回归:预测值为连续值,如销售额;
  • 二分类:预测值为离散值,且只有两种取值,如性别,要么是男,要么是女;
  • 多分类:预测值为离散值,且多于两种取值,如动物分类,可能有猫、狗、狮子等等;
  • 还有另外一种,也是本文的主角:多任务学习(Multi Task Learning)

MTL介绍

首先,介绍什么是多任务学习,例如之前文章提到的微信视频场景,同时包含多个学习目标(task):是否转发、是否点赞、是否关注等。

微信大数据挑战赛

以往的做法可能会对不同的task分别建立对应的模型,但这样会导致几个问题

  1. 模型的数量会随着task的数量增加而增加,模型维护成本高;
  2. 生产环境中,需要同时多个模型进行计算,才能完成多个task的预估,存在性能问题;
  3. 忽略了不同task之间的关联。

那么,多任务学习就是为了解决这些问题,建立一个模型,同时对不同的task进行学习。

另外,多任务学习还有一个优点:

经常存在某个task的样本数量比较少的情况,导致模型的学习难度较高。多任务学习过程中多个task的样本数据是共享的,一定程度上减缓这个问题。

Shared-Bottom模型

原生的MTL框架,也是最简单的,如下图:

  1. ID特征经过embedding层和其他dense特征拼接,作为输入层;
  2. 接着,是共享网络层share-bottom,一般称为硬参数共享(hard parameter sharing)。这是通过底层的共享网络来实现不同task信息之间的共享;
  3. 然后,是专家网络层,即每个task有自己独立的网络层;
  4. 最后,每个task的专家网络层输出对应的预测值。

但是,原生的MTL模型存在以下几个问题:

  1. 实践中,原生MTL模型往往无法比task单独建模的效果好;
  2. 对task之间的数据分布差异和相关性很敏感;
  3. task之间固有的冲突会影响原声MTL模型的表现。

然而,以上几个的问题的本质都是由于底层网络参数的共享

其实可以从这两个角度理解,

1、底层共享的参数容易偏向于某个task,或者说偏向于某个task的全局(局部)最优方向,如果task之间差异很大,那么不同task的模型参数的全局(局部)最优方向也会不同,那么其他task的效果肯定会大打折扣;

2、不同task的梯度冲突,存在参数撕扯,比如两个task的梯度是正负相反,那最终的梯度可能被抵消为0,导致共享参数更新缓慢。

MMoE

《Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts》

首先,上面我们提到Shared-bottom模型的效果受不同task之间的相关性影响,这篇论文就证明了这个结论:

  1. 大体的思路是控制两个回归task的label(y1、y2)的相关性为p,生成一批输入数据x;

  2. 然后使用Shared-bottom模型来拟合,对比不同p之下的效果;

  3. 对比不同p之下的情况:两个task的相关性越小,模型的效果越差。

模型结构

上图c就很清晰的描述了MMoE的结构:

  1. 模型输入会通过映射到所有task共享的多个Expert,一个Expert就是ReLU激活函数的全连接层,称为Mixture-of-Experts;
  2. 同时,模型输入还会映射到多个Gate,一个task独立拥有一个Gate,论文中Gate就是一个没有bias和激活函数的全连接层,然后接softmax,称为Multi-gate;
  3. Gate是一个概率分布,控制每个Expert对task的贡献程度,比如task A的gate为(0.1, 0.2, 0.7),则代表Expert 0、Expert 1、Expert 2对task A的贡献程度分别为0.1、0.2和0.7;
  4. 通过task对应的Gate来得到多个Expert的加权平均,然后输入到task对应的Tower层(MLP网络层);
  5. 最后,通过对应task的Tower层输出,计算得到task的预测值。

总结:

  1. 对比Shared-Bottom模型,MMoE将底层的共享网络层拆分为多个共享的Expert,并且通过引入Gate来学习每个Expert对不同task的贡献程度;
  2. 对应不同相关性的task,MMoE模型的效果比较稳定。这主要是因为相关性弱的task,可以通过Gate来利用不同的Expert。

Progressive Layered Extraction

《Progressive Layered Extraction (PLE): A Novel Multi-Task Learning (MTL) Model for Personalized Recommendations》

MMoE在弱相关性task中表现地相对比较稳定,但由于底层的Expert仍然是共享的(虽然引入Gate来让task选择Expert),所以还是会存在**“跷跷板”**的情况:一个task的效果提升,会伴随着另一个task的效果降低。

腾讯在2020的论文中,就对MMoE进行改进,提出了CGC(Customized Gate Control)、PLE(Progressive Layered Extraction)

其实,从结构上来看,CGC可以认为是单层的PLE,而PLE就是多层的CGC。

CGC

从上面的结构图,容易看出跟MMoE的差别就在于:除了共享的Expert之外,还加入了每个task自己的Specific Expert

  1. 所有task共享的expert(如上图Experts Shared)、每个task自己的expert(如上图task A的Experts A),跟MMoE一样,Expert也是模型输入Input映射而来:ReLU激活函数的全连接层;
  2. 每个task通过Input映射为自己的Gate:一个没有bias和激活函数的全连接层,然后接softmax,即图中的Gating Network;
  3. 每个task选择共享的Experts和task自己的Experts,通过task自己的Gate来得到多个Expert的加权平均,然后输入到task对应的Tower层(MLP网络层);
  4. 最后,通过对应task的Tower层输出,计算得到task的预测值。

PLE

上面也提到,PLE其实可以认为是多层的CGC:

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

Multi-level MTL

按照PLE的思路,其实MMoE也是衍生出多层的MMoE,如下图的结构:

代码实现

tensorflow1.x版本的代码实现:https://github.com/QunBB/DeepLearning/tree/main/MultiTaskLearning

多任务学习模型MTL: MMoE、PLE相关推荐

  1. 排序层-深度模型-2020:PLE【多任务学习模型】【腾讯】

    PLE模型是腾讯发表在RecSys '20上的文章,这篇paper获得了recsys'20的best paper award,也算为腾讯脱离技术贫民的大业添砖加瓦了.这篇文章号称极大的缓解了多任务学习 ...

  2. 多任务学习模型之ESMM介绍与实现

    简介:本文介绍的是阿里巴巴团队发表在 SIGIR'2018 的论文<Entire Space Multi-Task Model: An Effective Approach for Estimat ...

  3. 多任务学习模型ESMM原理与实现(附代码)

    来源:DataFunTalk 本文约2500字,建议阅读5分钟 文章基于 Multi-Task Learning (MTL) 的思路,提出一种名为ESMM的CVR预估模型. [ 导读 ] 本文介绍的是 ...

  4. 推荐系统(十五)多任务学习:谷歌MMoE(Multi-gate Mixture-of-Experts )

    推荐系统(十五)多任务学习:谷歌MMoE(Multi-gate Mixture-of-Experts ) 推荐系统系列博客: 推荐系统(一)推荐系统整体概览 推荐系统(二)GBDT+LR模型 推荐系统 ...

  5. 多任务学习(MTL)--学习笔记

    是迁移学习的一种 希望模型同时做多个任务时,能将其他任务学到的知识,用于目标任务中,从而提升目标任务效果. 多任务学习,其实是对目标任务做了一定的约束,或者叫做regularization.因为不希望 ...

  6. IJCAI 2019 | 为推荐系统生成高质量的文本解释:基于互注意力机制的多任务学习模型...

    编者按:在个性化推荐系统中,如果能在提高推荐准确性的同时生成高质量的文本解释,将更容易获得用户的"芳心".然而,现有方法通常将两者分开优化,或只优化其中一个目标.为了同时兼顾二者, ...

  7. 推荐系统遇上深度学习(九十二)-[腾讯]RecSys2020最佳长论文-多任务学习模型PLE

    今天介绍的是腾讯提出的一种新的多任务学习个性化推荐模型,该论文荣获了RecSys2020最佳长论文奖,一起来学习下! 1.背景 多任务学习通过在一个模型中同时学习多个不同的目标,如CTR和CVR,最近 ...

  8. Sunny.Xia的深度学习(四)MMOE多任务学习模型实战演练

    本专栏文章会在本博客和知乎专栏--Sunny.Xia的深度学习同步更新,对于评论博主若未能够及时回复的,可以知乎私信.未经本人允许,请勿转载,谢谢. 一.什么是MMOE? 三张图分别是多任务模型的不同 ...

  9. MMOE——多任务学习模型

    摘要 对于多任务学习,我们的目标是建立一个单一的模型,同时学习这些多个目标和任务.然而,常用的多任务模型的预测质量往往对任务之间的关系比较敏感.因此,研究任务特定目标和任务间关系之间的建模权衡是很重要 ...

最新文章

  1. C语言接收一个整数划分成5的倍数,整数划分为连续整数;整数划分
  2. oracle 11g备份,导入oracle 10g
  3. Exception in thread “main“ java.lang.IllegalArgumentException: http://www.dmg.org/PMML-4_4(没搞定)
  4. 东北大学计算机 大一物理考试题,东北大学大学物理期末考题及答案Word版
  5. 7.中文输入验证-原生JS
  6. 00002-两数之和-leetcode-1.暴力法(枚举法),2.哈希表法,目前更新了枚举法
  7. 学习笔记:MySQL字符串类型
  8. spark:SparkUI界面
  9. python路径设置方法,R不转义,以及r转义出错SyntaxError
  10. springboot配置监听器、过滤器和拦截器
  11. Python_今天是今年第几天
  12. 第一个java程序的错误_我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么?...
  13. Spinlock 简介(转)
  14. mysql外键可以是空吗_带外键的表列可以为NULL吗?
  15. YYText源码解读-YYText同步/异步渲染流程(一)—UIView与CALayer
  16. can和could的用法_can和could的区别和用法
  17. 什么是数据库防火墙 数据库防火墙作用是什么
  18. vue运行报错冒号问题,browser.js:158 Uncaught SyntaxError: Unexpected token ‘:‘
  19. 战地2服务器怎么虚拟人数,战地2如何修改人数
  20. 社会保险费的缴费基数与缴费比例

热门文章

  1. #杂谈 个人嵌入式开发的学习
  2. 【Vegas原创】wordpress 从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页。此响应不是合法的JSON响应。解决方法。...
  3. jacob操作office后关闭不掉进程
  4. A[n.m]是一个n行m列的矩阵,明]表示A的第i行列的元素,定义x难J为A的第i行和第i列除了al.]之 外所有元素(共n+m-2个)的乘积,即xlj=(1]a1L.21. a[j-1..[.m
  5. 卷积神经网络VGG16
  6. 也是听说写博客可以修身养性提高自己的*能力
  7. ChatGPT在大学里该怎么用?24所英国顶级大学宣布立场!
  8. Android -- 显示圆形头像
  9. (Java蓝桥杯算法)给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘。
  10. 基于java的ssm和微信小程序实现物业缴费系统的设计与实现【附项目源码+论文说明】