提升模型性能的方法有很多,除了提出过硬的方法外,通过把神经网络加深加宽(深度学习),增加数据集数目(预训练模型)和增加目标函数(多任务学习)都是能用来提升效果的手段。(别名Joint Learning,Learning to learn,learning with auxiliary task…等)

对于人类来说,我们往往学会了一件事,是能够触类旁通,举一反三的。即其他不同任务的经验性,能够带来一些有用的信息,这是多任务学习的出发点。但如果处理多任务还是用single-task learning的话(类似bagging),模型会默认为每个任务是独立的,没有关联性的,所以每个模型的参数都是独立进行的。这样做的缺点在于:

  • 1训练数据有限,所以模型并不具有很好的泛化性能
  • 2不考虑任务之间的相关性,缺乏对不同模型之间共享信息的挖掘,使得模型训练过程中性能下降

Multi-Task Learning(MTL)
多任务学习实质上是一种迁移机制,如何让模型能够同时解决多种问题,从而提高泛化准确率、学习速度和能力,模型的可理解性。特别是如何使用与其他任务的“相关性”与“差异性”,通过多个任务训练并共享不同任务已学到的特征表示,减轻对特定任务的过度拟合,从正则化效果中获益,提升最终的性能,使学习的嵌入在任务之间具有通用性。多任务学习的构建原则:

  • 理解建模任务之间的相关性,以构建合适的多任务方案。
  • 同时对多个任务的模型参数进行联合学习以挖掘不同任务的共享信息。
  • 但需要同时考虑不同任务会存在的差异性,如何提高模型对不同任务的适应能力。

为什么多任务是有效的?

  • 可增加训练样本,且不同任务的噪音不同,同时学习多个任务能得到更通用的表达
  • 可以通过其他任务来判断学习到的特征是否真的有效
  • 对于某个任务难学到的特征,可以通过其他任务来学习
  • 多任务学习倾向于让模型关注其他模型也关注的信息表达
  • 某种程度上可以视为正则化

常用多任务学习的主要方式:

  • 基于参数的共享,如神经网络隐层参数共享,然后上层得到多个特征完成多种任务以达到联合训练的目的,即loss里面组合多个。
  • 对于loss的组合的权重设置可以分为手工调整,Gradient normalization(希望不同任务loss的量级接近,纳入梯度计算权重,优点是可以考虑loss的量级,缺点是每一步都要额外算梯度)。Dynamic weight averaging,DWA希望各个任务以相近的速度来进行学习(记录每步的loss,loss缩小快的任务权重会变小,缺点是没有考虑量级)。Dynamic Task Prioritization,DTP希望更难学的任务可以有更高的权重。Uncertainty Weighting,让“简单”的任务权重更高(确定性越强的任务权重会大,而噪声大难学的任务权重会变小)。对于loss的平衡挺讲究的,也算是调参师需要掌握的东西吧,有空再新写文章整理。
  • 基于正则化的共享,如均值约束,联合特征学习等。比如使用低秩参数矩阵分解,即假设不同任务的参数可能会共享某些维度的特征,那么每个任务的参数都接近所有任务平均的参数来建模任务之间的相关性,即在loss中加入这样的正则化来约束参数:λ∑in∣∣Wi−1n∑snWs∣∣\lambda \sum_i^n ||W_i-\frac{1}{n}\sum_s^n W_s||λinWin1snWs

所以多任务的优点在于它具有很好的泛化性能,对于有些任务的数据不足问题,也能借助其他任务得到训练,另外它还能起到正则的作用,即很难使某个任务过拟合以保证整个模型的泛化性能。而其困难在于如何更好的对每个任务分配权重(已经有人有NAS做了…)以使其鲁棒性最强,同时如何兼顾特征共享部分和任务的特点表示,避免过拟合或者欠拟合是值得研究的。除了一般处理多任务都是一个可学习的alpha来控制外,本篇文章将整理几篇思路很奇特的多任务学习的论文。

Single-Level MTL Models
单层主要有以下几种方式:

  • Hard Parameter Sharing:不同任务底层共享,然后共不同任务各自输出。当两个任务相关性较高时,用这种结构往往可以取得不错的效果,但任务相关性不高时,会存在负迁移现象,导致效果不理想。
  • Asymmetry Sharing(不对称共享):不同任务的底层模块有各自对应的输出,但其中部分任务的输出会被其他任务所使用,而部分任务则使用自己独有的输出。哪部分任务使用其他任务的输出,则需要人为指定。
  • Customized Sharing(自定义共享):不同任务的底层模块不仅有各自独立的输出,还有共享的输出。
  • MMoE:底层包含多个Expert,然后基于门控机制,不同任务会对不同Expert的输出进行过滤。
  • CGC:这是PLE的结构(图自腾讯在RecSys2020最佳长论文,Progressive Layered Extraction (PLE): A Novel Multi-Task Learning (MTL) Model for Personalized Recommendations),他的不同之处在于学习一个个性和共性两方面的信息,然后再用不同的gate来控制。

Multi-Level MTL Models

  • Cross-Stitch Network:用参数来控制不同任务间共享的特征
  • Sluice Network:分层特征融合网络
  • ML-MMoE:MMoE的多级结构
  • PLE:多层萃取(基于CGC)


MMoE(Multi-gate Mixture-of-Experts)
来自论文:Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts

MMoE应该是实际上用的比较多一个架构了,想主要整理一下这个。
这篇文章是对多任务学习的一个扩展,通过门控网络的机制来平衡多任务。所谓“平衡”是因为多任务学习中有个问题就是如果子任务之间的差异性太大了,多任务模型的效果会很差,那么如何平衡不同的任务呢?MMoE主要有两个共享:

  • 图a,使用shared-bottom网络,多个上层任务共用底层网络。
  • 图b,多个独立模型的集成方法MoE,即每个expert network都可以认为是神经网络,公共一个门控网络(One-gate MoE model),最终的输出是所有experts的加权和。
  • 图c,MMoE,每个任务使用单独的gating networks。即每个任务的gating networks通过最终输出权重不同实现对experts的选择性利用。不同任务的gating networks可以学习到不同的组合experts的模式,因此模型考虑到了捕捉到任务的相关性和区别。

通过这种multi-gate的结构能够缓解任务间差异大的情况。


Multi-task Learning in LM
语言模型是天然无监督的多任务学习。而且鉴于目前针对BERT的改进很多(包括BERT-large等版本)都是增加了数据量,计算能力或训练过程。

  • 比如RoBERTa,精细调参,为了优化训练程序,从BERT的预训练程序中删除了结构预测(NSP)任务,引入了动态掩蔽,以便在训练期间使掩蔽的标记发生变化。
  • 比如DistilBERT学习了BERT的蒸馏版本,保留了95%的性能,但只使用了一半的参数。 具体来说,它没有标记类型和池化层的嵌入,只保留了谷歌BERT中一半的层(当然ALBERT也是等)。
  • MT-DNN与ERNIE2.0。这两篇论文的多任务学习很有意思,接下来主要整理这两篇文章。

MT-DNN
Multi-Task Deep Neural Networks for Natural Language Understanding
MT-DNN是结合了至少4种任务的模型:单句分类、句子对分类、文本相似度打分和相关度排序等等。

  • 单句分类:CoLA是判断英语句子是否语法合适、SST-2是电影评论的情感(正面or负面)。
  • 文本相似度:STS-B对两句话进行文本相似度打分
  • 句子对分类:RTE和MNLI是文本蕴含任务(推理两个句子之间的关系,是否存在蕴含关系、矛盾的关系或者中立关系),QQP和MRPC是判断两句话是否语义上一致,等价。
  • 相关性排序:QNLI斯坦福问答数据集的一个版本,虽然是二分类问题,此时变成一个多排序问题,使更接近的答案排得更加靠前。

在MT-DNN的多任务学习中,也是低层的特征在所有任务之间共享,而顶层面向丰富的下游任务。从模型结构上,从底向上的shared layers是Transformer逐步的过程,用于生成共享的上下文嵌入向量(contextual embedding layers),然后完成四种任务的预测。

ERNIE2.0
ERNIE 2.0: A Continual Pre-Training Framework for Language Understanding
ERNIE2.0的贡献主要有1 通过大型语料库+先验知识。2,多任务学习逐步更新 ERNIE 模型。

  • 序列性多任务学习 (sequential multi-task learning)。使模型能够学习到词汇,语法,语义信息。不同于持续学习和多任务学习,序列多任务学习在引入新的训练任务时,先利用之前学习到的参数对模型进行初始化,再同时训练新任务和旧任务。
  • 定制和引入了多种预训练任务。侧重词汇的任务(mask,大写字词预测,字词-文章关系),侧重结构/语法的任务(词语重排序,语句距离),侧重语义的任务(文章关系任务,信息检索相关性任务)。如下图,首先主要使用的任务有:
  • Knowledge Masking Task、Capitalization Prediction Task和Token-Document Relation Prediction Task。Knowledge Masking Task是预测被masked掉的短语和命名知识实体以学习到局部语境和全局语境的依赖关系信息。Capitalization Prediction Task是首字母大写预测,首字母大写的词往往有特殊的功能。Token-Document Relation Prediction Task预测段中的token是否出现在原始文档的其他段(segment)中,即捕获高频词或线索词。
  • Sentence Reordering Task和Sentence Distance Task。Sentence Reordering Task句子重排任务是为了学习句子之间的关系。Sentence Distance Task通过文档级的信息学习句子之间的距离。
  • Discourse Relation Task和IR Relevance Task。Discourse Relation Task引入2个句子之间语义或修辞关系的预测任务。IR Relevance Task学习短文本在信息检索中的相关性。

这篇文章比较有趣的就是这个多任务连续增量学习,或持续学习(Continual learning)了,它致力于对数个任务按顺序依次训练模型,以确保模型在训练新任务时候,依旧能够记住先前的任务。正如人类能够不断地通过学习或历史经验积累获得信息,从而有效地发展新的技能。

具体关于连续增量学习的对比,第一个是如何以连续的方式训练任务,而不忘记以前所学的知识;第二个是如何更有效地学习这些预训练任务。

  • Continual Learning。在训练的每一个阶段仅通过一项任务来训练模型,如训练任务A,在训练任务B,一直到训练任务Z,但是其缺点是会忘记先前学习的知识,导致最后的结果会更加偏向靠后的任务。。
  • Multi-task Learning。是普通的MTL,即所有任务在一起进行多任务学习,即同时训练A,B…Z期间不做交互最后做集成。缺点是训练完的模型只能处理这些任务,如果出现了比较新的任务,比较大的概率需要重头开始训练。
  • Sequential Multi-task Learning。当有新任务出现时,先使用先前学习的参数来初始化模型,并同时训练新引入的任务和原始任务,如先训练A,再训练A,B,再训练A,B,C,如图中的金字塔形状,当有新任务出现时,它也能够快速反应做调整。

除了这种,其实还可以先(A)(B)(C)训练,再(A,B)(B,C)(A,C),最后再(A,B,C)这种方式。有点像我们做题往往会先做单项训练,再综合训练。


Continual learning with GANs
持续学习在GAN上的应用可以使其适应于在线学习,即数据实时的,顺序的到来。详见知乎某大佬的整理:
https://zhuanlan.zhihu.com/p/72845763

Multi-task Learning in LM(多任务学习,PLE,MT-DNN,ERNIE2.0)相关推荐

  1. Multi task learning多任务学习背景简介

    2020-06-16 23:22:33 本篇文章将介绍在机器学习中效果比较好的一种模式,多任务学习(Multi task Learning,MTL).已经有一篇机器之心翻译的很好的博文介绍多任务学习了 ...

  2. RS笔记:深度推荐模型之多任务学习PLE模型 [RecSys 2020 最佳论文 腾讯]

    RS笔记:深度推荐模型之多任务学习ESMM模型(多目标优化模型,同时优化CTR和CVR) [SIGIR 2018 阿里妈妈] RS笔记:深度推荐模型之多任务学习MMoE模型 [KDD 2018 谷歌] ...

  3. Multi Task Learning在工业界如何更胜一筹

    摘要: 本文主要介绍多任务学习和单任务学习的对比优势以及在工业界的一些使用.如何从单任务学习转变为多任务学习?怎样使AUC和预估的准确率达到最佳?如何对实时性要求较高的在线应用更加友好?本文将以淘宝实 ...

  4. 多任务学习模型MTL: MMoE、PLE

    常见的监督学习包括: 回归:预测值为连续值,如销售额: 二分类:预测值为离散值,且只有两种取值,如性别,要么是男,要么是女: 多分类:预测值为离散值,且多于两种取值,如动物分类,可能有猫.狗.狮子等等 ...

  5. 多任务学习(Multi-task Learning)方法总结

    多任务学习(multi task learning)简称为MTL.简单来说有多个目标函数loss同时学习的就算多任务学习.多任务既可以每个任务都搞一个模型来学,也可以一个模型多任务学习来一次全搞定的. ...

  6. 多任务学习(Multi-Task Learning, MTL)

    目录 [显示] 1 背景 2 什么是多任务学习? 3 多任务学习如何发挥作用? 3.1 提高泛化能力的潜在原因 3.2 多任务学习机制 3.3 后向传播多任务学习如何发现任务是相关的 4 多任务学习可 ...

  7. 多任务学习 (Multitask Learning) 汇总

    1 前言 多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法.在机器学习领域,标准的算法理论是一次学习一个任务,也就是 ...

  8. 2021年浅谈多任务学习

    作者 | 多多笔记 来源 |AI部落联盟 头图 | 下载于视觉中国 写此文的动机: 最近接触到的几个大厂推荐系统排序模型都无一例外的在使用多任务学习,比如腾讯PCG在推荐系统顶会RecSys 2020 ...

  9. PAMTRI:用于车辆重新识别的姿势感知多任务学习

    Today, we will discuss an unorthodox paper by NVIDIA Labs on Vehicle Re Identification. 今天,我们将讨论NVID ...

  10. 多任务学习MTL-基本介绍(一)

    多任务模型 单任务模型 一个模型学习一个目标,不同模型享用独立的模型空间,不同模型之间没有连接,相互独立 多任务模型 一个模型学习多个目标,共享同一个模型空间 优势:相比于单任务模型,同时学习多个相关 ...

最新文章

  1. 《Node.js区块链开发》一3.5 亿书对DPoS机制的改进
  2. php开发问题及解决方案,PHP开源开发框架ZendFramework使用中常见问题说明及解决方案...
  3. 使用 cout 输出数据之控制输出格式(二)
  4. consul 自动发现与自动注册
  5. JBoss Fuse:使用JEXL的动态蓝图文件
  6. python 连接 rabbitMQ以及rabbitMQssl注意事项,password
  7. 框架依赖注入和普通依赖注入_角服务和依赖注入解释
  8. MySQL性能医生:Orzdba工具安装和使用
  9. 利用pandas对一列/多列进行数据区间筛选
  10. java中容器里的增删改查_Java工程师的第八天——简单的增删改查的应用
  11. android 百度定位 sdk 3.3demo,BaiduMapApi_Sample_Android_1.3.3\demo无法启动
  12. MyBatis简单了解
  13. 卸载 Oracle 19c
  14. netbean使用有感
  15. php 百家姓,最新“百家姓”排名
  16. 文件批量重命名怎么加下划线?
  17. 程序发生run time error原因及解决方案
  18. Springboot毕设项目基于SpringBoot的学生宿舍水电费缴费系统的设计与实现2py81(java+VUE+Mybatis+Maven+Mysql)
  19. 看大品牌如何玩转小程序
  20. java 空白图片_图片文件打印空白的解决办法

热门文章

  1. 出现WARNING:EES turn off. Please turn on EES and try again和linux10.4修改ip地址
  2. room数据库的使用
  3. 满足lisheng需求 linux添加环境变量 linux批处理 2016.04.25小结
  4. MySQL基本命令语法之select
  5. 使用global全局变量画出会颜色渐变的科赫koch雪花
  6. 我的家乡新乡html,英语作文我的家乡新乡
  7. java如何快速取消注释_关于Java:Eclipse注释/取消注释快捷方式?
  8. css 圆圈 虚线,CSS3 个人介绍卡片 圆形虚线边框头像
  9. 中秋佳节之际,TCL40周年专场音乐会在中央音乐学院歌剧音乐厅圆满落幕
  10. cad幕墙下料lisp_幕墙小工具集合:XY