🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. 前言
多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法。在机器学习领域,标准的算法理论是一次学习一个任务,也就是系统的输出为实数的情况。复杂的学习问题先被分解成理论上独立的子问题,然后分别对每个子问题进行学习,最后通过对子问题学习结果的组合建立复杂问题的数学模型。多任务学习是一种联合学习,多个任务并行学习,结果相互影响。
2. 多任务和单任务学习的对比
2.1 简单定义
单任务学习:一次只学习一个任务(task),大部分的机器学习任务都属于单任务学习。
多任务学习:把多个相关(related)的任务放在一起学习,同时学习多个任务。
2.2 多任务学习必要性
解释如下:
现在大多数机器学习任务都是单任务学习。对于复杂的问题,也可以分解为简单且相互独立的子问题来单独解决,然后再合并结果,得到最初复杂问题的结果。这样做看似合理,其实是不正确的,因为现实世界中很多问题不能分解为一个一个独立的子问题,即使可以分解,各个子问题之间也是相互关联的,通过一些共享因素或共享表示(share representation)联系在一起。把现实问题当做一个个独立的单任务处理,忽略了问题之间所富含的丰富的关联信息。多任务学习就是为了解决这个问题而诞生的。把多个相关(related)的任务(task)放在一起学习。这样做真的有效吗?答案是肯定的。多个任务之间共享一些因素,它们可以在学习过程中,共享它们所学到的信息,这是单任务学习所具备的。相关联的多任务学习比单任务学习能去的更好的泛化(generalization)效果。
一句话解释:
任务之间存在关系和联系,用单任务分别解决无法考虑任务内部的联系
2.3 图解多任务学习
图1 单任务学习与多任务学习对比
从图1中可以发现,单任务学习时,各个任务之间的模型空间(Trained Model)是相互独立的(图1上)。多任务学习时,多个任务之间的模型空间(Trained Model)是共享的(图1下)。
假设用含一个隐含层的神经网络来表示学习一个任务,单任务学习和多任务学习可以表示成如图2所示。
2.4 一个例子
拿大家经常使用的school data做个简单的对比,school data是用来预测学生成绩的回归问题的数据集,总共有139个中学的15362个学生,其中每一个中学都可以看作是一个预测任务。单任务学习就是忽略任务之间可能存在的关系分别学习139个回归函数进行分数的预测,或者直接将139个学校的所有数据放到一起学习一个回归函数进行预测。而多任务学习则看重 任务之间的联系,通过联合学习,同时对139个任务学习不同的回归函数,既考虑到了任务之间的差别,又考虑到任务之间的联系,这也是多任务学习最重要的思想之一。
在机器学习中,我们通常关心优化某一特定指标,不管这个指标是一个标准值,还是企业KPI。为了达到这个目标,我们训练单一模型或多个模型集合来完成指定得任务。然后,我们通过精细调参,来改进模型直至性能不再提升。尽管这样做可以针对一个任务得到一个可接受得性能,但是我们可能忽略了一些信息,这些信息有助于在我们关心的指标上做得更好。具体来说,这些信息就是相关任务的监督数据。通过在相关任务间共享表示信息,我们的模型在原始任务上泛化性能更好。这种方法称为多任务学习(Multi-Task Learning),是本博文的关注点。
3. 多任务学习
3.1 定义
多任务学习(Multitask learning)定义:
基于共享表示(shared representation),把多个相关的任务放在一起学习的一种机器学习方法。
多任务学习(Multitask Learning)是一种推导迁移学习方法,主任务(main tasks)使用相关任务(related tasks)的训练信号(training signal)所拥有的领域相关信息(domain-specific information),做为一直推导偏差(inductive bias)来提升主任务(main tasks)泛化效果(generalization performance)的一种机器学习方法。多任务学习涉及多个相关的任务同时并行学习,梯度同时反向传播,多个任务通过底层的共享表示(shared representation)来互相帮助学习,提升泛化效果。简单来说:多任务学习把多个相关的任务放在一起学习(注意,一定要是相关的任务,后面会给出相关任务(related tasks)的定义,以及他们共享了那些信息),学习过程(training)中通过一个在浅层的共享(shared representation)表示来互相分享、互相补充学习到的领域相关的信息(domain information),互相促进学习,提升泛化的效果。
多任务学习可以认为是迁移学习的一种表现形式
3.2 典型方法
目前多任务学习方法大致可以总结为两类,一是不同任务之间共享相同的参数(common parameter),二是挖掘不同任务之间隐藏的共有数据特征(latent feature)。
3.3 深度学习中两种多任务学习模式
前面我们讨论了多任务学习的理论源泉。为了使得多任务学习的思想更加具体,我们展示了在基于深度神经网络的多任务学习中常用两种方法:隐层参数的硬共享与软共享。
(1)参数的硬共享机制:参数的硬共享机制是神经网络的多任务学习中最常见的一种方式,这一点可以追溯到文献[2]。一般来讲,它可以应用到所有任务的所有隐层上,而保留任务相关的输出层。硬共享机制降低了过拟合的风险。事实上,文献[3]证明了这些共享参数过拟合风险的阶数是N,其中N为任务的数量,比任务相关参数的过拟合风险要小。直观来将,这一点是非常有意义的。越多任务同时学习,我们的模型就能捕捉到越多任务的同一个表示,从而导致在我们原始任务上的过拟合风险越小。
(2)参数的软共享机制:每个任务都由自己的模型,自己的参数。我们对模型参数的距离进行正则化来保障参数的相似。文献[4]使用L2距离正则化,而文献[5]使用迹正则化(trace norm)。用于深度神经网络中的软共享机制的约束很大程度上是受传统多任务学习中正则化技术的影响。我们接下来会讨论。
这里本质就和3.2的典型方法对应
3.4 多任务学习有效的原因(数学角度)
为什么把多个相关的任务放在一起学习,可以提高学习的效果?关于这个问题,有很多解释。这里列出其中一部分,以图2中由单隐含层神经网络表示的单任务和多任务学习对比为例。
(1)多人相关任务放在一起学习,有相关的部分,但也有不相关的部分。当学习一个任务(Main task)时,与该任务不相关的部分,在学习过程中相当于是噪声,因此,引入噪声可以提高学习的泛化(generalization)效果。
(2)单任务学习时,梯度的反向传播倾向于陷入局部极小值。多任务学习中不同任务的局部极小值处于不同的位置,通过相互作用,可以帮助隐含层逃离局部极小值。
(3)添加的任务可以改变权值更新的动态特性,可能使网络更适合多任务学习。比如,多任务并行学习,提升了浅层共享层(shared representation)的学习速率,可能,较大的学习速率提升了学习效果。
(4)正则化机制。多任务学习通过引入归纳偏置(inductive bias)起到与正则化相同的作用。正是如此,它减小了模型过拟合的风险,同时降低了模型的Rademacher复杂度,即拟合随机噪音的能力。
还有很多潜在的解释,为什么多任务并行学习可以提升学习效果(performance)。多任务学习有效,是因为它是建立在多个相关的,具有共享表示(shared representation)的任务基础之上的,因此,需要定义一下,什么样的任务之间是相关的。
3.5 多任务学习提出的动机(直觉角度)
我们提出多任务学习的出发点是多种多样的:
(1)从生物学来看,我们将多任务学习视为对人类学习的一种模拟。为了学习一个新的任务,我们通常会使用学习相关任务中所获得的知识。例如,婴儿先学会识别脸,然后将这种知识用来识别其他物体。
(2)从教学法的角度来看,我们首先学习的任务是那些能够帮助我们掌握更复杂技术的技能。这一点对于学习武术和编程来讲都是非常正确的方法。具一个脱离大众认知的例子,电影Karate Kid中Miyagi先生教会学空手道的小孩磨光地板以及为汽车打蜡这些表明上没关系的任务。然而,结果表明正是这些无关紧要的任务使得他具备了学习空手道的相关的技能。
(3)从机器学习的角度来看,我们将多任务学习视为一种归约迁移(inductive transfer)。归约迁移(inductive transfer)通过引入归约偏置(inductive bias)来改进模型,使得模型更倾向于某些假设。举例来说,常见的一种归约偏置(Inductive bias)是L1正则化,它使得模型更偏向于那些稀疏的解。在多任务学习场景中,归约偏置(Inductive bias)是由辅助任务来提供的,这会导致模型更倾向于那些可以同时解释多个任务的解。接下来我们会看到这样做会使得模型的泛化性能更好。
4. 总结
如果想要学习更多人工智能·深度学习的知识,大家可以点个关注并订阅,持续学习、天天进步
你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~