多任务学习 订阅
多任务学习(MTL)是一个很有前景的机器学习领域,通过使用包含在相关任务的监督信号中的领域知识来改善泛化性能。 展开全文
多任务学习(MTL)是一个很有前景的机器学习领域,通过使用包含在相关任务的监督信号中的领域知识来改善泛化性能。
信息
领    域
人工智能
简    称
MTL
归属学科
机器学习
中文名
多任务学习
外文名
Multi-task learning
相关学科
迁移学习,领域自适应
多任务学习引言
利用历史数据中的有用信息来帮助分析未来数据的机器学习,通常需要大量有标签数据才能训练出一个优良的学习器。深度学习模型是一种典型的机器学习模型,因为这类模型是带有很多隐藏层和很多参数的神经网络,所以通常需要数以百万计的数据样本才能学习得到准确的参数。但是,包括医学图像分析在内的一些应用无法满足这种数据要求,因为标注数据需要很多人力劳动。在这些情况下,多任务学习(MTL)可以通过使用来自其它相关学习任务的有用信息来帮助缓解这种数据稀疏问题。MTL 是机器学习中一个很有前景的领域,其目标是利用多个学习任务中所包含的有用信息来帮助为每个任务学习得到更为准确的学习器。我们假设所有任务(至少其中一部分任务)是相关的,在此基础上,我们在实验和理论上都发现,联合学习多个任务能比单独学习它们得到更好的性能。根据任务的性质,MTL 可以被分类成多种设置,主要包括多任务监督学习、多任务无监督学习、多任务半监督学习、多任务主动学习、多任务强化学习、多任务在线学习和多任务多视角学习。多任务监督学习任务(可能是分类或回归问题)是根据训练数据集(包含训练数据实例和它们的标签)预测未曾见过的数据的标签。多任务无监督学习任务(可能是聚类问题)是识别仅由数据构成的训练数据集中的有用模式。多任务半监督学习任务与多任务监督学习类似,只是其训练集中不仅包含有标签数据,也包含无标签数据。多任务主动学习任务是利用无标签数据来帮助学习有标签数据,这类似于多任务半监督学习,其差异在于主动学习会选择无标签数据来主动查询它们的标签从而降低标注开销。多任务强化学习任务是选择动作以最大化累积奖励。多任务在线学习任务是处理序列数据。多任务多视角学习任务是处理多视角数据——其中每个数据实例都有多组特征。MTL 可以看作是让机器模仿人类学习行为的一种方法,因为人类常常将一个任务的知识迁移到另一个相关的任务上。例如,根据作者自身经验,打壁球和打网球的技能可以互相帮助提升。与人类学习类似,(机器)同时学习多个学习任务是很有用的,因为一个任务可以利用另一个相关任务的知识。MTL 也与机器学习的某些其它领域有关,包括迁移学习、多标签学习和多输出回归,但 MTL 也有自己不同的特点。比如说,类似于 MTL,迁移学习的目标也是将知识从一个任务迁移到另一个任务,但不同之处在于迁移学习希望使用一个或多个任务来帮助另一个目标任务,而 MTL 则是希望多个任务彼此助益。当多任务监督学习的不同任务使用了同样的训练数据时,这就变成了多标签学习或多输出回归。从这个意义上看,MTL 可以被看作是多标签学习和多输出回归的一种泛化。 [1]  与传统迁移学习、领域自适应等方法不同,多任务学习是一种并行迁移模式。传统迁移学习强调学习的先后顺序,即将在一个领域学到的知识迁移到另一个领域,知识迁移的过程是串行进行。而在多任务学习中,任务之间的信息相互共享,知识在不同的任务中互相迁移,因此多任务学习也被叫做并行迁移学习。多任务学习方法通过多任务信息共享提升整体的学习效果,这对于小样本上的学习尤其有效。假设有大量的小样本学习任务,多任务学习方法可以充分利用多个小样本的信息,提升多任务整体的学习效果。
收起全文
精华内容
下载资源
问答
  • 多任务学习

    万次阅读 2018-01-12 16:35:45
    多任务学习(Multitask learning)是迁移学习算法的一种,迁移学习可理解为定义一个一个源领域source domain和一个目标领域(target domain),在source domain学习,并把学习到的知识迁移到target domain,提升...

    简介:
    多任务学习(Multitask learning)是迁移学习算法的一种,迁移学习可理解为定义一个一个源领域source domain和一个目标领域(target domain),在source domain学习,并把学习到的知识迁移到target domain,提升target domain的学习效果(performance)。


    概念解析

    多任务学习(Multi-task learning):由于我们的关注点集中在单个任务上,我们忽略了可能帮助优化度量指标的其它信息。具体来说,这些信息来自相关任务的训练信号。通过共享相关任务之间的表征,可以使我们的模型更好地概括原始任务。这种方法被称为多任务学习(MTL)。其也是一种归纳迁移机制,主要目标是利用隐含在多个相关任务的训练信号中的特定领域信息来提高泛化能力,多任务学习通过使用共享表示并行训练多个任务来完成这一目标。归纳迁移是一种专注于将解决一个问题的知识应用到相关的问题的方法,从而提高学习的效率。比如,学习行走时掌握的能力可以帮助学会跑,学习识别椅子的知识可以用到识别桌子的学习,我们可以在相关的学习任务之间迁移通用的知识。此外,由于使用共享表示,多个任务同时进行预测时,减少了数据来源的数量以及整体模型参数的规模,使预测更加高效。因此,在多个应用领域中,可以利用多任务学习来提高效果或性能,比如垃圾邮件过滤、网页检索、自然语言处理、图像识别、语音识别等。
    归纳偏执(inductive bias):归纳迁移的目标是利用额外的信息来源来提高当前任务的学习性能,包括提高泛化准确率、学习速度和学习的模型的可理解性。提供更强的归纳偏执是迁移提高泛化能力的一种方法,可以在固定的训练集上产生更好的泛化能力,或者减少达到同等性能水平所需要的训练样本数量。归纳偏执会导致一个归纳学习器更偏好一些假设,多任务学习正是利用隐含在相关任务训练信号中的信息作为一个归纳偏执来提高泛化能力。归纳偏置的作用就是用于指导学习算法如何在模型空间中进行搜索,搜索所得模型的性能优劣将直接受到归纳偏置的影响,而任何一个缺乏归纳偏置的学习系统都不可能进行有效的学习。不同的学习算法(如决策树,神经网络,支持向量机等)具有不同的归纳偏置,人们在解决实际问题时需要人工地确定采用何种学习算法,实际上也就是主观地选择了不同的归纳偏置策略。一个很直观的想法就是,是否可以将归纳偏置的确定过程也通过学习过程来自动地完成,也就是采用“学习如何去学(learning to learn)”的思想。多任务学习恰恰为上述思想的实现提供了一条可行途径,即利用相关任务中所包含的有用信息,为所关注任务的学习提供更强的归纳偏置。


    详解

    1.从机器学习的角度来看,我们将多任务学习视为一种归约迁移(inductive transfer)。归约迁移(inductive transfer)通过引入归约偏置(inductive bias)来改进模型,使得模型更倾向于某些假设。举例来说,常见的一种归约偏置(Inductive bias)是L1正则化,它使得模型更偏向于那些稀疏的解。在多任务学习场景中,归约偏置(Inductive bias)是由辅助任务来提供的,这会导致模型更倾向于那些可以同时解释多个任务的解,这样做会使得模型的泛化性能更好。

    2.深度学习中两种多任务学习模式:隐层参数的硬共享与软共享
    (1)参数的硬共享机制:参数的硬共享机制是神经网络的多任务学习中最常见的一种方式,一般来讲,在实际应用中,通常通过在所有任务之间共享隐藏层,同时保留几个特定任务的输出层来实现。硬共享机制降低了过拟合的风险。事实上,有文献证明了这些共享参数过拟合风险的阶数是N,其中N为任务的数量,比任务相关参数的过拟合风险要小。直观来将,这一点是非常有意义的。越多任务同时学习,我们的模型就能捕捉到越多任务的同一个表示,从而导致在我们原始任务上的过拟合风险越小。
    (2)参数的软共享机制(基于约束的共享(regularization based)):每个任务都由自己的模型,自己的参数。在共享 Soft 参数时,每个任务都有自己的参数和模型。模型参数之间的距离是正则化的,以便鼓励参数相似化。我们对模型参数的距离进行正则化来保障参数的相似。如有文献使用L2距离正则化,而也有文献使用迹正则化(trace norm)。用于深度神经网络中的软共享机制的约束很大程度上是受传统多任务学习中正则化技术的影响。约束深度神经网络 Soft 参数共享的思想受到了 MTL 正则化技术的极大启发,这种思想已经用于其它模型开发。

    3.多任务学习的有效性
    由于所有任务都或多或少存在一些噪音,例如,当我们训练任务A上的模型时,我们的目标在于得到任务A的一个好的表示,而忽略了数据相关的噪音以及泛化性能。由于不同的任务有不同的噪音模式,同时学习到两个任务可以得到一个更为泛化的表示(As different tasks have different noise patterns, a model that learns two tasks simultaneously is able to learn a more general representations.)。如果只学习任务A要承担对任务A过拟合的风险,然而同时学习任务A与任务B对噪音模式进行平均,可以使得模型获得更好表示F;
    若任务噪音严重,数据量小,数据维度高,则对于模型来说区分相关与不相关特征变得困难。多任务有助于将模型注意力集中在确实有影响的那些特征上,是因为其他任务可以为特征的相关与不相关性提供额外的证据;
    对于任务B来说很容易学习到某些特征G,而这些特征对于任务A来说很难学到。这可能是因为任务A与特征G的交互方式更复杂,或者因为其他特征阻碍了特征G的学习。通过多任务学习,我们可以允许模型窃听(eavesdrop),即使用任务B来学习特征G;
    多任务学习更倾向于学习到一类模型,这类模型更强调与其他任务也强调的那部分表示。由于一个对足够多的训练任务都表现很好的假设空间,对来自于同一环境的新任务也会表现很好,所以这样有助于模型展示出对新任务的泛化能力;
    单任务学习时,梯度的反向传播倾向于陷入局部极小值。多任务学习中不同任务的局部极小值处于不同的位置,通过相互作用,可以帮助隐含层逃离局部极小值;
    添加的任务可以改变权值更新的动态特性,可能使网络更适合多任务学习。比如,多任务并行学习,提升了浅层共享层(shared representation)的学习速率,可能,较大的学习速率提升了学习效果;
    正则化机制:多任务学习通过引入归纳偏置(inductive bias)起到与正则化相同的作用。正是如此,它减小了模型过拟合的风险,同时降低了模型的Rademacher复杂度,即拟合随机噪音的能力。

    4.多任务学习MTL 有很多形式:联合学习(joint learning)、自主学习(learning to learn)和带有辅助任务的学习(learning with auxiliary task)等都可以指 MTL。一般来说,优化多个损失函数就等同于进行多任务学习(与单任务学习相反)。这些情况有助于你明确地思考如何在 MTL 方面做尝试并从中获得启发。

    5.多任务学习与其他学习算法之间的关系
    迁移学习:自1995年以来,迁移学习吸引了众多的研究者的目光,迁移学习有很多其他名字:学习去学习(Learning to learn)、终身学习(life-long learning)、推导迁移(inductive transfer)、知识强化(knowledge consolidation)、上下文敏感性学习(context-sensitive learning)、基于知识的推导偏差(knowledge-based inductive bias)、累计/增量学习(increment / cumulative learning)等。在机器学习、深度学习和数据挖掘的大多数任务中,会假设training和inference时,采用的数据服从相同的分布(distribution)、来源于相同的特征空间(feature space)。但在现实应用中,这个假设很难成立,往往遇到一些问题:

    a.带标记的训练样本数量有限。比如,处理A领域(target domain)的分类问题时,缺少足够的训练样本。同时,与A领域相关的B(source domain)领域,拥有大量的训练样本,但B领域与A领域处于不同的特征空间或样本服从不同的分布。
    b.数据分布会发生变化。数据分布与时间、地点或其他动态因素相关,随着动态因素的变化,数据分布会发生变化,以前收集的数据已经过时,需要重新收集数据,重建模型。

    多任务学习是针对数据给出多个监督信息(标签)进行学习,例如识别一张图像中的脸是否是人脸、脸部表情、性别、年龄等,识别图像中车的颜色、车型、姿态等,都属于多任务分类。
    多标签学习(Multilabel learning)是多任务学习中的一种,建模多个label之间的相关性,同时对多个label进行建模,多个类别之间共享相同的数据/特征。
    多类别学习(Multiclass learning)是多标签学习任务中的一种,对多个相互独立的类别(classes)进行建模。这几个学习之间的关系如下图所示:
    这里写图片描述


    6.实例介绍

    (1)人脸识别:多任务学习给出多个监督信息(标签),利用任务之间的相关性互相促进。香港中文大学汤晓鸥组发表在NIPS14的论文《Deep Learning Face Representation by Joint Identification-Verification》,提出了一种联合训练人脸确认损失和人脸分类损失的多任务人脸识别网络DeepID2(Deep IDentification-verification features)。DeepID2中共有两个损失函数,分别为人脸分类损失函数和人脸验证loss。结合两个损失学习效果会更好,原因是:分类任务旨在区分不同类,理论上,只要类别不同学习到的特征肯定不同,重点在于扩大类间距离,而验证这个任务从另一个方面提取特征:缩小类内距离扩大类间相对距离!但是后者提取到的特征不能用于分类,只能做二值区分。所以说两个任务具有一定的互补性!
    这里写图片描述

    (2)脸部特征点检测:脸部特征点检测受遮挡和姿势变化等问题的影响,:通过多任务学习具有提高检测健壮性的可能性,而不是把检测任务视为单一和独立的问题。多任务学习希望把优化脸部特征点检测和一些不同但细微相关的任务结合起来,比如头部姿势估计和脸部属性推断。脸部特征点检测不是一个独立的问题,它的预测会被一些不同但细微相关的因素影响。比如一个正在笑的孩子会张开嘴,有效地发现和利用这个相关的脸部属性将帮助更准确地检测嘴角。
    如下图,一个TCDCN模型,除了检测特征点任务,还有识别眼镜、笑脸、性别和姿态这四个辅助任务,通过与其它网络的对比,可以看出辅助任务使主任务的检测更准确。
    这里写图片描述

    TCDCN通过随机梯度下降进行学习,不同的任务有不同的损失函数和学习难度,因此有不同的收敛速度,网络结构如下图所示。早期的方法通过探索任务之间的关系,比如学习所有任务权重的协方差矩阵来解决收敛速度不同的问题,但是这种方法只能在所有任务的损失函数相同时才能应用。TCDCN采用一种尽快停止辅助任务的方法避免这些任务对训练集过拟合后影响主任务的学习:即在训练开始时,TCDCD受所有任务的约束,避免陷入不好的局部最优;随着训练的进行,有些辅助任务将不再使主任务受益,它们的学习过程将被停止。
    这里写图片描述

    (3)目标检测: Fast R-CNN。Fast R-CNN 是一个物体检测的快速的基于区域的卷积网络,其中也有多任务深度学习的应用,图中展示了Fast R-CNN的网络结构。一张图片和多个RoI(感兴趣区域)输入到一个全卷积网络,每个RoI会进入一个固定大小的feature map,然后被全连接层映射到一个特征向量。每个RoI有两个输出:softmax概率和每个分类的矩形框回归补偿。

    这里写图片描述
    一个Fast R-CNN网络有两个输出层:第一个输出K+1个分类的概率分布;第二个输出每个分类的边框回归补偿。每个训练RoI标注为一个参考标准分类u和一个参考标准边框回归对象v,在每个标注的RoI用多任务损失函数L来共同训练分类和矩形框回归。


    总结
    现实世界中很多问题不能分解为一个一个独立的子问题,即使可以分解,各个子问题之间也是相互关联的,通过一些共享因素或共享表示(share representation)联系在一起。把现实问题当做一个个独立的单任务处理,忽略了问题之间所富含的丰富的关联信息。多任务学习就是为了解决这个问题而诞生的。把多个相关(related)的任务(task)放在一起学习。这样做真的有效吗?答案是肯定的。多个任务之间共享一些因素,它们可以在学习过程中,共享它们所学到的信息,这是单任务学习所具备的。相关联的多任务学习比单任务学习能去的更好的泛化(generalization)效果。

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

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

    多任务学习将会在越来越多的领域作为一种提高神经网络学习能力的手段被广泛应用。 深度学习网络是具有多个隐层的神经网络,在深度学习网络中应用多任务学习是一种很自然的想法。机器视觉领域有广泛的多任务学习应用,主要方式包括:
    多个任务并行输出;
    同时做分类和回归或使用不同的损失函数
    多个任务如流水线般,辅助任务附加在主任务后面。


    Reference
    机器之心:https://www.jiqizhixin.com/articles/2017-06-23-5
    [1] T. Evgeniouand M. Pontil. Regularized multi-task learning. In Proceeding of thetenth ACM SIGKDD international conference on Knowledge Discovery and DataMining, 2004.

    [2] T. Jebara. MultitaskSparsity via Maximum Entropy Discrimination. In Journal of Machine LearningResearch, (12):75-110, 2011.

    [3] A. Argyriou,T. Evgeniou and M. Pontil. Convex multitask feature learning. In MachineLearning, 73(3):243-272, 2008.

    [4] T. G. Dietterich, L. Pratt, and S. Thrun, Eds., “Machine Learning – Special issue on inductive transfer,” Mach Learn, vol. 28, no. 1, 1997.

    [5] L. Holmstrom and P. Koistinen, “Using additive noise in back-propagation training,” IEEE Trans. Neural Netw., vol. 3, no. 1, pp. 24–38, Jan. 1992.

    [6] Z. Zhang, P. Luo, C. C. Loy, and X. Tang, “Facial Landmark Detection by Deep Multi-task Learning,” in Computer Vision – ECCV 2014: 13th European Conference, Zurich, Switzerland, September 6-12, 2014, Proceedings, Part VI, D. Fleet, T. Pajdla, B. Schiele, and T. Tuytelaars, Eds. Cham: Springer International Publishing, 2014, pp. 94–108.

    [7] Y. Sun, Y. Chen, X. Wang, and X. Tang, “Deep Learning Face Representation by Joint Identification-Verification,” in Advances in Neural Information Processing Systems 27, Z. Ghahramani, M. Welling, C. Cortes, N. D. Lawrence, and K. Q. Weinberger, Eds. Curran Associates, Inc., 2014, pp. 1988–1996.

    [8] G. B. Huang, M. Ramesh, T. Berg, and E. Learned-Miller, “Labeled faces in the wild: A database for studying face recognition in unconstrained environments,” Technical Report 07-49, University of Massachusetts, Amherst, 2007.

    [9] R. Girshick, “Fast R-CNN,” in The IEEE International Conference on Computer Vision (ICCV), 2015.

    展开全文
  • 深度学习笔记(19) 多任务学习

    万次阅读 2019-06-16 08:47:49
    多任务学习概念、物体检测的多任务学习多任务学习的条件


    1. 多任务学习概念

    在迁移学习中,步骤是串行的,从任务A里学习只是然后迁移到任务B

    在多任务学习中,步骤是同时开始学习的
    试图让单个神经网络同时做几件事情
    然后希望这里每个任务都能帮到其他所有任务


    2. 物体检测的多任务学习

    来看一个例子,假设在研发无人驾驶车辆
    那么无人驾驶车可能需要同时检测不同的物体
    比如检测行人、车辆、停车标志,还有交通灯等其他各种东西

    比如在下边边这个例子中,图像里有个停车标志,然后图像中有辆车,但没有行人,也没有交通灯

    在这里插入图片描述
    如果输入图像是x(i),那么这里不再是1个标签y(i),而是有4个标签
    也许y^((i))的维数会更高,现在就先用4个
    所以 y^((i))是个4×1向量

    如果从整体来看这个训练集标签和以前类似
    将训练集的标签水平堆叠起来,像这样 y(1)一直到 y(m)

    在这里插入图片描述
    不过现在y(i)是4×1向量
    所以这些都是竖向的列向量
    所以这个矩阵Y现在变成4×m矩阵
    而之前,当y是单实数时,这就是1×m矩阵

    那么现在可以做的是训练一个神经网络,来预测这些y值
    输入x,现在输出是一个四维向量y
    请注意,这里输出画了四个节点
    第一个节点就是想预测图中有没有行人,第二个输出节点预测的是有没有车,这里预测有没有停车标志,这里预测有没有交通灯,所以这里^y是四维的
    在这里插入图片描述
    训练神经网络,需要定义神经网络的损失函数,对于一个输出^y,是个4维向量,对于整个训练集的平均损失:
    在这里插入图片描述
    4j=1 LL(yj(i) ,yj(i))是单个预测的损失
    所以这是对四个分量的求和,行人、车、停车标志、交通灯
    这个标志LL 指的是 logistic损失:
    在这里插入图片描述

    这与softmax回归的主要区别在于, softmax是将单个标签分配给单个样本
    然后发现,训练一个神经网络做四件事情会比训练四个完全独立的神经网络分别做四件事性能要更好


    3. 多任务学习的条件

    1. 如果训练的一组任务,可以共用低层次特征
      对于无人驾驶的例子,同时识别交通灯、汽车和行人是有道理的
      这些物体有相似的特征

    2. 如果每个任务的数据量很接近(这个准则没有那么绝对,所以不一定是对的)
      在多任务学习中,通常有更多任务而不仅仅是两个
      但比如说要完成100个任务,而要做多任务学习
      尝试同时识别100种不同类型的物体
      可能会发现,每个任务大概有1000个样本
      所以如果专注加强单个任务的性能
      比如专注加强第100个任务的表现,用A100表示
      如果试图单独去做这个最后的任务,只有1000个样本去训练这个任务
      但这只是100项任务之一
      而通过在其他99项任务的训练,加起来一共100k个样本,大幅提升算法性能
      如果有对称性,其他99个任务
      也许能提供一些数据或提供一些知识来帮到这100个任务中的每一个任务
      所以第二点不是绝对正确的准则,但通常会看的是如果专注于单项任务
      如果想要从多任务学习得到很大性能提升
      那么其他任务加起来必须要有比单个任务大得多的数据量

    3. 当训练一个足够大的神经网络,同时做好所有的工作
      所以多任务学习的替代方法是为每个任务训练一个单独的神经网络
      所以不是训练单个神经网络同时处理行人、汽车、停车标志和交通灯检测
      可以训练一个用于行人检测,一个用于汽车检测,一个用于停车标志检测和一个用于交通信号灯检测的神经网络

    多任务学习会降低性能的唯一情况和训练单个神经网络相比性能更低的情况
    就是神经网络还不够大
    但如果可以训练一个足够大的神经网络
    那么多任务学习肯定不会或者很少会降低性能
    都希望它可以提升性能,比单独训练神经网络来单独完成各个任务性能要更好

    多任务学习能让训练一个神经网络来执行许多任务
    这可以带来更高的性能,比单独完成各个任务更高的性能
    但要注意,实际上迁移学习比多任务学习使用频率更高


    参考:

    《神经网络和深度学习》视频课程


    相关推荐:

    深度学习笔记(18) 迁移学习
    深度学习笔记(17) 误差分析(二)
    深度学习笔记(16) 误差分析(一)
    深度学习笔记(15) 人的表现
    深度学习笔记(14) 评估指标


    谢谢!

    展开全文
  • TensorFlow 多任务学习

    千次阅读 2018-09-13 12:12:22
    多任务学习 多任务学习,顾名思义,就是多个任务模型同时执行,进行模型的训练,利用模型的共性部分来简化多任务的模型,实现模型之间的融合与参数共享,可以在一定程度上优化模型的运算,提高计算机的效率,但模型...

    多任务学习

    多任务学习,顾名思义,就是多个任务模型同时执行,进行模型的训练,利用模型的共性部分来简化多任务的模型,实现模型之间的融合与参数共享,可以在一定程度上优化模型的运算,提高计算机的效率,但模型本身并没有什么改变。

    多任务学习的核心在于如何训练上:

    • 交替训练
    • 联合训练

    通过一个简单的线性变换来展示多任务学习模型的运用。

    首先,导入需要的包

    import tensorflow as tf
    import numpy as np

    使用numpy制造两组假数据

    x_data = np.float32(np.random.rand(2, 100))  # 随机输入
    y1_data = np.dot([0.100, 0.200], x_data) + 0.300
    y2_data = np.dot([0.500, 0.900], x_data) + 3.000

    构造两个线性模型

    b1 = tf.Variable(tf.zeros([1]))
    W1 = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
    y1 = tf.matmul(W1, x_data) + b1
    
    b2 = tf.Variable(tf.zeros([1]))
    W2 = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
    y2 = tf.matmul(W2, x_data) + b2

    计算方差,使方差最小化,使模型不断的靠近真实解

    # 最小化方差
    loss1 = tf.reduce_mean(tf.square(y1 - y1_data))
    loss2 = tf.reduce_mean(tf.square(y2 - y2_data))

    构造优化器

    # 构建优化器
    optimizer = tf.train.GradientDescentOptimizer(0.5)
    train1 = optimizer.minimize(loss1)
    train2 = optimizer.minimize(loss2)

     交替训练

    基本思想:使两个模型交替进行训练

    # 初始化全局变量
    init = tf.global_variables_initializer()
    
    
    # 启动图 (graph)
    with tf.Session() as sess:
        sess.run(init)
        for step in range(1, 1001):
    
            if np.random.rand() < 0.5:
                sess.run(train1)
                print(step, 'W1,b1:', sess.run(W1), sess.run(b1))
            else:
                sess.run(train2)
                print(step, 'W2,b2:', sess.run(W2), sess.run(b2))

    输出结果为:

     从最终的结果可以看出W1,W2,b1,b2已经非常接近真实值了,说明模型的建立还是非常有效的。

    联合训练

    基本思想:将两个模型的损失函数结合起来,共同进行优化训练

    # 联合训练
    loss = loss1 + loss2
    # 构建优化器
    optimizer = tf.train.GradientDescentOptimizer(0.5)
    train = optimizer.minimize(loss)
    
    # 初始化全局变量
    init = tf.global_variables_initializer()
    
    # 启动图
    with tf.Session() as sess:
        sess.run(init)
        for step in range(1, 300):
            sess.run(train)
            print(step, 'W1,b1,W2,b2:', sess.run(W1), sess.run(b1), sess.run(W2), sess.run(b2))

    输出结果为:

    从结果可以看出模型的参数不断的接近真实值。

    应用场景

    当你需要同一组数据集去处理不同的任务时,交替训练是一个很好地选择。

    当两个甚至多个任务需要联合考虑时,为了整体的最优而放弃局部最优的时候,使用联合训练非常的合适。

     

    欢迎关注和评论!

    展开全文
  • 多任务学习方法

    2019-10-11 12:07:12
    多任务学习:   故名思意,就是多个任务一起学习。为什么要进行多任务学习呢?因为现实中样本采样的成本较高,而训练样本不足常常会出现过拟合的现象,而将多个相关任务同时学习,通过共享某个共同的知识可以提高...

      最近一直在做多任务,但是效果好象没什么提升,因为都是凭自己的想法和感觉在做。于是上网查找了一些这方面的资料,寻求一些理论上的支撑和前人经验上的帮助。

    多任务学习:

      故名思意,就是多个任务一起学习。为什么要进行多任务学习呢?因为现实中样本采样的成本较高,而训练样本不足常常会出现过拟合的现象,而将多个相关任务同时学习,通过共享某个共同的知识可以提高各任务的泛化效果

    分类:

    在这里插入图片描述
      基于软共享的深度多任务学习在这里插入图片描述
      基于硬共享的深度多任务学习
    在这里插入图片描述

    一些问题:

    1、损失的整合

      为多个任务定义一个损失函数,若将每个任务的损失进行简单相加,由于不同任务的收敛速度不同,可能某一任务的收敛得到不错的效果,而其他任务表现却很差。
      简单的解决办法是将简单相加变为加权相加,但这样会不时进行调参。
      论文《Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics》,提出引入不确定性来确定损失的权重:在每个任务的损失函数中学习另一个噪声参数(noise parameter)。此方法可以接受多任务(可以是回归和分类),并统一所有损失的尺度。这样就能像一开始那样,直接相加得到总损失了。该方法不仅可以得到很好的结果而且不需要考虑额外的权重超参数。

    2、调节学习速率
      学习速率是最重要的超参数之一。我们发现,任务 A 和任务 B 各自合适的速率可能是不同的。这时,我们可以在各个任务的子网络(基于硬共享的深度多任务学习)分别调节各自的学习速率,而在共享网络部分,使用另一个学习速率。
      虽然听上去很复杂,但其实非常简单。通常,在利用 TensorFlow 训练神经网络时,使用的是:

    optimizer = tf.train.AdamOptimizer(learning_rate).minimize(loss)

      AdamOptimizer 定义如何应用梯度,而 minimize 则完成具体的计算和应用。我们可以将 minimize 替换为我们自己的实现方案,在应用梯度时,为计算图中的各变量使用各自适合的学习速率。

    all_variables = shared_vars + a_vars + b_vars
    all_gradients = tf.gradients(loss, all_variables)
    
    shared_subnet_gradients = all_gradients[:len(shared_vars)]
    a_gradients = all_gradients[len(shared_vars):len(shared_vars + a_vars)]
    b_gradients = all_gradients[len(shared_vars + a_vars):]
    
    shared_subnet_optimizer = tf.train.AdamOptimizer(shared_learning_rate)
    a_optimizer = tf.train.AdamOptimizer(a_learning_rate)
    b_optimizer = tf.train.AdamOptimizer(b_learning_rate)
    
    train_shared_op = shared_subnet_optimizer.apply_gradients(zip(shared_subnet_gradients, shared_vars))
    train_a_op = a_optimizer.apply_gradients(zip(a_gradients, a_vars))
    train_b_op = b_optimizer.apply_gradients(zip(b_gradients, b_vars))
    
    train_op = tf.group(train_shared_op, train_a_op, train_b_op)  

    注:这个技巧其实在单任务网络中也很实用

    3、将估计作为特征
      当完成第一阶段的工作,为预测多任务创建好神经网络后,我们可能希望将某一个任务得到的估计(estimate)作为另一个任务的特征。在前向传递(forward-pass)中,这非常简单。但在反向传播中呢?
      假设将任务 A 的估计作为特征输入给 B,我们可能并不希望将梯度从任务 B 传回任务 A,因为我们已经有了任务 A 的标签。对此,TensorFlow 的 API 所提供的 tf.stop_gradient 会有所帮助。在计算梯度时,它允许你传入一个希望作为常数的张量列表,这正是我们所需要的。

    all_gradients = tf.gradients(loss, all_variables, stop_gradients=stop_tensors)    

    不止如此,该技术可用在任何你希望利用 TensorFlow 计算某个值并将其作为常数的场景。

    我的一些想法:

    关于多个任务的训练,应该也可以不统一成一个损失函数,各个任务拥有自己的损失函数即可。
    这样可以分别找到适合各个任务的学习速率,和迭代次数,然后进行次数不同迭代即可。
    比如:
    任务A需要迭代100次才收敛:optimizer1 = tf.train.AdamOptimizer(learning_rate1).minimize(loss1)
    任务B需要迭代10次收敛:optimizer2 = tf.train.AdamOptimizer(learning_rate2).minimize(loss2)

    # 训练:
    for epoch in range(100):
        # Task A
        sess.run([optimizer1], feed_dict1)
        # Task B
        if epoch % 10 == 0:
            sess.run([optimizer2], feed_dict2)

    【当然这部分只是我的想法啦!没什么科学依据】

    参考资料:

    什么是多任务学习
    深度神经网络中的多任务学习汇总
    关于深度多任务学习的 3 点经验

    展开全文
  • MMoE 多任务学习

    千次阅读 2020-02-15 12:13:33
    底层共享,上层拆塔,是多任务学习的常规实现. 论文提出了使用多个expert(其实就是DNN), 并使用多个gate(expert_num 的 softmax) 的架构设计, 直观明了. 网络结构 图: 多任务学习的网络架构演化, c 为MMoE网络架构 ...
  • 基于神经网络的多任务学习已经过成功应用内许多现实应用中,比如说之前我们介绍的阿里巴巴基于多任务联合学习的 ESMM 算法,其利用多任务学习解决了 CVR 中样本选择偏差和样本稀疏这两大问题,并在实际应用场景中...
  • 多任务学习综述

    2019-12-17 09:27:38
    An overview of multi-task ...多任务学习(multi-task learning, MTL)是机器学习中一个很有前途的领域,其目的是通过利用多个相关学习任务之间的有用信息来提高它们的性能。本文首先给出了MTL的定义,对MTL进行...
  • 多任务学习与深度学习

    千次阅读 2018-04-25 15:40:21
    多任务学习是机器学习的一个子领域,学习的目标是同事执行多个相关任务。比如,系统会同时执行学习两项任务,以便这两项任务都有助于别的任务的学习。这是模仿人类智能的一种方式,即人类如何同时执行多项任务。例如...
  • 1、单任务学习VS多任务学习 单任务学习:一次只学习一个任务(task),大部分的机器学习任务都属于单任务学习。 多任务学习:把多个相关(related)的任务放在一起学习,同时学习多个任务。 多任务学习...
  • 多核学习既可以用在多任务学习,也可以用在多视图学习,也有研究同时对多任务和多视图同时采用多核的,目前已经有通用多任务多核学习方法。如果将多核用在多任务学习,相当于不同任务共享子空间的同时,还有各自特有...
  • 文章目录迁移学习多任务学习端到端学习端到端学习的优点端到端学习的缺点: 迁移学习 迁移学习(Transfer Learnining)是将一个神经网络从一个任务中学到的知识和经验,运用到另一个任务中。如下例所示 如上图所示...
  • Tensorflow 多任务学习

    千次阅读 2018-08-15 09:58:58
    keras代码: ... ... 之前在caffe上实现了两个标签的多任务学习,如今换到了tensorflow,也想尝试一下,总的来说也不是很复杂。 建立多任务图 多任务的一个特点是单个tensor输入(X),...
  • 为什么是多任务学习? 当你在思考新事物的时候,他们通常会利用他们以前的经验和获得的知识来加速现在的学习过程。当我们学习一门新语言的时候,尤其是相关的语言时,我们通常会使用我们一级学过的语言知识来加快这...
  • 多任务学习 相关方法

    2019-08-13 20:49:55
    2. 多任务学习好处: i. 提高泛化能力 多人相关任务放在一起学习,有相关的部分,但也有不相关的部分。当学习一个任务(Main task)时,与该任务不相关的部分,在学习过程中相当于是噪声,因此,引入噪声可以提高...
  • 多任务学习:网络结构前言网络一:MultiNet++ 前言    多任务学习(multi-task learning)是未来有研究前景的机器学习领域,目的是利用多个相关学习任务之间的有用信息和共享相关任务之间的特征,提升各子任务的...
  • 多任务学习在推荐中的探索

    万次阅读 2020-03-11 19:08:36
    多任务学习(Multi-task learning)在cv和nlp领域已经得到广泛的应用,无论是经典的maskrcnn—同时预测bounding box的位置和类别,还是称霸nlp的bert—预测某个单词和句子是否相关联,都属于多任务模型。在推荐中是...
  • 对于深度学习而言,训练网络这一过程是相当乏味的,需要不断根据实验结果调整网络结构和模型。...本文将讨论这两种重要方法——迁移学习(Transfer Learning)和多任务学习(Multi-task Learning)...
  • 已经有一篇机器之心翻译的很好的博文介绍多任务学习了: 共享相关任务表征,一文读懂深度神经网络多任务学习,写的非常详细,但是我在看的时候会觉得略有点晦涩。所以我准备写的这篇呢,想用大白话介绍一下多任务...
  • 多任务学习---综述

    千次阅读 2019-04-26 09:51:47
    学界 | 多任务学习概述论文:从定义和方法到应用和原理分析 多任务深度学习的三个经验教训 多任务学习-An Overview of Multi-Task Learning in Deep Neural Networks论文笔记 【深度学习】多任务学习概览(An ...
  • 多任务学习-Multitask Learning

    万次阅读 2017-07-12 17:10:16
    1. 单任务学习VS多任务学习原文地址单任务学习:一次只学习一个任务(task),大部分的机器学习任务都属于单任务学习。多任务学习:把多个相关(related)的任务放在一起学习,同时学习多个任务。现在大多数机器学习...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,258
精华内容 14,903
关键字:

多任务学习