介绍一下我们最近在AAAI-2020(oral)的一篇工作。
论文链接:https://arxiv.org/abs/1911.05034
代码链接:https://github.com/choosewhatulike/sparse-sharing
一、动机
多任务学习(Multi-Task Learning)是一种联合多个任务同时学习来增强模型表示和泛化能力的一种手段,目前大都通过参数共享来实现多任务学习。因此,很多多任务学习的工作都集中在寻找更好的参数共享机制上。已有的工作提出了很多参数共享策略,其中使用的较多的有硬共享,软共享,分层共享,另外还有一些比较新颖的值得探索的共享机制,比如梯度共享,元共享等等。这里简要介绍使用较多的三种共享机制(硬共享、软共享、分层共享)来引出本文的动机。
(a) 硬共享是目前应用最为广泛的共享机制,它把多个任务的数据表示嵌入到同一个语义空间中,再为每个任务使用一任务特定层提取任务特定表示。硬共享实现起来非常简单,适合处理有较强相关性的任务,但遇到弱相关任务时常常表现很差。(b) 软共享为每个任务都学习一个网络,但每个任务的网络都可以访问其他任务对应网络中的信息,例如表示、梯度等。软共享机制非常灵活,不需要对任务相关性做任何假设,但是由于为每个任务分配一个网络,常常需要增加很多参数。(c) 分层共享是在网络的低层做较简单的任务,在高层做较困难的任务。分层共享比硬共享要更灵活,同时所需的参数又比软共享少,但是为多个任务设计高效的分层结构依赖专家经验。本文提出了一种新的参数共享机制,稀疏共享(sparse sharing),试图同时处理上述三个限制。
给定一个基网络和多个任务的数据,稀疏共享可以为每个任务从基网络中抽取出一个对应的子网络来处理该任务,这些子网络部分重叠,我们的算法可以为强相关的任务抽取出相似的子网络(具有较高的参数重叠率),为弱相关的任务抽取出为差异较大的子网络(具有较低的参数重叠率)。得到这些子网络后,再使用多个任务的数据联合训练。
二、方法
本文提出的算法可以自动地学习多个任务的稀疏共享结构。因为每个任务的子网络是使用该任务的数据集学习出来的,可以认为子网络的结构一定程度上编码了该任务的inductive bias。该算法主要分为两个阶段:(a) 为每个任务生成子网络;(b) 多任务联合训练。
为每个任务生成子网络
这里生成子网络算法使用了获得ICLR'2019最佳论文奖的彩票假设(The Lottery Ticket Hypothesis)中提出的迭代数量级剪枝方法。假设基网络参数为
上面的算法为每个任务都生成了
多任务联合训练
在得到每个任务的子网络之后,将其合并也就得到了多任务稀疏共享结构,接着使用多个任务的数据进行联合训练:
- 随机挑选一个任务
- 为任务
随机采样一个batch数据
- 将该batch数据输入到任务
对应的子网络中
- 使用该batch数据的梯度更新子网络的参数
- 回到1
虽然训练每个任务时都只用到了其对应的子网络,但子网络的一部分参数可能被多个任务同时共享,因此这部分参数有机会被多个任务的训练数据更新。这样,相似的任务倾向于更新相同的部分参数,使其充分享受多任务学习的收益,同时差异较大的任务倾向于更新互相隔离的部分参数,以避免任务之间互相伤害。
三、实验及分析
本文在三个序列标注任务(POS tagging、NER、Chunking)上进行了实验,结果表明稀疏共享超越了单任务学习、硬共享、软共享和分层共享的效果,同时所需参数量最少。
值得注意的是,多任务学习并不总能带来收益,有时联合学习多个任务会对其中某个任务带来性能损失,例如上表中阴影部分的数据。该现象在迁移学习和多任务学习中广泛存在,常被称为负迁移(negative transfer)。然而,在本文的实验中,稀疏共享并没有出现负迁移现象。为了进一步探索稀疏共享在避免负迁移方面的能力,本文又构造了一个弱相关多任务学习的场景,该场景包含两个任务:(a) 真实的NER任务;(b) 构造的假任务,位置预测(position prediction, PP),即让句子中的每个单词预测其自身在句中位置。NER和PP两个任务并无太大相关性,结果表明硬共享框架下同时学习两个任务严重伤害的NER任务的性能,而稀疏共享则由于参数隔离避免了负迁移。
另外,本文提供了一种新的衡量任务相关性的指标:参数重叠率(overlap ratio, OR)。怎么验证OR反映了任务相关性呢?本文借助了一个中间工具:硬共享。硬共享非常适合处理强相关任务,通常任务相关性越弱硬共享效果越差。直觉上,在任务相关性越弱的场景下,稀疏共享相比硬共享的提升越多,因此我们可以考察稀疏共享相比硬共享的提升与OR是否正相关来验证OR是否可以反映任务相关性。为此,把上述三个任务两两组合得到三个多任务学习场景,结果如下:
四、总结
目前得到稀疏共享架构的方法还存在一些问题,比如整个过程分为两阶段因此相比其他共享模式需要的时间更久,但这篇文章提出的目的主要是提出并验证稀疏共享模式的可行性,而非具体的架构学习方法。我们正在,也欢迎其他研究者探索更高效的端到端的稀疏分享架构学习方法。
致谢
感谢云帆 @嘿嘿吼吼 贡献了大量代码把这个idea调work,感谢刘博 @刘鹏飞 提出的关于实验设计的非常有建设性的意见,感谢邱老师 @邱锡鹏 的悉心指导!