您现在的位置是:首页 > 正文

深度神经网络中的多任务学习研究综述

2024-01-30 21:53:20阅读 0

深度神经网络中的多任务学习研究综述


多任务学习

在机器学习或者深度学习中,都有一个任务目标,例如猫狗分类准确率、回归预测损失最小化等,为了达到的目标,通常都会训练一个单一的(大)模型或者一系列模型(集成学习),然后根据的目标不断的对模型进行调优,直到达到目标。

这种方式一般能够满足的需求,但这种方式让专注于单一的任务目标,可能忽略了一些相关的信息,而这些信息可能会促使更容易甚至达到更优的目标值。

换句话就是,通过相关任务之间的共享表示,让的模型对原始任务具有更好的泛化性能,一般具有多个任务损失函数优化的,都可以称作是多任务学习,通常的表现形式是,主任务结合一个或多个辅助任务。

对于深度学习而言,往往数据中都包含一些噪声、干扰数据,不同的任务的数据往往具有不同的噪声模式,同时进行多个任务的学习能够平均这些噪声,使得模型得到更好的表示。

同时,在多任务学习模式,不同的任务之间往往是相关的但不完全相同,这就导致在不同任务的学习上模型关注的特征是不一样的,例如特征集合F1对于任务A是有效的,但对于任务B而言有效的特征集是F2,这就要求模型关注那些具有普遍泛化能力的特征。

深度学习的两种方法


硬参数共享

硬参数共享是神经网络中最常用的 MTL 方法。形式上,是通过在所有任务之间共享隐藏层,同时对于不同任务制定不同的输出层。

在这里插入图片描述

硬参数共享理论上能够降低过拟合的风险,因为同时学习的任务越多,模型就越需要找到一个能够捕获所有任务的通用表示,那么对单一任务过拟合的概率也就越小。

软参数共享

在软参数共享中,每个任务都有自己的模型和参数。然后调整模型参数之间的距离,使得不同模型之间参数尽可能的相似,也就是参数之间的距离最小化,常见的方式是正则化,例如L1/L2正则。

在这里插入图片描述

多任务学习表现形式


对于多任务学习,一般对模型参数进行稀疏性前提假设,即所有的任务有一个共同的特征子集。

假定有T个task,对于每个任务t,有一个模型 m t m_{t} mt,对应 d d d维参数 a t a_{t} at,表示为参数向量形式为 a t = [ a 1 , t , … a d , t ] T a_{t} =\left [ a_{1,t},\dots a_{d,t} \right ] ^{T} at=[a1,t,ad,t]T,所有的参数向量 a 1 , … a t a_{1},\dots a_{t} a1,at构成了多任务学习的参数矩阵 A ∈ R d × T A\in R^{d\times T} ARd×T。参数矩阵 A A A中的第 i i i a i , . a_{i,.} ai,.,代表每个模型的第 i i i个特征, A A A的第 j j j a . , j a_{.,j} a.,j代表了第 j j j个模型的所有参数。根据稀疏性假设,这意味着除了少数几行之外的所有行都是0。为了能够满足这个假设,一般多任务方法都使用了L1正则。

在单任务学习中,l1正则是在具体任务 t t t的参数向量 a t a_{t} at上计算的,对于MTL而言,L1正则是在参数矩阵 A A A上计算的。为了做到这一点,首先计算一个每行 a i a_{i} ai的范数 l q l_{q} lq,该行包含所有任务的第 i i i个特征,产生一个向量 b = [ ∣ a 1 ∣ q … ∣ a d ∣ q ] ∈ R d b=[|a_{1}|_{q}\dots |a_{d}|_{q}]\in R^{d} b=[a1qadq]Rd,然后计算这个向量的 l 1 l_{1} l1范数,这会导致除了少量特征值外,其他都趋于0

正如所看到的,根据希望在每一行上放置什么约束,可以使用不同的 l q l_{q} lq范数。通常,将这些混合范数约束称为 l 1 / l q l_{1}/l_{q} l1/lq。这也被称为块稀疏正则化,因为它们导致参数矩阵A的整行被设置为0。

尽管这种块稀疏正则化在直观上是合理的,但它非常依赖于各个任务之间共享特性的程度。如果特征没有太多的重叠, l 1 / l q l_{1}/l_{q} l1/lq正则化可能会非常的糟糕。

从这点看,多任务学习不是万能的,在应用多任务学习前,应尽可能满足任务之间具有相关性。

任务之间相关性衡量


虽然稀疏约束迫使的模型只考虑少数几个特征,但是这些特征在所有任务中都得到了广泛的应用。因此,以前的方法都假定在多任务学习中使用的任务是密切相关的。

但是,每个任务可能并不与所有可用任务密切相关。在这些情况下,与不相关的任务共享信息实际上可能会损害性能,这种现象被称为负迁移。

因此,希望利用先前的知识来表明一些任务是相关的,而另一些则不是。

从聚类的角度看,相当于对多个任务基于某种依据进行划分不同的簇,在不同的簇上施加不同的损失,等价于类间距离最大化,同时类内距离最小化,也就是,实现任务的聚类并添加相应的对应的约束更合适。

对任务列向量 a . , 1 , ⋯ a . , t a_{.,1},\cdots a_{.,t} a.,1,a.,t 和对应的方差来施加如下的聚类约束:

Ω = ∣ a ˉ ∣ 2 + λ T ∑ t = 1 T ∣ a . , t − a ˉ ∣ 2 \Omega =|\bar{a} |^2+\frac{\lambda }{T} {\textstyle \sum_{t=1}^{T}} |a_{.,t}-\bar{a} |^2 Ω=aˉ2+Tλt=1Ta.,taˉ2

其中 a = ( ∑ t = 1 T a . , t ) / T a=(\sum_{t=1}^{T} a_{.,t})/T a=(t=1Ta.,t)/T 代表参数向量的均值,这种损失强制一个簇的任务参数向量 a . , 1 , ⋯ a . , t a_{.,1},\cdots a_{.,t} a.,1,a.,t 趋近于该簇的均值,趋向的程度由 λ \lambda λ控制。

假设簇的数量 C C C,将损失分解成三个独立的范数:

  • 一个衡量列参数向量平均大小的全局损失: Ω m e a n ( A ) = ∣ a ˉ ∣ 2 \Omega _{mean}(A)=|\bar{a} |^2 Ωmean(A)=aˉ2
  • 一个衡量任务簇之间方差大小,代表了任务簇之间的距离: Ω b e t w e e n ( A ) = ∑ c = 1 C T c ∣ a ˉ c − a ˉ ∣ 2 \Omega _{between}(A)= {\textstyle \sum_{c=1}^{C}T_{c}|\bar{a}_{c}-\bar{a} |^2} Ωbetween(A)=c=1CTcaˉcaˉ2,其中 T c T_{c} Tc代表第 c c c个簇中的任务个数, a ˉ c \bar{a}_{c} aˉc是第 c c c个簇的任务参数均值向量
  • 一个衡量簇内方差,用来衡量每个集群的紧凑程度: Ω w i t h i n ( A ) = ∑ c = 1 C ∑ t ∈ J c ∣ a ˉ c − a ˉ ∣ 2 \Omega _{within}(A)= {\textstyle \sum_{c=1}^{C} {\textstyle \sum_{t\in J_{c}}} |\bar{a}_{c}-\bar{a} |^2} Ωwithin(A)=c=1CtJcaˉcaˉ2,其中 J c J_{c} Jc是第 c c c个聚类簇的任务集合

因此,最终的约束是这三种损失的加权和:

Ω ( A ) = λ 1 Ω m e a n ( A ) + λ 2 Ω b e t w e e n ( A ) + λ 3 Ω w i t h i n ( A ) \Omega (A)=\lambda _{1}\Omega _{mean}(A)+\lambda _{2}\Omega _{between}(A)+\lambda _{3}\Omega _{within}(A) Ω(A)=λ1Ωmean(A)+λ2Ωbetween(A)+λ3Ωwithin(A)

这种方法假定了簇是已知的。通常是通过正则化的方式构建不同任务之间的关系,如果只有一个簇,那就是经典的多任务学习框架。

深度学习的 MTL 框架


虽然对于多任务学习而言,硬参数和软参数共享还是众多方法的默认配置,但也有几种其他的多任务学习机制。

Deep Relationship Networks

一般的多任务学习框架,是底层参数共享,具体任务连接各自的全连接层,有一种多任务框架除了共享层和任务各自的全连接层的结构之外,它们在全连接层上放置矩阵先验,这使得模型能够学习任务之间的关系,类似于一些贝叶斯模型。然而,这种方法仍然依赖于一种预定义的共享结构,这种共享结构对已有的任务是有效的,但是对于新的任务来说却很容易出错。

在这里插入图片描述

Fully-Adaptive Feature Sharing

另一种多任务学习的框架是一个自下而上的方法,从一个薄的网络开始,在训练期间使用一个标准,通过任务的训练不断的贪婪地扩大网络,动态创建分支的扩展过程如图所示。然而,贪婪方法可能无法发现一个全局最优的模型,每个分支对应一个任务,模型不能很好的学习任务之间的关系和交互信息。

在这里插入图片描述

Cross-stitch Networks

从两个独立的模型架构开始,就像软参数共享一样。然后,他们使用所谓的cross-stitch单元,让模型通过学习前一层输出的线性组合,来确定特定任务的网络如何利用其他任务的知识。它们的体系结构可以在下图中看到,在下图中,它们只在池化层和全连接层之后放置cross-stitch单元。

在这里插入图片描述

A Joint Many-Task Model

相比之下,在自然语言处理(NLP)领域,最近的研究集中在为多任务学习寻找更好的任务层次: 低层任务,即通常用于预处理的 NLP 任务,如语音部分标注和命名实体识别,当作为辅助任务使用时,应该在低层监督。

在这个发现的基础上,预先定义了一个由几个 NLP 任务组成的层次结构,如图所示,作为多任务学习的联合模型。

在这里插入图片描述

Weighting losses with uncertainty

还有一种框架,不是学习共享的结构,而是采用正交的方法来考虑每个任务的不确定性。然后,他们通过推导一个基于任务相关不确定性高斯似然最大化的多任务损失函数来调整每个任务在代价函数中的相对权重。体系结构如图7所示。

在这里插入图片描述

Sluice Networks

最近的工作试图将现有的 MTL 方法推广到深度学习: 使用张量因子分解将一些先前讨论的矩阵因子分解方法推广到每一层的模型参数分解为共享和任务特定的参数。

最近一个工作是提出了水闸网络(Sluice Networks)[45] ,这是一个基于深度学习的 MTL 方法的模型,如硬参数共享和交叉缝合网络,块稀疏正则化方法,以及最近创建任务层次的 NLP 方法。该模型可以在下图中看到,它可以了解应该共享哪些层和子空间,以及在哪些层上网络已经学习了输入序列的最佳表示。

在这里插入图片描述

硬参数共享虽然在许多场景中很有用,但如果任务之间没有密切关系或者需要在不同层次上进行推理,硬参数共享很快就会失效。因此,给予的模型学习任务层次结构的能力是性能提升的关键,特别是在需要不同粒度的情况下。

辅助任务


多任务学习在一次预测获取多个标签,但有时候我们只关心其中一个任务的性能,其他的都是为了提升主要任务的辅助任务,那么辅助任务的选择对主任务的提升是至关重要的。

通常使用相关任务作为多任务学习的辅助任务是经典的选择。但什么是相关的任务是比较难定义。

  • Caruana (1998)使用预测道路不同特征的任务作为辅助任务来预测自动驾驶汽车的方向
  • 使用头部姿势估计和面部属性推断作为辅助任务来进行面部地标检测,共同学习查询分类和网络搜索,
  • Girshick (2015)共同预测图像中物体的类和坐标,最后共同预测文本到语音的音位持续时间和频率分布。

正如前面提到的,多任务学习可以用来学习那些仅仅使用原始任务可能不容易学习的特性。实现这一点的一个有效方法将预测特征作为辅助任务。自然语言处理背景下这种策略的最新例子是:

  • 预测输入句子是否包含积极或消极的情绪词作为情绪分析的辅助任务
  • 预测一个名字是否存在于句子中作为名字错误检测的辅助任务。

类似地,辅助任务可以用来关注网络通常会忽略的部分。例如,为了学习驾驶(Caruana,1998) ,一个单任务模型可能典型地忽略车道标记,因为这些只占图像的一小部分,并不总是存在。然而,预测车道标记作为辅助任务,会迫使模型学习如何表示它们。类似地,对于面部识别,人们可以学习预测面部地位置作为辅助任务,因为这些往往是与众不同的。

多任务学习中辅助任务的目标是使模型能够学习对主任务有帮助或共享的表示: 它们与主要任务密切相关,因此学习它们可能会使模型学习有益的表征。

从上面可以得知,相关任务对整体是有益的,那么是否能够定义任务的相似呢?

  • Caruana (1998)定义了两个相似的任务,如果它们使用相同的特征来做决定。
  • Baxter (2000)只是在理论上认为相关任务有一个共同的最优假设类,即有相同的归纳偏差。
  • 还有学者提出两个任务是 F-related:如果两个任务的数据都可以通过一组转换从固定的概率分布生成,那么这两个任务就是相关的。
  • 薛等人(2007)指出,如果两个任务的分类边界相近,即参数向量相近,那么它们是相似的。

总而言之,对于多任务学习,在如下场景下,可以考虑该范式

  • 存在多个任务,且任务之间明确存在相关关系,可以是标签的共现关系或依赖关系等
  • 要优化的目标数据有限,可获取的标注数据能够关联到要优化的目标上时,可以形成主要任务+辅助任务的模式,提升主要任务的优化指标

网站文章

  • 微信公众号(测试号)开发

    微信公众号(测试号)开发

    微信公众号(测试号)开发问流程及问题记录

    2024-01-30 21:53:06
  • [JZOJ4788] 【NOIP2016提高A组模拟9.17】序列

    [JZOJ4788] 【NOIP2016提高A组模拟9.17】序列

    题目描述题目大意一个序列,每次可以使一段区间内的所有数加一(模四)。问最少的操作次数。思考历程一看这题目,诶,这不就是那...

    2024-01-30 21:52:27
  • aop源码分析之 —— 创建代理对象

    aop源码分析之 —— 创建代理对象

    前言 在上一篇我们分析了AOP生成代理对象的源码流程,我们知道,springaop中,生成代理对象一般有2种,当目标对象实现了接口时,默认使用JDK代理,否则就采用cglib代理,而且,最终调用目标对...

    2024-01-30 21:52:19
  • Linux安装MySQL(使用yum)

    Linux安装MySQL(使用yum)

    镜像下载、域名解析、时间同步请点击 阿里云开源镜像站 安装前准备 一、可以考虑替换国内yum镜像 根据我老中医多年的经验,需要从某些仓库啊之类的下载某些包的时候,最好先看看怎么替换国内的镜像(否则下载...

    2024-01-30 21:52:12
  • vue iview组件表格 render函数的使用

    1 如果要在标签中加入属性,例如img 中src属性 a标签中href属性 此时需要用到----attrs 来加入而不是props2 动态显示内容:render: (h,params) => {                            const row = params.row;                            const col

    2024-01-30 21:52:04
  • 20张Python高清数据分析全知识地图,数据分析发展路线

    20张Python高清数据分析全知识地图,数据分析发展路线

    公众号:yk 坤帝获取全部数据分析资料今天给大家分享一波很硬的干货,20张数据分析相关的知识地图,马起来慢慢消化~1、数据分析步骤地图2、数据分析基础知识地图3、数据分析技术知识地图4、数据分析业务流...

    2024-01-30 21:51:35
  • 毕业=失业?现在多学一个技能,秋招多50%岗位机会

    毕业=失业?现在多学一个技能,秋招多50%岗位机会

    毕业季到了,又有多少人成为“毕业即失业”大军的一员。今年大学毕业生1020万,但就业岗位没有增加,反而不少企业大规模。春招时招聘会场场爆满!大多数简历为“三无简历”:无实习、无技能、无证书,因此能投递...

    2024-01-30 21:51:23
  • 基础的Dos命令

    打开cmd的方式开始+系统+命令提示符win键+R在任意文件夹下面,按住shift键+鼠标右键点击,在此处打开命令行窗口资源管理器的地址栏前面加上cmd路径管理员方式运行:选择以管理员身份运行常用的D...

    2024-01-30 21:50:55
  • C/C++笔记总结——多态,虚析构与纯虚析构(看了就懂)

    C/C++笔记总结——多态,虚析构与纯虚析构(看了就懂)

    多态实C++面向对象的三大特性之一。面向对象的三大特性:封装,继承,多态。要想实现地址晚绑定,只需要在最大的父类中的成员函数前面加一个关键字virtual,将这个函数变为虚函数即可。这称作“地址晚绑定”。

    2024-01-30 21:50:48
  • 数据备份服务器维修,日常维护 – 备份与恢复 - Seafile 服务器用户手册

    概述一般来说,Seafile 备份分为两部分内容:Seafile 资料库数据数据库如果你根据我们的手册来安装 Seafile 服务器,你应该有如下目录结构:haiwen # 根目录,haiwen 为示例文件名,如果你安装到其他目录则为相应的目录名--seafile-server-2.x.x # Seafile 安装包解压缩后目录--seafile-data # Seafile 配置...

    2024-01-30 21:50:41