本篇文章将介绍在机器学习中效果比较好的一种模式,多任务学习(Multi task Learning,MTL)。已经有一篇机器之心翻译的很好的博文介绍多任务学习了: 共享相关任务表征,一文读懂深度神经网络多任务学习,写的非常详细,但是我在看的时候会觉得略有点晦涩。所以我准备写的这篇呢,想用大白话介绍一下多任务学习解决的问题是什么,具体是怎么做的,有哪些优势。并且这篇博文中不准备写相关paper的总结和简介。
接下来从以下几个方面介绍MTL:
定义及与其他机器学习任务的区别(单任务、multi label多标签、multi class多类别)
什么是相关任务
共享表示
优势
应用方向
1、定义及与其他机器学习任务的区别
1.1 单任务学习与多任务学习
Multi task learning多任务学习背景简介
既然要介绍多任务学习,那么就必须要提到与之对应的单任务学习。
我们平时接触最多的那些机器学习算法基本都是单任务学习,即专注于一个学习目标。
如上图所示,有4个独立的神经网络,每个网络针对同样的输入只有一个输出函数(优化目标),这四个网络之间没有任何连接,所以每个网络之间的表示层是独立的,彼此训练的隐层对其他网络的训练没有任何影响,这种方式就叫做单任务学习(Single Task Learning,STL)
而多任务学习,顾名思义,学习目标有多个。如上图所示,把四个任务放在一起进行学习,他们共享了同一个模型空间,或者换句话说,他们用了共享表示层(shared representation)。在训练过程中,四个任务全都会对这个共享模型造成影响。
1.2 multi task多任务&multi label多标签 & multi class多类别
这三个名词里都带有multi,于是很多人会把他们搞混。下面解释一下这三种之间的区别。
multi class:多分类问题,可选类别有多个但是结果只能分到一类中,比如一个人他是孩子、少年、中年人还是老人。
multi label:打多个标签,或者说进行多种分类,还是拿人举例啊,一个人,他可以被打上标签{青年,男性,画家}这些标签。如果还有一个人他也是青年男性,但不是画家,那就只能打上标签{青年,男性}。
它和多任务学习不一样,它的目标不是学习出一个共同的表示,而是多标签。
multi task:训练模型的时候目标是多个相关目标共享一个表征,比如人的特征学习,一个人,既可以从年轻人和老人这方面分类,也可以从男人女人这方面分类,这两个目标联合起来学习人的特征模型,可以学习出来一个共同特征,适用于这两种分类结果,这就是多任务学习。
2、 什么是相关任务
multi task同时学习多个相关任务,并且具有相当的优势。同时,我们在做多任务学习时,有时关注的点在某个主要任务上,其他的共同学习的任务可能更多的只是起到帮助作用,这些起到帮助作用的任务叫做辅助任务。辅助任务与主任务越相关,那么起到的效果可能会越好。
那么什么是相关任务?比较大白话的解释有:
(1)如果两个任务是处理输入的相同函数,但是在任务信号中加入独立的噪声,很明显这两个任务是相关的。
(2)如果两个任务用于预测同个个体的属性的不同方面,这些任务比预测不同个体的属性的不同方面更相关。
(3)两个任务共同训练时能够相互帮助并不意味着它们是相关的:有时通过在后向传播网络的一个额外输出加入噪声可以提高泛化能力,但是这个噪声任务与其它任务不相关
那么比较学术严谨一些的定义有:
(1)使用相同的特征做判断的任务
(2)共享相同的最优假设空间,即拥有相同的归纳偏置(having the same inductive bias)
(3)F-相关(F-related): 两个任务的数据可以从一组分布变换 F 得到的固定概率分布生成
(4)任务的分类边界接近,也就是参数向量(parameter vectors)接近
任务是否相似不是非0即1的。越相似的任务,收益越大。但即使相关性不佳的任务也会有所收益。不过任务之间的相似性对我们在选择辅助任务上还是有绝对的帮助的。
- 共享表示 (shared representation)
共享表示的目的是为了提高泛化(improving generalization),一般来说有两种
1)、基于参数的共享 (Parameter based):比如基于神经网络的MTL,高斯处理过程。
2)、基于约束的共享 (regularization based):比如均值,联合特征(Joint feature)学习(创建一个常见的特征集合)。
神经网络中MTL的共享表示有两种方式
3.1 hard参数共享
它是神经网络MTL中最常见的一种方式,即在所有任务之间共享隐藏层,同时保留几个特定任务的输出层。这种方式很大程度上降低了过拟合的风险,因为同时学习的工作越多,模型找到一个含有所有任务的表征就越困难,而过拟合某特定原始任务的可能性就越小。
Multi task learning多任务学习背景简介
3.2 soft参数共享
每个任务有自己的参数和模型,最后通过对不同任务的参数之间的差异加约束,表达相似性。比如可以使用L2进行正则, 迹范数(trace norm)等。
Multi task learning多任务学习背景简介
4、优势
为什么多个相关的任务放在一起学习就可以提升学习效果?关于这个问题,有很多解释。这里列出其中一部分。
(1)、多个任务一起学习时,有相关部分也有不那么相关的地方,在学习一个任务时,与它不相关的部分就相当于是加入一些噪声,而加入噪声可以提升模型的泛化能力。
(2)、单任务学习时容易陷入局部最优,而多任务学习中不同任务的局部最优解处于不同的位置,通过相互作用,可以逃离局部最优。
(3)、增加任务会影响网络参数的更新,比如增加额外的任务增加了隐层的有效的学习率,具体取决于每个任务输出的错误反馈权重。可能较大的学习速率提升了学习效果
(4)某些特征可能在主任务不好学习(比如以很复杂的方式与特征进行交互,或被其他因素抑制),但在辅助任务上这个特征好学习到。可以通过辅助任务来学习这些特征,方法比如hints(预测重要特征)
(5)通过学习足够大的假设空间,在未来某些新任务中可以有较好的表现(解决冷启动),前提是这些任务都是同源的。
(6)多个任务在浅层共享表示,引入归纳偏置作为正则化项。因此,它降低了过拟合的风险以及模型的 Rademacher 复杂度(即适合随机噪声的能力)
5、应用场景
多任务学习在传统机器学习和深度学习方向都有很多应用,这里就不一一举例了。
深度学习网络是具有多个隐层的神经网络,在深度学习网络中应用多任务学习是一种很自然的想法。机器视觉领域有广泛的多任务学习应用,主要方式包括:
1)多个任务并行输出,同时做分类和回归或使用不同的损失函数;
2)多个任务像流水线一样,辅助任务附加在主任务后面等。
参考博文:
https://blog.csdn.net/zaf0516/article/details/90380732