当前位置: 首页 > ops >正文

多任务学习(Multi-Task Learning, MTL)

多任务学习(Multi-Task Learning, MTL)-CSDN博客

多任务学习-CSDN博客

多任务学习是一种归纳迁移机制,主要目标是利用隐含在多个相关任务的训练信号中的特定领域信息来提高泛化能力,多任务学习通过使用共享表示并行训练多个任务来完成这一目标。

背景:

早期归纳学习系统仅专注于单一任务,1997年提出一种学习多个任务的算法并介绍多任务学习的过程。

多任务学习可以学到多个任务的共享表示,这个共享表示具有较强的抽象能力,能适应多个不同但相关的目标,可以使主任务获得更好的泛化能力。此外,由于使用共享表示,多个任务同时进行预测时,减少了数据来源的数量以及整体模型参数的规模,使预测更加高效。

任务的相关性:

①如果两个任务是处理输入的相同函数,但在任务信号中加入独立的噪声处理,这两个任务是相关的。

②如果两个任务用于预测同个个体的属性的不同方面,这些任务比预测不同个体的属性的不同方面更相关。

③两个任务共同训练时能相互帮助并不意味着它们是相关的,有时通过在后向传播网络的一个额外输出加入噪声可以提高泛化能力,但是这个噪声任务与其它任务不相关。

多任务学习的定义:

每个网络是一个针对同样输入的仅有一个输出的函数。误差后向传播被应用于这些网络来单独训练每个网络,由于这些网络相互之间没有任何连接,因此其中一个网络学习到的特征并不能帮助另一个网络的学习。这种方法为单任务学习(STL,Single Task Learning)。

下图中该网络有t个输出,每个输出对应图左边的t个任务。需要注意的是,这些输出可以连接他们共享的一个隐层的所有神经元,在共享的一个隐层后形成独立的子网络,训练不与其他任务共享的参数。本文称这种方法为多任务学习(MTL,Multi Task Learning),在多任务学习网络中,后向传播并行地作用于t个输出。由于t个输出共享底部的隐层,这些隐层中用于某个任务的特征表示也可以被其他任务利用,促使多个任务共同学习。多个任务并行训练并共享不同任务已学到的特征表示,是多任务学习的核心思想。

多任务学习是一种归纳迁移方法,充分利用隐含在多个相关任务训练信号中的特定领域信息。在后向传播过程中,多任务学习允许共享隐层中专用于某个任务的特征被其他任务使用;多任务学习将可以学习到可适用于几个不同任务的特征,这样的特征在单任务学习网络中往往不容易学到。

多任务学习的原理:

共享表示:

在多任务学习中,共享表示通常由以下几个方面组成:

①共享层:负责提取输入数据中的基本特征,如图像中的边缘、纹理等。这些特征在不同任务中往往是通用的。

②任务特定层:在共享层之后,每个任务可能会有自己的特定层,用于处理与该任务直接相关的更高级的特征。

③联合优化:在训练过程中,模型会同时学习所有任务的参数,共享层的参数会根据所有任务的损失函数进行联合优化。

④知识迁移:通过共享表示,模型能够将在一个任务上学到的知识迁移到其他任务上,这有助于提高模型在新任务上的性能,尤其是在数据较少的情况下。

共享表示的优势:

提高效率、增强泛化能力、结局数据不平衡问题

任务特定表示:

任务特定表示是多任务学习中的一个重要概念,它指的是针对每个任务定制的网络结构部分,这部分结构专门用于提取该任务特有的特征。任务特定表示有助于模型更精确地解决特定任务,即使在任务之间存在显著差异的情况下。

任务特定表示的一些关键点:

任务特定层、任务差异性、优化目标、灵活性、避免负迁移、个性化、模块化设计、参数效率、应用场景、评估与调整

任务特定表示是多任务学习中实现任务个性化和优化的关键,它与共享表示相结合,可以构建出既具有泛化能力,又能够针对特定任务进行优化的模型。

联合优化:

 在训练过程中,模型的参数会同时针对所有任务进行优化,而不是独立地针对每个任务。这有助于模型在不同任务之间找到最佳的平衡点,从而提升整体性能。联合优化是多任务学习中的一个核心概念,它涉及同时对多个任务进行优化,以提高模型在所有任务上的整体性能。

联合优化的一些关键点:

共享损失函数、权重平衡、梯度更新、避免过拟合、知识迁移、正则化效果、任务间的交互、动态调整、超参数调整、实验与评估

联合优化是多任务学习成功的关键,它使得模型能够同时在多个任务上取得良好的性能,而不是仅仅在一个任务上。通过精心设计的综合损失函数和适当的超参数调整,联合优化可以帮助模型在多个任务之间找到最佳的平衡点。

数学表示:

假设我们有T个任务,每个任务T都有一个损失函数L_{t}(\theta ),其中\theta 是模型的参数。在多任务学习中,我们通常希望找到一个参数\theta,它在所有任务上都能取得较好的性能。

①联合损失函数: 多任务学习的一个常见方法是定义一个联合损失函数,它是所有任务损失函数的加权和:

L_{joint}(\theta )=\sum_{t=1}^{T}\alpha _{t}L_{t}(\theta )

其中\alpha _{t}是权重,用于平衡不同任务的重要性

②优化问题:多任务学习的目标是找到一组参数\theta,使得联合损失函数最小化:

\theta ^{*}=argmin_{\theta }L_{joint}(\theta )

③共享表示:在多任务学习中,不同任务可能共享一部分表示(共享参数)。这可以通过定义一个共享的底层表示h(x;\phi )来实现,其中x是输入数据,\phi是共享参数。每个任务还可以有自己的特定参数\theta _{t}

y_{t}=f_{t}(h(x;\phi ),\theta _{t})

其中,f_{t}是任务t的特定函数,y_{t}是任务t的预测输出。

④正则化:为了防止过拟合,多任务学习中还可以引入正则化项R(\theta ),如L2正则化:

L_{regularized}(\theta )=L_{joint}(\theta )+\lambda R(\theta )

其中,\lambda是正则化项的权重

⑤梯度下降: 为了求解多任务学习的优化问题,通常使用梯度下降或其变体:

多任务学习的作用:

在一个神经网络上同时训练一个任务及其相关任务的学习效果会更好,因为额外任务的信息有助于共享的隐层学到更好的内部表示。

提高泛化能力的潜在原因:

①通过偶尔为后向传播网络增加噪声来增强泛化能力。某种程度上,不相关任务对于聚合梯度的贡献对于其他任务来说可以视为噪声。那么,不相关任务也可以通过作为噪声源来提高泛化能力。

②增加任务会影响网络参数的更新,比如增加额外的任务增加了隐层有效的学习率,具体取决于每个任务输出的错误反馈权重。

③多任务网络在所有任务之间共享网络底部的隐层,或许更小的容量就可以获得同水平或更好的泛化能力。

多任务学习机制:

统计数据增强

相关任务训练信号中的额外信息相当于有效增加了样本大小,特别是训练信号中存在噪声时,相当于做了数据增强。

假定有两个任务TT{}',它们的训练信号中都加入独立的噪声,都受益于计算隐层中输入的特征F。一个同时学习了TT{}'的网络,如果发现了两个任务共享F,可以使用两个训练信号通过在不同的噪声处理过程中平均化F,从而更好地学习F

属性选择

考虑两个任务TT{}',使用共同的特征F,假定网络有很多个输入。如果训练数据比较有限或噪声比较明显,一个学习T的网络有时难以区分与F相关的和不相关的数据。然而,一个同时学习TT{}'的网络将可以更好地选择与F相关的属性,因为数据增强为F提供更好的训练信号,使该网络能更好地判断哪些输入用于计算F。属性选择是数据增强的结果。

信息窃取

考虑一个对任务TT{}'都有用的隐层特征F,该特征在学习T时比较容易学到,而在学习T{}'时比较难学到。一个网络学习T将可以学到F,但一个只学习T{}'的网络将不能做到。如果一个网络在学习T{}'时还学习T,那么T{}'可以在隐层中窃取T已经学到的信息,因此可以学得更好。一旦T{}'F的表示的建立了连接,从T{}'关于F的额外信息将帮助网络通过其它的机制更好地学习F

表示偏置

因为神经网络以随机权重初始化,后向传播是一个随机搜索过程,多次运行很少产生同样的网络。假定任务T能发现两个极小值区域A和B,一个学习任务T{}'的网络同样有两个极小值区域A和C,它们在A共享极小值,但在B和C没有重叠区域,对此做了两个实验。

在第一个实验中,单独训练T的网络以均等概率找到A和B,单独训练T{}'的网络以均等概率找到A和C。而同时训练TT{}'的网络,通常对于两个任务都只找到了A。这表明多任务学习任务偏好其他任务也偏好的隐层表示,搜索对TT{}'单独学习到的表示的交集倾斜。

另一个实验中,选择使T对B有强烈偏好的极小值,一个训练T的网络总是落入B。然而,T{}'依然对A或C没有倾向。当TT{}'同时在一个网络上训练,T如预料中落入B,T{}'未能帮助T从B拉入A。令人惊讶的是,T{}'通常落入C,未与T共享极小值。T在隐层表示中创建一个潮流从A流向B,而T{}'对A或C没有任何倾向,但受制于T创建的潮流,因此通常落入C。多任务学习任务倾向于不使用其它任务不偏好使用的隐层表示。

后向传播多任务学习如何发现任务是相关的:

多任务学习后向传播网络能发现任务是相关的,后向传播网络虽然主要用于监督学习,但可以在不同任务学习的隐层特征上完成有限的非监督学习,揭示后向传播网络是如何发现任务之间的相关性非常有意义。

多任务学习可被广泛应用:

使用未来预测现在

通常有价值的特征在作出预测之后才变得可用,这些特征在运行时不可用,因此不能作为输入。如果可以离线学习的话,这些特征可以收集起来作为训练集,在额外的任务中使用。学习器为这些额外任务作出的预测在系统被使用时可能会被忽略,这些预测的主要功能是为学习器在训练时提供额外的信息。

未来测量方法在很多离线学习问题中可用,有些特征不能在运行时实时获得,因此不能作为输入。但作为多任务学习的输出,它们提供了可以帮助学习的额外信息,即使这些输出在运行时不能获得。

多种表示和度量

有时获得在一个误差度量或一种输出表示中比较重要的一切是很困难的。当可替代的度量或输出表示可以捕获一个问题的不同但有用的方面时,多任务学习可以从中收益。

时间序列预测

用未来预测现在的一种分类,未来任务和现在任务是相同的除了它们发生在更迟的时候。将多任务学习用于时间序列。预测的最简单方式是使用一个有多个输出的单一网络,每个输出和在不同时间的相同任务对应。

使用不可操作特征

有些特征在运行时使用是不现实的因为它们的计算代价太高,或者因为它们需要不可利用的人类专门知识。训练集通常比较小,并且我们会花费大量的时间来准备。为训练集计算的不可操作特征可以用作多任务的输出。

一个很好的例子是场景分析,通常需要人类知识来标注重要的特征,而学习系统在使用时人不会参与其中。那么这意味着有人标注的特征就不能用于学习吗?当然不是,如果训练集可以获得这些标注数据,它们能够作为额外任务来使用,在系统使用时这些额外任务将不是必要的。

使用额外任务来聚焦

学习器通常学会使用输入中大量的、普遍存在的模式,而忽视少量或不常见的但有用的输入。多任务学习可通过强制学习支持严重依赖可能会被忽略模式的任务的内部表示。

有序迁移

多任务学习可以在没训练数据的条件下从这些预训练的模型中受益,可以使用模型来生成人造数据,并在人造数据中使用训练信号作为额外任务。

多个任务自然地出现

通常这个世界给予我们一系列相关任务可供学习,传统的方法是将它们划分成独立的问题各自训练;如果相关任务一起训练的话能够使彼此受益。一个很好的例子是语音识别需要学习单词的音素和重音。

将输入变成输出

多任务学习提供一种通过使用这些特征作为额外任务并从中获益的方式。

总结:

多任务学习是一种归纳迁移机制,利用额外的信息来源来提高当前任务的学习性能,包括提高泛化准确率、学习速度和已学习模型的可理解性。在学习一个问题的同时,可以通过使用共享表示来获得其他相关问题的知识,多个任务并行训练并共享不同任务已学到的特征表示,是多任务学习的核心思想。

通过往后向传播网络增加额外输出可提高神经网络的泛化能力,是一件很有意义的事情,能提高泛化能力的可能原因有三:第一,不相关任务对于聚合梯度的贡献相对于其他任务来说可以视为噪声,不相关任务也可以通过作为噪声源来提高泛化能力;第二,增加任务会影响网络参数的更新,比如增加了隐层有效的学习率;第三,多任务网络在所有任务之间共享网络底部的隐层,或许更小的容量就可以获得同水平或更好的泛化能力。因此,我们需要关注如何选择多个相关任务及数据集使网络更好地泛化,有四种机制可以帮助多任务学习网络更好地泛化:统计数据增强、属性选择、信息窃取、表示偏置。

http://www.xdnf.cn/news/10886.html

相关文章:

  • unity UI Rect Transform“高”性能写法
  • 52. N 皇后 II【 力扣(LeetCode) 】
  • 网络攻防技术九:网络监听技术
  • Dispatch PDI V2.04 发布预告
  • Ros2 简单构建项目的流程以及涉及的文件作用
  • WAF绕过,网络层面后门分析,Windows/linux/数据库提权实验
  • 【时时三省】(C语言基础)数组作为函数参数
  • 解决Vditor加载Markdown网页很慢的问题(Vite+JS+Vditor)
  • 二分查找和二分答案(基础)
  • C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
  • 【Doris基础】Apache Doris中的Fragment概念详解
  • 探索NautilusTrader:下一代开源算法交易平台的革命性突破
  • 智能光子系统的多任务优化---案例:基于双贝塞尔曲线的紧凑多模光学波导弯曲
  • Dify:启动 Web 服务的详细指南
  • 爱耕云课时管理系统评测
  • SpringBoot项目打包成war包
  • Linux文件系统:从VFS到Ext4的奇幻之旅
  • Linux中断与异常:内核的事件驱动引擎
  • C++初赛的三讲
  • 【MSCKF】UpdaterSLAM::delayed_init 和 FeatureInitializer::single_triangulation
  • 安全编码规范与标准:对比与分析及应用案例
  • Python(十五)
  • 云服务器宕机或重启后数据会丢失吗?
  • 公司存储文件用什么比较好?
  • 笔记:算法题目中需要处理 int 某个位的三种方法:for、while、to_string
  • 免费开源Umi-OCR,离线使用,批量精准!
  • Qt企业级串口通信实战:高效稳定的工业级应用开发指南
  • leetcode hot100(两数之和、字母异位词分组、最长连续序列)
  • PyTorch--池化层(4)
  • Win11系统不推送24H2/西数SSD无法安装24H2 - 解决方案