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

a6947cf73c331355a154c2c6f37f8911.png

文 | 小伟
编 | 小轶

9715be634a9a44f07120af5375b6e3b5.png前言34dfd1fb5fa3ca45173516a4c5f2e413.png

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

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

38861467a6050f0159085f356cc0fd32.png

显而易见,我们可以直接搜索所有任务组合在一起构成的参数空间(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

9c557d9bc81e688c63b72fd25eb3d0f6.png概览a266e8e1601d80a6f47c59396f2146b8.png

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

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

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

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

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

4c0682fac38606922a78117ab16bc962.png

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

5445a4a06c6babc5e8a82761b2b466af.png任务间亲和度139a6e8ec2c7927e0e0d1521e860f1fe.png

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

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

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

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

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

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

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

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

任务分组

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

我们先定义两个概念:

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

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

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

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

ba330a4047b39f75a685197424dfc343.png实验结果8ffecfb9bd32454e4b3439918e40902d.png

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

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

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

f42d2190be25e761bdb89f1254d97b8c.png

3696430200a9ead5aad6e0a79ece0b99.png总结3e366ce35c631ad1503904a286534d31.png

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

23221a4d6fb4edbac14aa86f8ec8fcac.png思考c142d212a2d24fe5963c3b9926b0ed60.png

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

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

e97687e09d9d83eae7971739fa1933bc.png后台回复关键词【入群

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

后台回复关键词【顶会

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

41a5c29f605dc4ad8ac38ec55d68a46e.gif
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值