深度学习多任务学习中共享层确定方法研究:以AlexNet网络为例
引出主题
多任务学习是机器学习的重要组成部分,但是将深度学习应用于多任务学习时遇到的一个棘手问题是我们如何确定网络的共享部分。对于不同的任务,最优的共享层往往是不同的。
本文使用AlexNet网络进行图像检测、图像属性生成、图像语义分割、图像平面法向量生成(Surface Normal)等多任务学习。对于这两个任务,作者从fc8层开始共享,并进行测试,直到两者根本不共享。
▲图1
实验结果如图1所示。图1(b)是不同共享层完全独立时的效果对比。可以看出,对于任务一来说,共享部分在conv4中能够达到的效果对于任务二来说是一样的。一般来说,fc7层效果最好。
另外,对于不同的多任务学习,我们需要根据任务需求设计不同的共享层,并没有统一的标准。因此,本文设计了一个“十字绣”单元来解决这个问题,它通过端到端学习自动确定共享层。
“十字绣”单元及网络设计
十字绣单元
本文的核心就在这里。 “十字绣”单元的设计思路如图2所示,通过在两个网络的特征层之间添加“十字绣”单元,网络可以自动学习需要共享的特征。
▲图2
“十字绣”单元是一个系数矩阵。其表达式如式(1)所示。
如何对“十字绣”这个单元进行端到端的学习?作者给出了具体的计算公式:
下面为了方便起见,将αAB和αBA统称为αD来表示不同任务的权重值,αAA和αBB统称为αS来表示同一任务的权重值。
“十字绣”网页设计
图3是作者在网络中添加“十字绣”单元设计的网络。
▲图3
网络设计完成后,作者对网络提出了以下问题:
1、如何初始化“十字绣”单元以及如何设置“十字绣”单元的学习率?
作者认为初始值设置应该在[0,1]之间。另外,作者还对初始值和学习率的设计进行了实验,以确定如何设计两者才能达到最优的效果。
2. 如何初始化网络A和B?
如何初始化A和B?作者提出了两种解决方案。首先是用ImageNet训练的所有参数初始化网络,然后训练整个“十字绣”网络。第二种是针对某项任务对网络进行微调,然后添加“十字绣”单元并训练网络。
参数选择
针对2.2中提到的两个问题,作者尝试了不同的参数选择策略。实验结果如表1所示:
▲表1
在训练“Cross-Stitch”单元时,作者发现用于更新网络参数的学习率相比“Cross-Stitch”单元太小,从而无法获得好的结果。实验结果如表2所示:
▲表2
关于如何初始化网络A和B,作者也进行了实验,实验结果如表3所示:
▲表3
表4给出了当αD和αS取不同初始值时,最终网络各层各通道的αD和αS值的分布情况。 αD越大表示共享程度越大,αS越大表示特征的特异性越强。
▲表4
实验及结果分析
为了验证该算法的有效性,作者在NYU-v2数据集上进行了图像语义分割和图像平面法向量生成实验,在PASCAL VOC 2008数据集上进行了物体检测和属性预测实验。
作者对单任务网络、结合两个单任务的网络(文中称为“ensemble”)和多任务网络(试图共享每个特征层中的特征如图1所示)进行了实验。平面法向量生成和图像语义分割的实验结果如表5所示:
▲表5
从表5可以看出,使用“十字绣”单元的网络在这两项任务上都能取得更好的结果。另外,作者分析,图像语义分割任务中数据严重缺乏。如图5中的黑线所示,墙壁和地板的数据数量远远超过其他类别的数量。其中,蓝色一栏表示使用“十字绣”单元的多任务学习相对于单任务学习效果的增益。从图中可以看出,类别数量越少,增益越大。
▲图5
图像检测和属性预测的实验结果和增益分别如表6和图6所示:
总结与分析
虽然本文作者提到,他们的方法相比传统方法不需要逐次尝试选择要共享的特征层,但是添加的“十字绣”单元也带来了很多麻烦的事情,比如如何初始化以及如何设置学习率。最终的实验结果表明,使用该方法可以提高多任务学习的性能。