译者 | 中国海洋大学李杰
出品 | AI科技大本营(ID:rgznai100)
摘要
传统的多任务(MTL)学习方法依赖于架构调整和大型可训练参数集来联合优化多个任务。但是,随着任务数的增多,体系结构调整和资源需求的复杂性也随之增加。在本文中,作者引入了一种新方法,该方法在卷积激活层上应用条件特征的智能转换,使模型能够成功地执行多个任务。为了和常规的多任务学习做区分,本文引入了Many Task Learning (MaTL)作为特例。MaTL的特殊之处在于它指代一个模型能完成超过20个任务。伴随MaTL任务,作者引入了任务路由(TR)的方法并将其封装在一个称为任务路由层(TRL)的层中,使得一个模型能适合数百个分类任务。
引言
- 多任务的定义和利弊
不管是在我们日常生活还是计算机科学中,多任务是无处不在的。多任务有利于提升效率,促进资源的合理利用。在计算机科学中,MTL的定义是这样的:MTL是一种学习范式,它通过同时优化多个任务来提高机器学习模型的泛化性能。与多任务相对的,是单任务(STL),也就是一个模型只对应一种任务。为了获得更好的性能表现,STL通常包含大量的参数,这些参数其实是具有适用多个任务能力的,而MTL的任务,正是利用这种参数的额外能力。
多任务又是也是一柄双刃剑,同时执行的任务可以通过共享模型在训练期间产生针对子任务的知识,这种知识共享可能会帮助或阻碍其他任务的执行。举个例子,在一个鸟类数据集中,训练一个模型来识别白色的头部羽毛和白色的腹部有助于对海鸥的识别。但是我们不能指望鸟类大小探测器来帮助海鸥分类,因为这种鸟在自然界中有许多大小,所以大小与它的种类无关。
- 多任务中的组合问题
与其他组合问题一样,无法确认MTL中任务和资源的哪种组合方式是最优的。而寻找最优组合的过程是低效且繁琐的,尤其是随着神经网络的宽度,深度或者基数不断增加,直接导致了复杂度成比例增加。本文受随机搜索算法的启发,通过调整模型中每个子任务的数据流向,针对最优组合问题执行一个结构化的随机解决方案。如下图所示,通过将每个单元分配给可以使用它的子任务,为每个子任务创建专门的子网络。此外,作者还展示了通过参数空间为任务提供可选路由,增强了特性的健壮性和可伸缩性,同时提高了预测性能。
在训练过程中,每个任务的知识会对其他任务造成影响,这种影响可能是积极的,也可能是消极的。MTL中一个难题就是解决联合学习任务之间的负面影响。为了解决这个问题,当前大部分的方案是利用先验知识,但是先验知识通常存在获取困难的问题,作者通过引入任务路由机制,减轻了获取先验知识的问题。任务路由机制,是指允许任务具有独立于模型的数据流向。这样,通过执行一个结构化的随机解决方案,允许任务形成对自己有积极影响的共享方式。
在实验中,通过逐步增加单个模型所执行的任务数量,验证了路由机制的有效性。
背景知识
多任务学习( MTL)是一种旨在提高机器学习模型对多个任务进行优化的泛化性能的学习范式。还可以将MTL描述为一种利用相关任务的训练信号中包含的领域特定信息来改进泛化属性的机制。因此,在MTL中,我们的目标是联合执行多个任务,并改进每个任务的训练学习过程。MTL可以分为对称(symmetric)和非对称(asymmetric)两种。
非对称(asymmetric)的MTL有明确的主任务和辅助任务。依靠辅助任务提供的经验知识,帮助完成,提升主任务的性能。这种思想与迁移学习有相似之处,一个最显著的区别是,MTL中辅助任务和主任务是同时学习的,而在迁移学习中,不同任务的学习是独立的。
常见的辅助任务类型
对称(Symmetric)的MTL旨在同时提高多个任务的性能表现。这种方式也是MTL的主流,利用任务任务之间的关联性这一事实,在统一表示下联合学习,可以最大限度地利用任务之间的知识,使得所有任务都有所增益。但是它们很容易受到噪声和异常值的影响,一旦引入,性能会急剧下降。这是由于特征鲁棒性的欠缺。
在本文中,作者解决了特征健壮性问题,从训练过程开始就随机分配共享结构,并通过模型强制任务使用数据流的替代路径。
不论是对称还是非对称的MTL结构,都很依靠先验知识来进行架构设计,任务分组,特征共享选择等。如果这种先验知识是存在的,很明显对MTL是有益的,但如果这种先验知识不存在或者难以获得,对有些MTL性能是一个巨大打击,也会阻碍MTL在实际应用中的落地。因此,作者认为我们应该着眼于没有先验知识情况下的MTL模型。在这一方向的代表工作有几个,如自适应的多任务特征共享网络,捕获任务相关性并创建共享结构的进化算法等。但是这些方法在如何定义、构造或初始化模型方面,大多有严格的约束。本文提出了一种适用于任何深度MTL模型而不需要结构调整的方法,因为封装了分层参数空间。通过控制数据流而不是结构,可以不影响底层的模型行为,这提升了模型的可扩展性。
任务路由(Task Routing)
MTL中,硬参数共享是主流。硬参数共享是指,将MTL划分为特征共享部分(task-shared)和特定任务的特征(task-specific)两部分。其中,特征共享部分,是对所有任务共享的特征,特定任务特征部分是针对每个子任务,提取对自己有帮助的特征表示。
MTL中的硬参数共享
本文的方法使模型卷积层中的单元在训练和测试时具有一致的共享或特定于任务的角色。具体实现方式是通过在卷积激活层之前应用一个基于通道的,特定于某个子任务的二进制掩码(binary mask)来实现这一行为,并将下一层的输入限制为那些与mask相乘后非零的channel。
如下图所示,对一个卷积层(白色通道)的输出进行如下操作:当前激活的任务(task 3)用于选择mask(亮绿色为1,灰色为0),元素跨通道相乘后,剩下的元素为亮绿色,空通道为棕色透明。也就得到了基于某个子任务的特征。
因为激活流向并不遵循它的常规路线,即它已经被重新路由到另一个备选路线,所以将此方法称为任务路由(TR),对应的层命名为任务路由层(TRL)。通过将TRL应用于网络,能够在任务之间实现单元重用,并增加可以使用单个模型执行的任务的数量。
那么每个任务的mask是怎么生成的呢?实际上,mask是在模型实例化时随机生成的,并在训练过程中保持不变。这些mask需要使用一个超参数σ进行预先定义,σ的含义是一个共享参数比,它定义了有多少比例的单元是task-specific的,有多少比例的单元是任务间共享的。这个比例的倒数决定了有多少个单元是无效的。基于此,共享参数比能使我们探索完整的空间共享可能性,而调整的代价只是一个简单的超参数大小。如果σ是0,意味着共享参数的比是0,说明整个训练过程中没有共享单元,每个任务都有完全独立的网络;相反,如果σ是1,意味着所有的单元都是共享的,构成一个经典的全共享MTL结构。
- 任务路由中Mask的创建
通过上一节的介绍,我们知道任务路由是通过binary mask对卷积层中的单元激活进行特征转换来完成的。由于本文提出的模型没有任何先验知识加入,因此mask的创建是在模型实例化时随机产生的。在训练和测试期间,由于mask是固定的,不参与训练的,因此产生的随机结构是持久性的。这种不可变的mask是非常必要且有效的,随着任务数的增加,可能的共享策略空间非常大。通过从训练开始固定共享策略,该模型可以集中于训练健壮的,特定于子任务的共享单元。
- 任务路由层(TRL)
本文将任务路由封装到任务路由层中,在任务路由层中包含一个特定于子任务的二值mask。对于任务A,定义输入为 X->[CxHxW],其中,C为一个通道,也就是本文中的一个单元,H,W分别是单元的高和宽;定义它的二值mask MA,那么输入X经过TRL层后,会进行下式的计算:
其中,⊙表示element-wise multiplication accross channel(跨通道的元素相乘),通过公式(1)完成了一个特征转化过程,得到一个新的输出,然后将其传递到下一个卷积块。下图是传统卷积块和带有TRL的卷积块的比较,可以看到,TRL可以很简单的嵌入到现有卷积结构中。
在前向传递过程中,一个单一的专门的子网被激活,称为激活任务A的子网。这就是依赖为TRLs设置激活任务来实现的。在前向传播过程中,需要从任务池中随机抽样一个任务。由于遍历数据集所需的迭代次数通常远远高于任务的数量,因此在一个epoch内某个任务得不到优化的几率非常小。随着训练过程进行多个epoch,这种几率更会减少。即使我们认为某个任务在一个epoch中没有被优化过,这也很容易被部分共享单元的其他任务的优化所补偿。
- 训练流程
训练流程如下表所示,在训练过程中,每一个mini-batch,都会更换当前的激活任务。
我们可以把Xtrain看做是一个epoch中的训练数据,对于其中每一个batch的feature map X,从任务池中抽样出一个任务A,设置为当前激活任务,然后将X继续前向传递。设置当前激活任务是框架中的一个全局更改,因此任务路由工作流不会影响已有的的传递和训练。这个属性作为一个全局变量,激活任务影响模型中所有在TRL中应用的mask。
在输入的前向传递中,流程如下,首先对于选出的当前激活任务A,得到A的mask,应用上文中的公式1,将mask与X进行跨通道的元素相乘,得到新的输出。
相关实验
在模型中的每个卷积层之后附加TRL,并在模型实例化时随机初始化路由映射。
- 在不同分类数据集上的实验
如下表,在FashionMNIST, CIFAR-10, Zappos50K and CelebA (10 and 40 Tasks)五个数据集上进行分类任务实验。σ就是前文中介绍的共享参数比,范围为[0,1],当σ等于0时完全不共享,当σ等于1时,就是传统的硬参数共享。所有数据集的总体最佳执行方法以灰色突出显示,每个数据集的最佳方法以粗体显示。可以看到,σ的引入,确实提升了性能,而且是在不同数据集上都证明有效。
结论
本文提出了一种让单一模型有效的执行大量分类任务。这种可扩展的MTL技术,在不需要先验知识的情况下,利用任务间的知识可转移性,通过对卷积层的输出进行特征转化,使得单模型适应大量不同的分类任务。
本文提出的方法的核心是任务路由层(TRL),该层封装了任务路由,只需要很少的工作和计算开销,就能够很轻易的嵌入到当前的卷积结构中。TRL包含一个task specific mask,允许单个模型在其参数空间内适应多个任务,通过将输入进行TR操作,得到了针对每个子任务的输出,随后为每个子任务训练专门的子网络,子网络的维数由共享参数比决定。共享参数比作为一个超参数,提供了一种简单的方法来探索该模型所提供的所有共享可能性。
综上,本文的主要贡献在于:
(1)提出了一种可扩展的MTL技术,在不需要先验知识的情况下,利用不同任务间的知识可转移性,使单一模型同时适应大量不同分类任务。
(2)能够在单个MTL模型中对多个子架构进行结构化的确定性抽样。
(3)引入参数共享比σ,只需要很少的参数量和消耗,就能探索所有共享方式和组合。
(4)该方法不仅对传统的MTL有提升,对于任务数量特别多的分类,也有性能提升。本文将方法应用于总共15个数据集,以证明它的有效性和高效性。
Paper link:
https://arxiv.org/abs/1903.12117
Code link:
https://github.com/gstrezoski/TaskRouting
(*本文为AI科技大本营投稿文章,转载请微信联系 1092722531)