前言
一般的机器学习模型都是针对单一的特定任务, 比如手写体数字识别 、 物体检测等. 不同任务的模型都是在各自的训练集上单独学习得到的 . 如果有两个任务比较相关, 它们之间会存在一定的共享知识 , 这些知识对两个任务都会有所帮助. 这些共享的知识可以是表示 ( 特征 )、 模型参数或学习算法等 . 目前 , 主流的多任务学习方法主要关注表示层面的共享.
内容
多任务学习 ( Multi-task Learning ) 是指同时学习多个相关任务 , 让这些任务在学习过程中共享知识, 利用多个任务之间的相关性来改进模型在每个任务上的性能和泛化能力. 多任务学习可以看作一种 归纳迁移学习 ( Inductive Transfer Learning), 即通过利用包含在相关任务中的信息作为 归纳偏置 ( Inductive Bias) 来提高泛化能力。
多任务学习的基本思想
在传统的单任务学习中,每个任务都独立地训练一个模型;而在多任务学习中,多个任务共享底层的表示学习和特征提取。
以下是多任务学习的基本思想和优势:
-
共享表示学习:多个任务通常存在共享的底层特征和表示学习,通过同时学习这些任务,可以使模型学习到更加泛化和有用的特征表示。共享表示学习可以帮助解决数据稀缺问题,尤其在某些任务数据有限的情况下,可以从其他相关任务中受益。
-
任务间关联性:多个任务通常具有一定的相关性或依赖关系。通过共享表示学习,模型可以学习到任务之间的关联信息,从而提高每个任务的性能。模型可以共享低阶特征,以捕获任务的共性,并学习任务特定的高阶特征,以实现任务的个性化。
-
数据效率:多任务学习可以利用不同任务之间的数据相互增强,提高数据的利用率和效率。如果任务之间存在类似的数据分布,模型可以从其他任务中学习到有关数据的知识,以缓解单个任务数据不足的问题。
-
正则化效果:多任务学习可以在多个任务之间进行正则化,减小模型的方差,避免过拟合。通过共享表示和参数约束,可以促使模型学习到更鲁棒和泛化的特征表示,提高模型的泛化性能。
多任务学习的具体方法有很多种,包括共享参数模型、联合训练、共享网络层、注意力机制等。选择适合的方法需要考虑任务之间的相关性、数据量、模型复杂度等因素。
需要注意的是,多任务学习并不适用于所有问题和场景。在某些情况下,任务之间可能存在冲突或竞争,导致性能下降。因此,在应用多任务学习时,需要仔细设计任务间的关系,并进行实验和评估来验证其效果。
多任务学习与单任务学习
单任务学习:一次只学习一个任务(task),大部分的机器学习任务都属于单任务学习。
单任务学习结构图
多任务学习:是指同时学习多个相关任务,让这些任务在学习过程中共享知识,利用多个任务之间的相关性来改进模型在每个任务上的性能和泛化能力.
多任务学习结构图
多任务学习为什么比单任务学习具有更好的泛化能力?
多任务学习通常可以获得比单任务学习更好的泛化能力,主要有以下几个原因:
(1) 多任务学习在多个任务的数据集上进行训练,比单任务学习的训练集更大.由于多个任务之间有一定的相关性,因此多任务学习相当于是一种隐式的数据增强,可以提高模型的泛化能力.
(2) 多任务学习中的共享模块需要兼顾所有任务,这在一定程度上避免了模型过拟合到单个任务的训练集,可以看作一种正则化.
(3) 既然一个好的表示通常需要适用于多个不同任务, 多任务学习的机制使得它会比单任务学习获得更好的表示.
(4) 在多任务学习中,每个任务都可以“选择性”利用其他任务中学习到的隐藏特征,从而提高自身的能力.
多任务学习的共享机制
共享机制
多任务学习的主要挑战在于如何设计多任务之间的共享机制. 在传统的机器学习算法中, 引入共享的信息是比较困难的 , 通常会导致模型变得复杂. 但是在神经网络模型中 , 模型共享变得相对比较容易 . 深度神经网络模型提供了一种很方便的信息共享方式, 可以很容易地进行多任务学习 . 多任务学习的共享机制比较灵活, 有很多种共享模式 .下 图 给出了多任务学习中四种常见的共享模式, 其中 、 和 表示三个不同的任务 , 红色框表示共享模块 , 蓝色框表示任务特定模块.
这四种常见的共享模式分别为 :
( 1 ) 硬共享模式 : 让不同任务的神经网络模型共同使用一些共享模块 ( 一般是低层) 来提取一些通用特征 , 然后再针对每个不同的任务设置一些私有模块( 一般是高层 ) 来提取一些任务特定的特征 .
( 2 ) 软共享模式 : 不显式地设置共享模块 , 但每个任务都可以从其他任务中“ 窃取 ” 一些信息来提高自己的能力 . 窃取的方式包括直接复制使用其他任务的隐状态, 或使用注意力机制来主动选取有用的信息 .
( 3 ) 层次共享模式 : 一般神经网络中不同层抽取的特征类型不同 , 低层一般抽取一些低级的局部特征, 高层抽取一些高级的抽象语义特征 . 因此如果多任务学习中不同任务也有级别高低之分, 那么一个合理的共享模式是让低级任务在低层输出, 高级任务在高层输出 .
( 4 ) 共享 - 私有模式 : 一个更加分工明确的方式是将共享模块和任务特定(私有 ) 模块的责任分开 . 共享模块捕捉一些跨任务的共享特征 ,而私有模块只 捕捉和特定任务相关的特征 . 最终的表示由共享特征和私有特征共同构成 .
多任务学习中四种常见的共享模式