多任务学习模型MTL: MMoE、PLE
常见的监督学习包括:
- 回归:预测值为连续值,如销售额;
- 二分类:预测值为离散值,且只有两种取值,如性别,要么是男,要么是女;
- 多分类:预测值为离散值,且多于两种取值,如动物分类,可能有猫、狗、狮子等等;
- 还有另外一种,也是本文的主角:多任务学习(Multi Task Learning)。
MTL介绍
首先,介绍什么是多任务学习,例如之前文章提到的微信视频场景,同时包含多个学习目标(task):是否转发、是否点赞、是否关注等。
微信大数据挑战赛
以往的做法可能会对不同的task分别建立对应的模型,但这样会导致几个问题
- 模型的数量会随着task的数量增加而增加,模型维护成本高;
- 生产环境中,需要同时多个模型进行计算,才能完成多个task的预估,存在性能问题;
- 忽略了不同task之间的关联。
那么,多任务学习就是为了解决这些问题,建立一个模型,同时对不同的task进行学习。
另外,多任务学习还有一个优点:
经常存在某个task的样本数量比较少的情况,导致模型的学习难度较高。多任务学习过程中多个task的样本数据是共享的,一定程度上减缓这个问题。
Shared-Bottom模型
原生的MTL框架,也是最简单的,如下图:
- ID特征经过embedding层和其他dense特征拼接,作为输入层;
- 接着,是共享网络层share-bottom,一般称为硬参数共享(hard parameter sharing)。这是通过底层的共享网络来实现不同task信息之间的共享;
- 然后,是专家网络层,即每个task有自己独立的网络层;
- 最后,每个task的专家网络层输出对应的预测值。
但是,原生的MTL模型存在以下几个问题:
- 实践中,原生MTL模型往往无法比task单独建模的效果好;
- 对task之间的数据分布差异和相关性很敏感;
- 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之间的相关性影响,这篇论文就证明了这个结论:
大体的思路是控制两个回归task的label(y1、y2)的相关性为p,生成一批输入数据x;
然后使用Shared-bottom模型来拟合,对比不同p之下的效果;
对比不同p之下的情况:两个task的相关性越小,模型的效果越差。
模型结构
上图c就很清晰的描述了MMoE的结构:
- 模型输入会通过映射到所有task共享的多个Expert,一个Expert就是ReLU激活函数的全连接层,称为Mixture-of-Experts;
- 同时,模型输入还会映射到多个Gate,一个task独立拥有一个Gate,论文中Gate就是一个没有bias和激活函数的全连接层,然后接softmax,称为Multi-gate;
- 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;
- 通过task对应的Gate来得到多个Expert的加权平均,然后输入到task对应的Tower层(MLP网络层);
- 最后,通过对应task的Tower层输出,计算得到task的预测值。
总结:
- 对比Shared-Bottom模型,MMoE将底层的共享网络层拆分为多个共享的Expert,并且通过引入Gate来学习每个Expert对不同task的贡献程度;
- 对应不同相关性的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
- 所有task共享的expert(如上图Experts Shared)、每个task自己的expert(如上图task A的Experts A),跟MMoE一样,Expert也是模型输入Input映射而来:ReLU激活函数的全连接层;
- 每个task通过Input映射为自己的Gate:一个没有bias和激活函数的全连接层,然后接softmax,即图中的Gating Network;
- 每个task选择共享的Experts和task自己的Experts,通过task自己的Gate来得到多个Expert的加权平均,然后输入到task对应的Tower层(MLP网络层);
- 最后,通过对应task的Tower层输出,计算得到task的预测值。
PLE
上面也提到,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。
Multi-level MTL
按照PLE的思路,其实MMoE也是衍生出多层的MMoE,如下图的结构:
代码实现
tensorflow1.x版本的代码实现:https://github.com/QunBB/DeepLearning/tree/main/MultiTaskLearning
多任务学习模型MTL: MMoE、PLE相关推荐
- 排序层-深度模型-2020:PLE【多任务学习模型】【腾讯】
PLE模型是腾讯发表在RecSys '20上的文章,这篇paper获得了recsys'20的best paper award,也算为腾讯脱离技术贫民的大业添砖加瓦了.这篇文章号称极大的缓解了多任务学习 ...
- 多任务学习模型之ESMM介绍与实现
简介:本文介绍的是阿里巴巴团队发表在 SIGIR'2018 的论文<Entire Space Multi-Task Model: An Effective Approach for Estimat ...
- 多任务学习模型ESMM原理与实现(附代码)
来源:DataFunTalk 本文约2500字,建议阅读5分钟 文章基于 Multi-Task Learning (MTL) 的思路,提出一种名为ESMM的CVR预估模型. [ 导读 ] 本文介绍的是 ...
- 推荐系统(十五)多任务学习:谷歌MMoE(Multi-gate Mixture-of-Experts )
推荐系统(十五)多任务学习:谷歌MMoE(Multi-gate Mixture-of-Experts ) 推荐系统系列博客: 推荐系统(一)推荐系统整体概览 推荐系统(二)GBDT+LR模型 推荐系统 ...
- 多任务学习(MTL)--学习笔记
是迁移学习的一种 希望模型同时做多个任务时,能将其他任务学到的知识,用于目标任务中,从而提升目标任务效果. 多任务学习,其实是对目标任务做了一定的约束,或者叫做regularization.因为不希望 ...
- IJCAI 2019 | 为推荐系统生成高质量的文本解释:基于互注意力机制的多任务学习模型...
编者按:在个性化推荐系统中,如果能在提高推荐准确性的同时生成高质量的文本解释,将更容易获得用户的"芳心".然而,现有方法通常将两者分开优化,或只优化其中一个目标.为了同时兼顾二者, ...
- 推荐系统遇上深度学习(九十二)-[腾讯]RecSys2020最佳长论文-多任务学习模型PLE
今天介绍的是腾讯提出的一种新的多任务学习个性化推荐模型,该论文荣获了RecSys2020最佳长论文奖,一起来学习下! 1.背景 多任务学习通过在一个模型中同时学习多个不同的目标,如CTR和CVR,最近 ...
- Sunny.Xia的深度学习(四)MMOE多任务学习模型实战演练
本专栏文章会在本博客和知乎专栏--Sunny.Xia的深度学习同步更新,对于评论博主若未能够及时回复的,可以知乎私信.未经本人允许,请勿转载,谢谢. 一.什么是MMOE? 三张图分别是多任务模型的不同 ...
- MMOE——多任务学习模型
摘要 对于多任务学习,我们的目标是建立一个单一的模型,同时学习这些多个目标和任务.然而,常用的多任务模型的预测质量往往对任务之间的关系比较敏感.因此,研究任务特定目标和任务间关系之间的建模权衡是很重要 ...
最新文章
- C语言接收一个整数划分成5的倍数,整数划分为连续整数;整数划分
- oracle 11g备份,导入oracle 10g
- Exception in thread “main“ java.lang.IllegalArgumentException: http://www.dmg.org/PMML-4_4(没搞定)
- 东北大学计算机 大一物理考试题,东北大学大学物理期末考题及答案Word版
- 7.中文输入验证-原生JS
- 00002-两数之和-leetcode-1.暴力法(枚举法),2.哈希表法,目前更新了枚举法
- 学习笔记:MySQL字符串类型
- spark:SparkUI界面
- python路径设置方法,R不转义,以及r转义出错SyntaxError
- springboot配置监听器、过滤器和拦截器
- Python_今天是今年第几天
- 第一个java程序的错误_我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么?...
- Spinlock 简介(转)
- mysql外键可以是空吗_带外键的表列可以为NULL吗?
- YYText源码解读-YYText同步/异步渲染流程(一)—UIView与CALayer
- can和could的用法_can和could的区别和用法
- 什么是数据库防火墙 数据库防火墙作用是什么
- vue运行报错冒号问题,browser.js:158 Uncaught SyntaxError: Unexpected token ‘:‘
- 战地2服务器怎么虚拟人数,战地2如何修改人数
- 社会保险费的缴费基数与缴费比例
热门文章
- #杂谈 个人嵌入式开发的学习
- 【Vegas原创】wordpress 从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页。此响应不是合法的JSON响应。解决方法。...
- jacob操作office后关闭不掉进程
- A[n.m]是一个n行m列的矩阵,明]表示A的第i行列的元素,定义x难J为A的第i行和第i列除了al.]之 外所有元素(共n+m-2个)的乘积,即xlj=(1]a1L.21. a[j-1..[.m
- 卷积神经网络VGG16
- 也是听说写博客可以修身养性提高自己的*能力
- ChatGPT在大学里该怎么用?24所英国顶级大学宣布立场!
- Android -- 显示圆形头像
- (Java蓝桥杯算法)给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘。
- 基于java的ssm和微信小程序实现物业缴费系统的设计与实现【附项目源码+论文说明】