迁移学习和多任务学习

news2024/9/21 2:48:33

迁移学习(Transfer Learning)

深度学习中,最强大的理念之一就是,有的时候神经网络可以从一个任务中习得知识,并将这些知识应用到另一个独立的任务中。
例如,你已经训练好一个能够识别猫的图像的神经网络,然后使用从这个神经网络学习得到的知识,或者部分习得的知识去帮助您更好地阅读x射线扫描图,这就是所谓的迁移学习。

那么迁移学习什么时候是有意义的呢?迁移学习起作用的场合是,在迁移来源问题中你有很多数据,但迁移目标问题你没有那么多数据。例如,假设图像识别任务中你有1百万个样本,所以这里数据相当多。可以学习低层次特征,在神经网络的前面几层学到如何识别很多有用的特征。但是对于放射科任务,也许你只有一百个样本,你的放射学诊断问题数据很少,所以你从图像识别训练中学到的很多知识可以迁移,并且真正帮你加强放射科识别任务的性能。

所以在这种情况下,你是从数据量很多的问题迁移到数据量相对小的问题。然而反过来的话,迁移学习可能就没有意义了。比如,你用100张图训练图像识别系统,然后有100甚至1000张图用于训练放射科诊断系统,为了提升放射科诊断的性能,那么用放射科图像训练可能比使用猫和狗的图像更有价值。所以,如果你的放射科数据更多,那么你这100张猫猫狗狗或者随机物体的图片肯定不会有太大帮助,因为来自猫狗识别任务中,每一张图的价值肯定不如一张 X 射线扫描图有价值,对于建立良好的放射科诊断系统而言是这样。

所以总结一下,什么时候迁移学习是有意义的?如果你想从任务 A 学习并迁移一些知识到任务 B ,那么当任务 A 和任务 B 都有同样的输入 x 时,迁移学习是有意义的。在上面的例子中, A 和 B 的输入都是图像。当任务 A 的数据比任务 B 多得多时,迁移学习意义更大。所有这些假设的前提都是,你希望提高任务 B 的性能,因为任务 B 每个数据更有价值,对任务 B 来说通常任务 A 的数据量必须大得多,才有帮助,因为任务 A 里单个样本的价值没有比任务 B 单个样本价值大。然后如果你觉得任务 A 的低层次特征,可以帮助任务 B 的学习,那迁移学习更有意义一些。

多任务学习

在迁移学习中,你的步骤是串行的,你从任务 A 里学习知识然后迁移到任务 B 。在多任务学习中,你是同时开始学习的,试图让单个神经网络同时做几件事情,然后希望这里每个任务都能帮到其他所有任务。
在这里插入图片描述假设你在研发无人驾驶车辆,你的无人驾驶车可能需要同时检测不同的物体,比如检测行人、车辆、停车标志,还有交通灯各种其他东西。比如上图图像里有个停车标志,然后图像中有辆车,但没有行人,也没有交通灯。

如果输入图像 x ( i ) x^{(i)} x(i),那么输出不再是一个标签 y ( i ) y^{(i)} y(i),而是有4个标签,所以 y ( i ) y^{(i)} y(i)是个4×1向量。如果你从整体来看这个训练集标签和以前类似,我们将训练集的标签水平堆叠起来,像这样 y ( 1 ) y^{(1)} y(1) y ( m ) y^{(m)} y(m)
在这里插入图片描述
矩阵 Y Y Y 4 × m 4×m 4×m矩阵。

在这里插入图片描述那么你现在可以做的是训练一个神经网络,来预测这些 y 值,你就得到这样的神经网络,输入 x ,现在输出是一个四维向量 y 。这里有四个输出节点,第一个节点就是我们想预测图中有没有行人,然后第二个输出节点预测的是有没有车,然后是停车标志和交通灯,因此 y ^ \hat{y} y^ 是4维的。

要训练这个神经网络,你现在需要定义神经网络的损失函数,对于一个输出 y ^ \hat{y} y^ ,是个4维向量,对于整个训练集的平均损失:
1 m ∑ i = 1 m ∑ j = 1 4 L ( y ^ j ( i ) , y j ( i ) ) \frac{1}{m}\sum_{i=1}^{m}\sum_{j=1}^{4}L(\hat{y}_j^{(i)},y_j^{(i)}) m1i=1mj=14L(y^j(i),yj(i))

∑ j = 1 4 L ( y ^ j ( i ) , y j ( i ) ) \sum_{j=1}^{4}L(\hat{y}_j^{(i)},y_j^{(i)}) j=14L(y^j(i),yj(i)) 这些单个预测的损失,就是对四个分量的求和,标志 L L L 指的是 logistic 损失:
L ( y ^ j ( i ) , y j ( i ) ) = − y j ( i ) log ⁡ y ^ j ( i ) − ( 1 − y j ( i ) ) log ⁡ ( 1 − y ^ j ( i ) ) L(\hat{y}_j^{(i)},y_j^{(i)})=-y_j^{(i)}\log \hat{y}_j^{(i)}-(1-y_j^{(i)})\log(1-\hat{y}_j^{(i)}) L(y^j(i),yj(i))=yj(i)logy^j(i)(1yj(i))log(1y^j(i))

整个训练集的平均损失和之前分类猫的例子主要区别在于,现在你要对 j = 1 到 4 j=1 到 4 j=14求和,这与softmax回归的主要区别在于,softmax将单个标签分配给单个样本。

不是说每张图都只是一张行人图片,汽车图片、停车标志图片或者交通灯图片。你要知道每张照片是否有行人、或汽车、停车标志或交通灯,多个物体可能同时出现在一张图里。实际上,在文章开始的那张图中,同时有车和停车标志,但没有行人和交通灯,所以你不是只给图片一个标签,而是需要遍历不同类型,然后看看每个类型,那类物体有没有出现在图中。如果你训练了一个神经网络,试图最小化这个成本函数,你做的就是多任务学习。

另外你也可以训练四个不同的神经网络,而不是训练一个网络做四件事情。但神经网络一些早期特征,在识别不同物体时都会用到,然后你发现,训练一个神经网络做四件事情会比训练四个完全独立的神经网络分别做四件事性能要更好,这就是多任务学习的力量。

多任务学习什么时候有意义呢?

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

第二点不是绝对正确的准则,如果你专注于单项任务,想要从多任务学习得到很大性能提升,那么其他任务加起来必须要有比单个任务大得多的数据量,这样其他任务的知识才能帮你改善这个任务的性能。

第三是你可以训练一个足够大的神经网络。多任务学习会降低性能的唯一情况,和训练单个神经网络相比性能更低的情况就是你的神经网络还不够大。但如果你可以训练一个足够大的神经网络,那么多任务学习肯定不会或者很少会降低性能。

在实践中,多任务学习的使用频率要低于迁移学习。多任务学习比较少见,在计算机视觉领域,物体检测这个例子是最显著的例外情况。但平均来说,目前迁移学习使用频率更高,比多任务学习频率要高,但两者都可以成为你的强力工具。

所以总结一下,多任务学习能让你训练一个神经网络来执行许多任务,这可以给你更高的性能,比单独完成各个任务更高的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1005652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件设计模式系列之四——简单工厂模式

1 模式的定义 简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,用于对象的创建,它属于工厂模式的一种。简单工厂模式的主要目标是封装对象的创建过程,使客户端代码与具体类的实例化解耦,从而提…

VS CODE改变背景色

1) setting 2) workbench/appearance/color theme,有几种模式可以测试 4)效果 light modern,适合文档中截图 solarized dark 还有RED,吓人啊

数据结构(C语言)——单链表

整体结构如上&#xff1a;看似简单&#xff0c;但第一次用C语言实现还是感觉有点吃力&#xff0c;尤其是特别容易让链表断裂 下面是代码&#xff1a;&#xff08;有链表的增删改查&#xff09; 注&#xff1a;这里E类型是用define将int进行了宏定义 #include <stdio.h> …

西工大 ASLP 实验室在 WeNet 中开源基于 CPPN 的神经网络热词增强语音识别方案

语境偏置&#xff08;Contextual biasing&#xff09;旨在将语境知识集成到语音识别&#xff08;ASR&#xff09;系统中&#xff0c;以提高在相关领域词汇&#xff08;俗称“热词”&#xff09;上的识别准确率。在许多ASR场景中&#xff0c;待识别语音中可能会包含训练数据中数…

双系统ubuntu20.04(neotic版本)从0实现Gazebo仿真slam建图

双系统ubuntu20.04(neotic版本)从0实现Gazebo仿真slam建图 昨晚完成了ROS的多机通讯&#xff0c;还没来得及整理相关操作步骤&#xff0c;在进行实际小车的实验之前&#xff0c;还是先打算在仿真环境中进行测试&#xff0c;熟悉相关的操作步骤&#xff0c;计划通过虚拟机&…

写好技术书籍

写好技术书籍 目录概述需求&#xff1a; 设计思路实现思路分析1.如何写好对应的书籍 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,chal…

多模态情感学习技术

近年来随着深度学习的发展&#xff0c;多种模态的语义表示的壁垒被打破&#xff0c;计算机可以处理和理解的向量形式成为多模态的主要表示形式。 多模态学习技术不是自然语言处理领域独有的技术&#xff0c;在图像处理、视频处理以及智能语音等领域中都能找到多模态相关技术的…

数字电源常用传递函数

文章目录 PID控制器二阶广义积分器PR谐波抑制器陷波器全通滤波器重复控制器连续域离散化的几种方法 有S域和Z域 PID控制器 传递函数&#xff1a; bode图&#xff1a; m代码 %% PID控制器 % 连续域 kp 100; ki 10; kd 10; Ts 1/50000; num [kd kp ki]; den [1 0]; Gpi…

在使用 gson 时,数字被自动转为 double 类型

背景 在将一个 JsonObject 转成 Map<String, Object> 的时候&#xff0c;数字全部被转成了 double 类型&#xff0c; 如下所示&#xff0c;年龄从 2 变成了 2.0&#xff0c;身高正常显示 98.2&#xff0c;登记时间成了 1.694533284627E12 /*** name小红* record_time1.6…

UG\NX二次开发 复制3元素的double数组到另一个数组 UF_VEC3_copy

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 复制3元素的double数组到另一个数组 UF_VEC3_copy。仔细看第二段代码 。 效果: 代码: #include "me.hpp"void ufusr(char* param, …

pandas 筛选数据的 8 个骚操作

日常用Python做数据分析最常用到的就是查询筛选了&#xff0c;按各种条件、各种维度以及组合挑出我们想要的数据&#xff0c;以方便我们分析挖掘。 东哥总结了日常查询和筛选常用的种骚操作&#xff0c;供各位学习参考。本文采用sklearn的boston数据举例介绍。 from sklearn …

3基于MATLAB的齿轮啮合仿真,可根据需要调节齿轮参数,实现齿轮啮合转动动态过程。程序已调通,可直接运行。

基于MATLAB的齿轮啮合仿真&#xff0c;可根据需要调节齿轮参数&#xff0c;实现齿轮啮合转动动态过程。程序已调通&#xff0c;可直接运行。 3matlab齿轮啮合仿真动态啮合 (xiaohongshu.com)

动态负荷对电力系统摆幅曲线的影响研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

springboot使用freemarker导出word

springboot使用freemarker导出word 一、需求说明二、制作模板文件1.修改word留下占位符并另存为.xml文件2.将xml文件后缀名改为.ftl3.打开ftl文件格式化内容4.将占位符替换成变量 三、代码实现1.引入依赖2.将模板引入resource下3.编写word导出工具包4.创建接口调用 一、需求说明…

eslint写jsx报错

eslint写jsx报错 ChatGPT提示 在写JSX时&#xff0c;ESLint可能会报出一些语法错误&#xff0c;这些错误通常是由于ESLint默认配置中不支持JSX语法导致的。为了解决这些错误&#xff0c;我们需要在ESLint配置文件中启用对JSX语法的支持。 首先&#xff0c;需要安装eslint-pl…

100道基于Android毕业设计的选题题目,持续更新

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 大家好&#xff0c;我是程序员徐师兄、今天给大家谈谈基于android的app开发毕设题目&#xff0c;以及基于an…

苹果数据恢复软件:Omni Recover Mac

Omni Recover是一款十分实用的Mac数据恢复软件&#xff0c;为用户提供了简单、安全、快速和高效的数据恢复服务。如果您遇到了Mac或iOS设备中的数据丢失和误删情况&#xff0c;不要着急&#xff0c;不妨尝试一下Omni Recover&#xff0c;相信它一定会给您带来惊喜。 首先&…

【Bun1.0】使用 Bun.js 构建快速、可靠和安全的 JavaScript 应用程序

bun.js Bun 是一个现代的JavaScript运行环境&#xff0c;如Node, Deno。主要特性如下: 启动速度快。更高的性能。完整的工具&#xff08;打包器、转码器、包管理&#xff09;。 官网 https://bun.sh 优点 与传统的 Node.js 不同&#xff0c;Bun.js 提供了一些新的特性和功…

第8章_freeRTOS入门与工程实践之内存管理

本教程基于韦东山百问网出的 DShanMCU-F103开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id724601559592 配套资料获取&#xff1a;https://rtos.100ask.net/zh/freeRTOS/DShanMCU-F103 freeRTOS系列教程之freeRTOS入…

《Linkerd 2.0:下一代服务网格的探索》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…