深度学习中的多任务学习(一)

article/2025/11/8 13:17:55

任务学习-Multitask Learning概述

Reference
https://blog.csdn.net/u010417185/article/details/83065506

1、单任务学习VS多任务学习

  • 单任务学习:一次只学习一个任务(task),大部分的机器学习任务都属于单任务学习。
  • 多任务学习:把多个相关(related)的任务放在一起学习,同时学习多个任务。

多任务学习(multitask learning)产生的原因?

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

单任务与多任务对比如图1所示:
在这里插入图片描述
从图1中可以发现,单任务学习时,各个任务之间的模型空间(Trained Model)是相互独立的(图1上)。多任务学习时,多个任务之间的模型空间(Trained Model)是共享的(图1下)。

假设用含一个隐含层的神经网络来表示学习一个任务,单任务学习和多任务学习可以表示成如图2所示。
在这里插入图片描述
从图二可以发现,单任务学习时,各个task任务的学习是相互独立的,多任务学习时,多个任务之间的浅层表示共享(shared representation)。

2、多任务学习的定义

多任务学习(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. 多任务学习 :共享相关任务表征

**定义:**基于共享表示(shared representation),把多个相关的任务放在一起学习的一种机器学习方法。

也就是说,基于某些层的参数共享,训练几个具有相似性的任务,然后给出每个任务的分类结果。

**举例:**比如我们要识别一张图像中的脸是否是人脸、哪种脸部表情、性别、年龄段。针对这个问题,可以用单个模型来预测单个任务,但是可能在数据量不够的情况下,可能会导致过拟合,但是由于这几个任务之间存在一些联系,因此可以考虑用多任务学习,让模型同时给出多个任务的结果。

在实际应用中,通常通过在所有任务之间共享隐藏层,同时保留几个特定任务的输出层来实现。

多任务学习涉及多个相关的任务同时并行学习,梯度同时反向传播,多个任务通过底层的共享表示(shared representation)来互相帮助学习,提升泛化效果。

网络结构

硬共享机制:
在一个基学习器的最后一层加上多个特定的输出层,如softmax或者Dense层
在这里插入图片描述
Soft 参数共享机制
另一方面,在共享 Soft 参数时,每个任务都有自己的参数和模型。模型参数之间的距离是正则化的,以便鼓励参数相似化。例如使用 L2 距离进行正则化
在这里插入图片描述
硬共享机制实现:
【例1】
https://blog.csdn.net/weixin_39713335/article/details/110599926

from keras.layers import Input,LSTM,Bidirectional,Dense,Dropout,Concatenate,Embedding,GlobalMaxPool1D
from keras.models import Model
from keras_contrib.layers import CRF
import keras.backend as K
from keras.utils import plot_modelK.clear_session()
maxlen = 40#输入
inputs = Input(shape=(maxlen,768),name="sen_emb")
pos1_en = Input(shape=(maxlen,),name="pos_en1_id")
pos2_en = Input(shape=(maxlen,),name="pos_en2_id")
pos1_emb = Embedding(maxlen,8,input_length=maxlen,name = "pos_en1_emb")(pos1_en)
pos2_emb = Embedding(maxlen,8,input_length=maxlen,name = "pos_en2_emb")(pos2_en)
x = Concatenate(axis=2)([inputs,pos1_emb,pos2_emb])#参数共享部分
x = Bidirectional(LSTM(128,return_sequences=True))(x)   #双向LSTM#任务一,10分类的文本分类任务
out1 = GlobalMaxPool1D()(x)
out1 = Dense(64, activation='relu')(out1)
out1 = Dropout(0.5)(out1)
out1 = Dense(10, activation='softmax',name = "out1")(out1)#任务二,实体识别任务
crf = CRF(2, sparse_target=True,name ="crf_output")
crf_output = crf(x)#模型有两个输出out1,crf_output
model = Model(inputs=[inputs,pos1_en,pos2_en], outputs=[out1,crf_output])
model.summary()###模型有两个loss,categorical_crossentropy和crf.loss_function
model.compile(optimizer='adam',loss={'out1': 'categorical_crossentropy','crf_output': crf.loss_function},loss_weights={'out1':1, 'crf_output': 1},metrics=["acc"])plot_model(model,to_file="model.png")

在这里插入图片描述
【例2】
https://blog.csdn.net/u010159842/article/details/83034297

# create the base pre-trained model
input_tensor = Input(shape=(299, 299, 3))
base_model = Xception(include_top=True, weights='imagenet', input_tensor=None, input_shape=None)
plot_model(base_model, to_file='xception_model.png')
base_model.layers.pop()
base_model.outputs = [base_model.layers[-1].output]
base_model.layers[-1].outbound_nodes = []
base_model.output_layers = [base_model.layers[-1]]feature = base_model
img1 = Input(shape=(299, 299, 3), name='img_1')
img2 = Input(shape=(299, 299, 3), name='img_2')feature1 = feature(img1)
feature2 = feature(img2)# Three loss functions
category_predict1 = Dense(100, activation='softmax', name='ctg_out_1')(Dropout(0.5)(feature1)
)
category_predict2 = Dense(100, activation='softmax', name='ctg_out_2')(Dropout(0.5)(feature2)
)
dis = Lambda(eucl_dist, name='square')([feature1, feature2])
judge = Dense(2, activation='softmax', name='bin_out')(dis)
model = Model(inputs=[img1, img2], outputs=[category_predict1, category_predict2, judge])
model.compile(optimizer=SGD(lr=0.0001, momentum=0.9),loss={'ctg_out_1': 'categorical_crossentropy','ctg_out_2': 'categorical_crossentropy','bin_out': 'categorical_crossentropy'},loss_weights={'ctg_out_1': 1.,'ctg_out_2': 1.,'bin_out': 0.5},metrics=['accuracy'])

【例3】
https://blog.csdn.net/xiadimichen14908/article/details/89376791
keras多任务学习背景

给定输入狗图片,希望得到类别和年龄这两个分类task的结果,模型主要包括

模型共享一个backbone,这里选择使用resnet,并且用在imagenet训练的结果作为pretrain model,加载模型,也就是这里的my_new_model
设计类别和年龄这两个task的分类器. 这里类别分类器为category一共有11类,采用softmax, 年龄分类器为age,一共有3类,都是采用全连接
整体的模型结构就是model,backbone提取的特征分别送进category和age输出不同task的分类概率。model.complie分别设置loss的种类(交叉熵损失,smooth-l1,MSEloss等),multi-task的loss权重,以及评价的metric

resnet_weights_path='resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5'
my_new_model = Sequential()
my_new_model.add(ResNet50(include_top=False, pooling='avg', weights=None))
my_new_model.add(Activation('relu'))
my_new_model.add(Dropout(0.5))
my_new_model.summary()
img1 = Input(shape=(224, 224, 3), name='img')
feature = my_new_model(img1)
category = Dense(11, activation='softmax',name='category_out1')(feature)
age = Dense(3,activation='softmax',name='age_out2')(feature)
model = Model(inputs=[img1], outputs=[category, age])
model.compile(optimizer='sgd',loss={'category_out1': 'categorical_crossentropy','age_out2': 'categorical_crossentropy'},loss_weights={'category_out1': 1.,'age_out2': 1.},metrics=['accuracy'])

http://chatgpt.dhexx.cn/article/MYuPk5Mm.shtml

相关文章

C# 多线程八 任务Task的简单理解与运用二

目录 一.Task 1.AsyncState 2.CompletedTask 3.CreationOptions 4.CurrentId 5.Exception 6.Factory 7.Id 8.IsCanceled 9.IsCompleted 10.IsFaulted 11.Status 二.Task<TResult> 1.Result 上篇&#xff1a; C#…

多任务学习(一)

多任务学习 单任务学习 样本之间没有关联性。 缺点&#xff1a;训练出来的模型不具有泛化性&#xff1b;不共享信息使得学习能力下降。 多任务学习 多任务学习的构建原则 建模任务之间的相关性同时对多个任务的模型参数进行联合学习&#xff0c;挖掘其中的共享信息&#…

多任务学习-Multitask Learning概述

2020-02-22 09:59:48 1、单任务学习VS多任务学习 单任务学习&#xff1a;一次只学习一个任务&#xff08;task&#xff09;&#xff0c;大部分的机器学习任务都属于单任务学习。 多任务学习&#xff1a;把多个相关&#xff08;related&#xff09;的任务放在一起学习&#x…

深度学习之----多任务学习

介绍 在机器学习&#xff08;ML&#xff09;中&#xff0c;通常的关注点是对特定度量进行优化&#xff0c;度量有很多种&#xff0c;例如特定基准或商业 KPI 的分数。为了做到这一点&#xff0c;我们通常训练一个模型或模型组合来执行目标任务。然后&#xff0c;我们微调这些模…

深度学习中的多任务学习介绍

在2017年有一篇关于在深度神经网络中多任务学习概述的论文&#xff1a;《An Overview of Multi-Task Learning in Deep Neural Networks》&#xff0c;论文链接为&#xff1a;https://arxiv.org/pdf/1706.05098.pdf&#xff0c;它介绍了在深度学习中多任务学习(Multi-task Lear…

C# 多线程七 任务Task的简单理解与运用一

目录 一.Task 二.Task中的全局队列和本地队列 三.TaskCreationOptions 枚举 四.CancellationTokenSource/CancellationToken 1.延时取消线程 2.立即取消&#xff1a; 五.Task的三种调用方式 为了防止大家被标题误导 写在前面&#xff1a; Task并不是线程 Task的执行需要…

整理学习之多任务学习

如果有n个任务&#xff08;传统的深度学习方法旨在使用一种特定模型仅解决一项任务&#xff09;&#xff0c;而这n个任务或它们的一个子集彼此相关但不完全相同&#xff0c;则称为多任务学习&#xff08;MTL&#xff09; 通过使用所有n个任务中包含的知识&#xff0c;将有助于改…

多任务学习优化总结 Multi-task learning(附代码)

目录 一、多重梯度下降multiple gradient descent algorithm (MGDA) 二、Gradient Normalization (GradNorm) 三、Uncertainty 多任务学习的优势不用说了&#xff0c;主要是可以合并模型&#xff0c;减小模型体积&#xff0c;只用一次推理也可以加快速度。对于任务表现的提升…

经验 | 训练多任务学习(Multi-task Learning)方法总结

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 转载于&#xff1a;知乎Anticoder https://zhuanlan.zhihu.com/p/59413549 背景&#xff1a;只专注于单个模型可能会忽略一些相关任务中可能提升目标任务的潜在信息&…

多任务学习(Multi-Task Learning)

转自&#xff1a;https://www.cnblogs.com/zeze/p/8244357.html 1. 前言 多任务学习&#xff08;Multi-task learning&#xff09;是和单任务学习&#xff08;single-task learning&#xff09;相对的一种机器学习方法。在机器学习领域&#xff0c;标准的算法理论是一次学习一…

多任务学习 | YOLOP,一个网络同时完成三大任务

关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;ComputerVisionGzq 学习群&#xff5c;扫码在主页获取加入方式 paper: https://arxiv.org/abs/2108.11250 code: https://github.com/hustvl/YOLOP 计算机视觉研究院专栏 作者&#xff1a;Edison_G YOLOP: You Onl…

多任务学习概述

文章目录 前言1 文章信息2 背景、目的、结论2.1 背景2.1.1 多任务的类型分类2.1.1.1 相关任务的分类2.1.1.2 将输入变输出的逆多任务学习2.1.1.3 对抗性多任务学习2.1.1.4 辅助任务提供注意力特征的多任务学习2.1.1.5 附加预测性辅助任务的多任务学习 3 内容与讨论3.1 多任务学…

多任务学习(Multi-task Learning)方法总结

多任务学习&#xff08;multi task learning&#xff09;简称为MTL。简单来说有多个目标函数loss同时学习的就算多任务学习。多任务既可以每个任务都搞一个模型来学&#xff0c;也可以一个模型多任务学习来一次全搞定的。 作者丨Anticoder知乎 链接丨https://zhuanlan.zhihu.co…

浅谈多任务学习

目录 一、前言及定义 二、多任务学习&#xff08;MTL&#xff09;的两种方法 2.1 参数的硬共享机制&#xff08;hard parameter sharing&#xff09; 2.2 参数的软共享机制&#xff08;soft parameter sharing&#xff09; 三、多任务学习模型 3.1 MT-DNN 3.2 ERNIE 2.0…

多任务学习

一、单任务学习和多任务学习 多任务学习是和单任务学习对应的一种机器学习方法。 单任务学习 在单任务学习中&#xff0c;认为不同任务之间是不具有关联性的。因此&#xff0c;每个模型的参数都是独立训练的。这样的学习方法有两个缺陷&#xff1a; 由于每个任务中的训练数据有…

多任务学习 (Multitask Learning) 汇总

1 前言 多任务学习&#xff08;Multi-task learning&#xff09;是和单任务学习&#xff08;single-task learning&#xff09;相对的一种机器学习方法。在机器学习领域&#xff0c;标准的算法理论是一次学习一个任务&#xff0c;也就是系统的输出为实数的情况。复杂的学习问题…

【GANs学习笔记】(十八)LAPGAN、ProGAN、SRGAN

完整笔记&#xff1a;http://www.gwylab.com/note-gans.html ——————————————————————— 4. LapGAN 4.1 LapGAN基本思路 如果我们希望生成高分辨率图像&#xff0c;还有一种GANs可以考虑&#xff0c;那就是LapGAN。LapGAN与StackGAN有着非常类似的思路&…

GAN网络

目录 GAN生成网络G&#xff08;Generative&#xff09;对抗网络D&#xff08;Discriminative&#xff09;两分布之间差异性评价KL散度JS散度 损失函数一次代码实验 WGANWGAN-GPConditional GAN GAN 生成式对抗网络&#xff08;GAN, Generative Adversarial Networks&#xff0…

基于pytorch的SRGAN实现(全网最细!!!)

基于pytorch的SRGAN实现 前言SRGAN论文概要(贡献)网络结构和损失函数pytorch代码实现1. 准备工作1.1 数据下载并放到合适位置 2. 开始训练和测试 源码详解1. 数据集的加载: data_utils.py2. 网络模型&#xff1a; model.py2.1 生成器: Generator2.2 判别器&#xff1a;Discrimi…

超分辨率——基于SRGAN的图像超分辨率重建(Pytorch实现)

基于SRGAN的图像超分辨率重建 本文偏新手项&#xff0c;因此只是作为定性学习使用&#xff0c;因此不涉及最后的定量评估环节 目录 基于SRGAN的图像超分辨率重建1 简要介绍2 代码实现2.1 开发环境2.2 主要流程2.3 构建数据集2.4 构建生成模型&#xff08;Generator&#xff09…