文 | 小伟
编 | 小轶

前言

说到多任务学习,大家都不陌生,不管是在学术界还是工业界都已经有了很多成熟的探索与应用。在理想的多任务学习中,各个任务对彼此应当是有益的,所有任务相互促进,从而达到超过单任务学习的效果。

但理想归理想,实际情况却并非如此。简单的把一堆任务堆积在一起往往会降低模型最终的性能,所以在多任务学习中,如何去有效地识别哪些任务在训练时结合在一起可以对彼此有益 成为了很关键的问题。

显而易见,我们可以直接搜索所有任务组合在一起构成的参数空间(N个任务对应2^N-1种可能性),但指数级的复杂度实在是让人无法接受。Google最近的这篇文章就对这个问题做出了比较好的解答。它提出了一种在多任务学习中高效决定哪些任务应当划分到一组进行训练的方法,在大规模的 Taskonomy 计算机视觉数据集上,不仅可以把测试集的 loss 降低10.0%,训练速度也是之前任务分组 SOTA 的 11.6 倍

论文标题:
Efficiently Identifying Task Groupings for Multi-Task Learning

论文链接:
https://arxiv.org/abs/2109.04617

概览

总体来看,训练可以分为四个部分:

  • 首先我们用一个单独的多任务模型来把所有任务结合在一起训练

  • 其次在训练的过程中我们会计算不同任务之间的亲和度(Inter-Task Affinity)

  • 当模型过完一遍所有的训练数据并且计算出任务两两之间的亲和度之后,我们通过某种算法来对任务进行分组,使得亲和度之和最大

  • 最后我们用分组之后的任务来进行训练以及预测。

第一部分与第四部分很容易理解,下面我们来具体看一下第二部分以及第三部分。

任务间亲和度

整个算法中最最关键的概念就是这个“任务间亲和度”了。任务间亲和度(Inter-Task Affinity),直白一点的讲的话,就可以理解为:在多任务学习中,用一个值来量化一个任务 对另一个任务 的正面或者负面影响

那具体怎么衡量呢?在本文中,作者提出:用任务 对共享参数的梯度更新对另一个任务 的 loss 影响的程度 来衡量两个任务的亲和度。

形式化地表达就是:考虑任务集合 , 共享参数 ,以及任务 的参数 , 其中 对于一个batch的训练数据 , 整体的训练loss

其中 是任务 对应的loss 那么对于在训练时刻 的一个batch的训练数据 , 当我们用某个任务 的loss对共享参数 进行一次梯度更新后,得到新的共享参数

然后我们就可以用新的共享参数 , 训练数据 以及另一个任务 的参数 来计算共享参数更新之后任务 的新loss

与共享参数更新之前任务 的旧loss 进行比较,就可以得到任务 对任务 的亲和度

如果亲和度大于0,说明任务 对共享参数的此次梯度更新会降低另一个任务 的loss,对应着正面影响; 相反如果小于0,说明 对共享参数的更新会提高 的loss,对应着负面影响。

这样,我们对训练数据进行一次迭代,就可以获得最终所有任务 两两之间的亲和度

任务分组

不要忘记我们最终的目标是——把任务进行分组。在得到任务两两之间的亲和度之后,我们要怎么对任务进行分组呢?

我们先定义两个概念:

  • 目标任务(Serving-time Task):也就是最后真正要测试的任务。它是所有任务集合 的子集。

  • 任务亲和度(Task Affinity):对于某个任务 来说,其任务亲和度为 所属的组内其他所有任务对其亲和度之和。

这样,分组问题就转化为:把所有任务划分为 组,使得所有目标任务的任务亲和度之和最大。文中提出我们可以通过利用分支定界法或者0-1整数规划来解决该问题。

然而很悲伤的是,这是一个NP-hard问题。当任务数量较多时,时间复杂度会非常高。

实验结果

实验结果非常给力(TAG是本文方法),总结一下的话主要有一下两点:

  • TAG分组方法比之前分组方法的多任务学习效果更好,在CelebA上有更少的测试错误以及在Taskonomy上有更低的测试loss

  • TAG分组方法更加高效,训练速度可以是之前方法的10几甚至20多倍

总结

本文提出了一种只需要对训练数据进行一次迭代就可以计算出任务间亲和度的方法,利用该亲和度来衡量任务间的相互影响并进行任务组的划分,在多任务学习的效果以及效率上都超过了之前方法很多。作者同时也希望这篇文章可以给多任务学习中任务组的划分带来更多的关注,希望可以在这一方向上有更多的探索与发展。

思考

虽然多任务学习不管是在学术界还是工业界都已经有了比较成熟的应用,但现在多任务学习还是比较依赖于充足的先验知识,很多情况下都需要人事先判断任务之间是不是可以相互促进的。然而人的知识毕竟是有限的,所以很多情况下并不能做出很准确的判断以及划分,从而对多任务学习的性能造成负面的影响。所以如果能有一种可以简易快捷的判断几个任务是不是应该结合在一起学习的方法,相信会给多任务学习带来质的提高,它的应用也会更加的广泛与方便。

从刚才的介绍我们也可以看出,虽然本文的方法只需要对训练数据进行一次迭代就可以对任务进行分组,但复杂度还是蛮高的(亲和度计算以及组的划分),所以感觉如何把复杂度再降低一些将会是非常有前景的未来研究方向。

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

谷歌 | 多任务学习,如何挑选有效的辅助任务?只需一个公式!相关推荐

  1. 最新深度学习入门高赞教材,只需高中数学基础 | 资源

    允中 发自 凹非寺  量子位 报道 | 公众号 QbitAI 今日份知识带货,推荐一本名为Grokking Deep Learning的新教材. 书名直译,就叫<与深度学习神交>吧. 虽是 ...

  2. 2021年浅谈多任务学习

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

  3. 读文章笔记(十):多任务学习

    读文章笔记(十):多任务学习 多任务学习优点 多任务学习方法 hard parameter sharing soft parameter sharing 多任务学习改进的方向 注意事项 来源于公众号: ...

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

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

  5. 入门|一文读懂区块链“谷歌引擎”Covalent API, 无需编程实现跨链技术只需一秒

    区块链技术是可以颠覆世界的.然而,尽管区块链上数字资产出现大幅增长,但是访问详细的历史区块链数据仍是非常困难的.这番操作及其耗时且计算量大.如果主流客户对区块链产品产生兴趣,那么构建者就应该具备分析区 ...

  6. flash小黄油安卓_体验谷歌的Windows、安卓、Linux三合一系统,一个U盘足以

    「本期内容标签」 安卓 iOS 电脑 小程序 网站 游戏 教程 前段时间很火的新闻当属华为的鸿蒙系统,说的是系统将在web端.电脑端.手机端通用一套,也就是真正的全平台打通. 相信未来的系统肯定是这样 ...

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

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

  8. 【datawhale202206】pyTorch推荐系统:多任务学习 ESMMMMOE

    结论速递 多任务学习是排序模型的一种发展方式,诞生于多任务的背景.实践表明,多任务联合建模可以有效提升模型效果,因其可以:任务互助:实现隐式数据增强:学到通用表达,提高泛化能力(特别是对于一些数据不足 ...

  9. 多任务学习原理与优化

    文章目录 一.什么是多任务学习 二.为什么我们需要多任务学习 三.多任务学习模型演进 Hard shared bottom 硬共享 Soft shared bottom 软共享 软共享: MOE &a ...

最新文章

  1. 杰奇linux伪静态,常用的13个.htaccess重写URL的伪静态规则
  2. 阿里工程师总结的《MySQL 笔记高清 PDF 》 开放下载
  3. 台式计算机防盗锁怎么安装,怎样拆装防盗门锁?防盗门锁怎么进行正确安装?...
  4. ITK:在一幅图像中提取感兴趣区域ROI
  5. 如何判断一个常量是废弃常量,一个类是无用类
  6. python批量读取csv并写入_Python如何批量读取CSV文件中指定信息并写入doc文件命名中?...
  7. xp系统没有服务器时间,WinXP系统时间无法同步网络时间连时区也不显示的解决方法...
  8. spring 开发环境_设置Spring 3开发环境
  9. Delphi中的操作二进制文件的两个重要函数
  10. 【原创】源智工作流-Silverlight流程设计器
  11. linux 超好用的命令行工具
  12. 【语音识别】基于matlab GUI语音识别信号灯图像模拟控制(带面板)【含Matlab源码 757期】
  13. IMX6ULL Uboot 移植
  14. 苹果itunes软件怎么下载安装
  15. pulsesensor传感器以及STM32相关学习笔记
  16. 高精度结构光工业3D相机Mech-Eye PRO全面升级:可选蓝光/白光版本,适合中距离应用...
  17. Unity用UnityWebRequest和 BestHttp的GET和POST表单提交,与php交互
  18. STM32F103中文参考手册PDF
  19. 阴阳师最新的服务器,阴阳师跨区服务器大全 集结之境新增跨区服务器汇总详解...
  20. Python创建进程的四种方式

热门文章

  1. 转:绝对干货--WordPress自定义查询wp_query所有参数详细注释
  2. ios学习之UITabBar(标签栏)
  3. Form界面设置只读
  4. 博客堂joycode被黑掉了
  5. Presto基本概念
  6. 记一次解决问题的掉坑过程
  7. STM32项目(二) —— 车灯测试台架
  8. 计算机与环境科学,计算机在环境科学与工程方向的应用
  9. pushpop指令的操作数必须是字操作数_PLC的指令,电气人必须了解的基础内容
  10. JS面向对象——Object.defineProperty