Press "Enter" to skip to content

多任务学习,如何设计一个更好的参数共享机制?| AAAI 2020

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

作者 | 孙天祥

 

编辑 | 刘萍

 

原文标题: 稀疏共享: 当多任务学习遇见彩票假设

 

本文介绍了复旦大学邱锡鹏团队在AAAI 2020 上录用的一篇关于多任务学习的工作:《Learning Sparse Sharing: Architectures for Mltiple Tasks》,这篇文章提出了一种 新的参数共享机制: 稀疏共享。这种共享机制能够同时解决目前主流的三种共享机制(硬共享、软共享、分层共享)的限制问题。

 

目前这篇文章已经开源。

 

论文链接: https://arxiv.org/abs/1911.0503 4

 

代码链接:https://github.com/choosewhatulike/sparse-sharing

 

多任务学习(Multi-Task Learning)是一种联合多个任务同时学习来增强模型表示和泛化能力的一种手段, 目前大都通过参数共享来实现多任务学习 。因此,很多多任务学习的工作都集中在寻找更好的参数共享机制上。

 

已有的工作提出了很多参数共享策略 ,其中使用的较多的有硬共享,软共享,分层共享,另外还有一些比较新颖的值得探索的共享机制,比如梯度共享,元共享等等。这里简要介绍使用较多的三种共享机制(硬共享、软共享、分层共享)来引出本文的动机。

 

硬共享 是目前应用最为广泛的共享机制,它把多个任务的数据表示嵌入到同一个语义空间中,再为每个任务使用一任务特定层提取任务特定表示。 硬共享实现起来非常简单,适合处理有较强相关性的任务,但遇到弱相关任务时常常表现很差。

 

软共享 为每个任务都学习一个网络,但每个任务的网络都可以访问其他任务对应网络中的信息,例如表示、梯度等。 软共享机制非常灵活,不需要对任务相关性做任何假设,但是由于为每个任务分配一个网络,常常需要增加很多参数。

 

分层共享 是在网络的低层做较简单的任务,在高层做较困难的任务。 分层共享比硬共享要更灵活,同时所需的参数又比软共享少,但是为多个任务设计高效的分层结构依赖专家经验。

 

本文提出了一种新的参数共享机制,稀疏共享(sparse sharing),试图同时处理上述三个限制。

 

目前常用的参数共享机制和本文提出的稀疏共享机制

 

给定一个基网络和多个任务的数据,稀疏共享可以为每个任务从基网络中抽取出一个对应的子网络来处理该任务,这些子网络部分重叠,我们的算法可以为强相关的任务抽取出相似的子网络(具有较高的参数重叠率),为弱相关的任务抽取出为差异较大的子网络(具有较低的参数重叠率)。得到这些子网络后,再使用多个任务的数据联合训练。

 

 

方   法

 

本文算法分为两个阶段:(a) 为每个任务生成子网络;(b) 多任务联合训练。

 

1、为每个任务生成子网络

 

这里生成子网络算法使用了获得ICLR’2019最佳论文奖的彩票假设(The Lottery Ticket Hypothesis)中提出的迭代数量级剪枝方法。

 

假设基网络参数为  ,则任务  对应的子网络的参数可以表示为  ,其中   表示元素为 0 或 1 的Mask矩阵。对每个任务独立的执行迭代剪枝,得到每个任务对应的Mask矩阵,也就得到了每个任务的子网络。

 

值得注意的是,当所有任务的Mask矩阵  时,稀疏共享等价于硬共享;考虑两个任务,任务1的Mask矩阵在网络的第一层为全 1,第二层为全 0,即  ,任务2的Mask矩阵为全1,即  ,则任务1和任务2构成了分层共享架构。

 

因此,硬共享和分层共享都可以视作稀疏共享的特例。

 

为每个任务生成子网络

 

上面的算法为每个任务都生成了    个子网络,现在需要从中挑选出一个子网络作为最后多任务训练使用的子网络。这里采取了一种简单的启发式做法,即选择在验证集上表现最好的子网络。

 

 

2、多任务联合训练

 

在得到每个任务的子网络之后,将其合并也就得到了多任务稀疏共享结构,接着使用多个任务的数据进行联合训练:

 

1)随机挑选一个任务 ;

 

2)为任务 随机采样一个batch数据;

 

3)将该batch数据输入到任务 对应的子网络中;

 

4)使用该batch数据的梯度更新子网络的参数;

 

5)回到 1)。

 

虽然训练每个任务时都只用到了其对应的子网络,但子网络的一部分参数可能被多个任务同时共享,因此这部分参数有机会被多个任务的训练数据更新。这样,相似的任务倾向于更新相同的部分参数,使其充分享受多任务学习的收益,同时差异较大的任务倾向于更新互相隔离的部分参数,以避免任务之间互相伤害。

 

     学习多任务稀疏共享架构

 

 

实验及分析

 

本文在三个序列标注任务(POS tagging、NER、Chunking)上进行了实验,结果表明稀疏共享超越了单任务学习、硬共享、软共享和分层共享的效果,同时所需参数量最少。

 

     实验结果

 

值得注意的是,多任务学习并不总能带来收益,有时联合学习多个任务会对其中某个任务带来性能损失,例如上表中阴影部分的数据。该现象在迁移学习和多任务学习中广泛存在,常被称为 负迁移(negative transfer) 。

 

然而, 在本文的实验中,稀疏共享并没有出现负迁移现象 。为了进一步探索稀疏共享在避免负迁移方面的能力,本文又构造了一个弱相关多任务学习的场景,该场景包含两个任务:

 

真实的NER任务;

 

构造的假任务, 位置预测(position prediction, PP),即让句子中的每个单词预测其自身在句中位置。

 

NER和PP两个任务并无太大相关性,结果表明硬共享框架下同时学习两个任务严重伤害的NER任务的性能,而稀疏共享则由于参数隔离避免了负迁移。

 

      稀疏共享有助于避免负迁移

 

另外,本文提供了一种新的衡量任务相关性的指标:参数重叠率(overlap ratio, OR)。怎幺验证OR反映了任务相关性呢?

 

本文借助了一个中间工具: 硬共享 。硬共享非常适合处理强相关任务,通常任务相关性越弱硬共享效果越差。

 

直觉上,在任务相关性越弱的场景下,稀疏共享相比硬共享的提升越多,因此我们可以考察稀疏共享相比硬共享的提升与OR是否正相关来验证OR是否可以反映任务相关性。为此,把上述三个任务两两组合得到三个多任务学习场景,结果如下:

 

     参数重叠率反映了任务相关性

 

 

总   结

 

目前得到稀疏共享架构的方法还存在一些问题,比如整个过程分为两阶段因此相比其他共享模式需要的时间更久,但这篇文章提出的目的主要是提出并验证稀疏共享模式的可行性,而非具体的架构学习方法。我们正在,也欢迎其他研究者探索更高效的端到端的稀疏分享架构学习方法。

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注