关于多任务学习(MTL),我们应该知道的事

概念相关

1. Multi-task learning

关于多任务学习的定义并没有统一的标准,这里引用《A survey on multi-task learning》中的定义:

关于多任务学习(MTL),我们应该知道的事

与标准的单任务相比,在学习共享表示的同时训练多个任务有两个主要挑战:

  • Loss Function(how to balance tasks):多任务学习的损失函数,对每个任务的损失进行权重分配,在这个过程中,必须保证所有任务同等重要,而不能让简单任务主导整个训练过程。手动的设置权重是低效而且不是最优的,因此,自动的学习这些权重或者设计一个对所有权重具有鲁棒性的网络是十分必要和重要的。

 

  • Network Architecture(how to share):一个高效的多任务网络结构,必须同时兼顾特征共享部分和任务特定部分,既需要学习任务间的泛化表示(避免过拟合),也需要学习每个任务独有的特征(避免欠拟合)。

2. Auxiliary Learning(辅助学习):

除了同时学习多个任务,在有些情况下,我们的关注点只是多任务中的一个或者几个任务的表现。为了更好的理解任务之间的相关性,我们可以通过设置带有各种属性的辅助任务来进行。辅助任务的目的就是协助我们找到一个更强大,更具有鲁棒性的特征表示,最终让主要任务受益。关于辅助任务的定义,我们可以根据上文的多任务定义进行延伸,如下表示:

关于多任务学习(MTL),我们应该知道的事

 

3. Multi-Task Framework Design

这一章节我将以问答的形式进行,通过提出问题,解决问题,让大家更容易理解多任务的框架设计方法


Q:How to properly balance different types of tasks such that training multi-task networks will not be dominated by the easier task(s)?

分析:第一个问题是,在设计多任务网路过程中,我们如何平衡不同类型的任务,避免在训练过程中,整个网络被简单任务主导,导致任务之间的性能差异巨大。这就涉及到为不同任务的loss function赋上不同的权重,将不同task之间的loss统一成一个损失函数,如果只是简单的将不同任务的loss相加,这样会造成最终模型在有些任务上表现很好,在有的任务上大失水准。背后的原因是不同任务的不同损失函数尺度有很大的差异,因此需要考虑用权值将每个损失函数的尺度统一。

A:针对这个问题,最新的解决办法是cvpr2018的一个工作《Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics》,这篇文章提出,将不同的loss拉到统一尺度下,这样就容易统一,具体的办法就是利用同方差的不确定性,将不确定性作为噪声,进行训练,详细的讲解可以看我专栏文章:

路一直都在:利用不确定性来衡量多任务学习中的损失函数​zhuanlan.zhihu.com关于多任务学习(MTL),我们应该知道的事

这里在简单的讲一下同方差的不确定性(Homoscedastic Uncertainty):属于偶然不确定性,这种不确定性捕捉了不同任务之间的相关性置信度,这种不确定性可以作为不同任务loss赋值的衡量标准。

这里,引用一下相关文章,我会在文末附上参考,若侵权,请与我联系

关于多任务学习(MTL),我们应该知道的事

其中,Fw是神经网络的输出,在一个有K个任务的模型中,似然估计可以表示为通过概率累乘得到,则极大似然估计可以写成:

关于多任务学习(MTL),我们应该知道的事

其中,σ类似神经网络的参数w,都是可以通过反向传播进行更新,表示的是每个任务输出的置信度。分析上式可知,如果σ增加,相对应的任务loss的权重就会减小,这样就实现了权重的动态规划。


Q:How to build a multi-task learning architecture which is easy to train,parameter-efficient and robust to task weighting?

分析:如何构建一个统一,易训练,高鲁棒的多任务网络,有多种思想,但是,一个优秀的多任务网络应该具备:(1)特征共享部分和任务特定部分都能自动学习(2)对损失函数权重的选择上更robust

A:如下图所示,关于特征共享表示,一般有两种方法,Hard-parameter sharing和soft-parameter-sharing。hard-parameter sharing有一组相同的特征共享层,这种设计大大减少了过拟合的风险;soft-parameter sharing每一个任务都有自己的特征参数和每个子任务之间的约束,这种设计更robust。

关于多任务学习(MTL),我们应该知道的事

当下最主流的框架都是两种框架的结合,通过结合,能够找到特征共享部分和特定任务部分很好的协调,下面介绍常见的多任务网络的结构设计:

  • Fusion Network(融合网络)

Fusion Network是一种通用的特征学习网络,每个任务的上层共享表示是通过学习特定任务的参数,将所有任务的低层特征表示通过线性组合表示出来。代表的网络结构有“Cross-Stitch Network”十字绣网络,了解更多关于该网络,可以去看论文原文。(论文解读可以看我的专栏文章,点我跳转

十字绣网络结构如下图所示,十字绣网络只在池化层或者全连接层之后加上十字绣单元

关于多任务学习(MTL),我们应该知道的事

计算过程可以用下式表示:

关于多任务学习(MTL),我们应该知道的事

可以通过设置AB和BA的值控制共享的程度。

参考文章:

https://pdfs.semanticscholar.org/56de/9b050c982c93d8c5439bef5e7dffcfaccf95.pdf​pdfs.semanticscholar.org