自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

1、简介

多任务学习是机器学习中重要的一部分,关于多任务学习的更多内容可以去看这篇文章。但是对于应用深度学习进行多任务学习会遇到一个棘手的问题,那就是我们该如何确定网络的共享部分。针对不同的任务,其最佳共享层往往存在不同,其中作者针对使用AlexNet网络分别进行图像检测、图像属性生成及图像语义分割、图像平面法向量(Surface Normal)进行多任务学习,针对两个任务,作者分别从fc8层进行共享,一直测试到两者完全不进行共享的情况。实验结果如图1所示,其中图1(b)部分是不同共享层与完全独立时的效果对比,可以看出对于任务一来说,共享部分在conv4时所能达到的效果,针对于任务二来说,在fc7层的效果最好。因此,针对于不同的多任务学习来说,一般我们需要根据任务需求设计不同的共享层,没有统一的标准。本文就针对这一问题设计了“十指绣”单元,可以通过端对端的学习来自动决定共享层。

自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

图1 

2、“十字绣”结构

这篇论文的核心就在这里,设计“十字绣”单元的思想如图2所示,通过在两个网络的特征层之间增加“十字绣”单元可以使网络自动学习到需要共享的特征。其中“十字绣”单元就是一个系数矩阵。其表达式如式(1)所示。从这个公式中可以明显看出,当自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning值为0时,说明两者没有共享的特征,相反的,当两者的值越大,说明共享部分越大。

自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

图2

自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

针对这个“十字绣”单元如何进行端对端学习呢?这里作者给了具体的计算公式:

自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

在下文中,为了方便,将自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning统称为自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning表示不同任务的权重值,自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning统称为自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning表示相同任务的权重值。

3 “十字绣”网络设计

图3是作者通过对网路添加“十字绣”单元设计的网络。

自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

图3

但是网络设计好之后,作者有针对网络提出了以下几个问题:

  (1)、如何对“十字绣”单元进行初始化,及如何设置“十字绣”单元的学习速率

作者认为初始值设置应该在[0,1]之间,此外,作者还针对初始值及学习速率的设计进行了实验,以决定如何对两者进行设计能够达到最优。

  (2)、如何对网络A和B进行初始化

如何对A、B进行初始化呢?作者在这里分别提出了两种方案,第一种就是网络全用ImageNet训练出的参数进行初始化,然后对整个“十字绣”网络进行训练。第二种是将网络针对一种任务进行微调,然后再在网络中添加“十字绣”单元再对网络进行训练。

4、 参数选取

针对3中提到的两个问题,作者分别尝试了不同的策略来对参数进行了确定。实验结果如表1所示:

表1

自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

在对于“十字绣”单元进行训练时作者发现,用来更新网络参数的学习速率相对于“十字绣”单元太过于小,无法得到好的效果。其实验结果如表2所示:

表2

自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

关于如何对网络A、B进行初始化,作者同样进行了实验,实验结果如表3所示:

表3

自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

表4展示了在自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning取不同的初始值时,最终网络各层各个通道的自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning的值的分布情况。其中自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning越大说明共享程度越大,自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning越大,说明特征的特殊性越强。

表4

自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

图4

5 实验及结果分析

作者为了验证自己方法的有效性,分别在NYU-v2数据集进行了图像语义分割及图片平面法向量的实验,在PASCAL VOC 2008数据集上进行了物体检测及属性预测的实验。

为了对比自己方法的有效性,作者分别设计了单任务网络、结合两个单任务网络(文中称为“ensemble”)、多任务网络(如图1中那样尝试在各个特征层共享特征)进行了实验,其中针对平面法向量及图像语义分割的实验结果如表5所示:

表5

自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

从表5中可以看出,使用“十字绣”单元的网络能够在两个任务上均能得到较好的结果。此外,作者分析得到在图像语义分割任务中,会有严重的数据匮乏问题。如图5中黑线所示,wall、floor的数据数量远超出其余的类别数,其中的蓝色柱状表示采用“十字绣”单元的多任务学习相对于单任务学习在效果上的增益,从图中可以看出,数量越少的类别所获得增益越多。

自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

图5

基于图像检测及属性预测的实验结果及增益情况分别如表6及图6所示:

表6

自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

自动寻找如何共享特征层的“十字绣”网络:Cross-stitch Networks for Multi-task Learning

图6

6 总结

虽然本文作者提到他们的方法相对于传统方法不需要去依次尝试如何选取所要共享的特征层,但是增加的“十字绣”单元同样带来了很多麻烦的东西,例如如何进行初始化,如何设置学习速率。虽然最终的实验结果表明,使用该方法会对多种任务的性能有一定的提升,但还是感觉意义不大。