【机器学习】042_迁移学习

一、概述、定义

目的:

迁移学习的目的是将某个领域或任务上学习到的模式、知识应用到不同但相关的领域里,获取更多数据,而不必投入许多时间人力来进行数据的标注。

举例:

已经会下中国象棋,就可以类比着来学习国际象棋;已经会编写Java程序,就可以类比着来学习C#;已经学会英语,就可以类比着来学习法语;已经学会了骑自行车,就可以类比学习骑摩托车等等。

定义:

Transfer Learning Definition:
Ability of a system to recognize and apply knowledge and skills learned in previous domains/tasks to novel domains/tasks.

通俗地讲,迁移学习就是运用已有的知识、模型来学习新的知识,构建新模型。其核心是找到已有知识与新知识的相似性与关联性。

重要概念:

域:某个时刻的某个特定领域——例如书本评论、电影评论;

任务:所要完成的任务与实现的功能——例如情感分析、实体识别;

给定源域 D_s 和学习任务 T_s、目标域 D_t 和学习任务 T_t,迁移学习的目的是获取源域 D_s 和学习任务 T_s 中知识来帮助提升目标域 D_t 中预测函数 f_t(.) 的学习。其中 D_s\neq D_t 或者 T_s\neq T_t

二、迁移学习的分类

1. 基于实例的迁移

研究如何从源域中找出对目标领域训练有作用的实例。

例:在对源域的有标记数据实例中进行有效的权重分配,让源域的实例分布接近目标域的实例分布,从而在目标领域中建立一个分类精度较高并且可靠的学习模型。

迁移学习中,源域与目标域的数据分布不一致,故源域中并非所有有标记的数据实例都对目标域有作用。基于实例的迁移有现有的一些迁移算法,来对源域的有效数据迁移到目标域中。

TrAdaBoost算法就是典型基于实例的迁移。

TrAdaBoost算法的工作机制如下:

  1. 初始化:算法开始时,对源域和目标域数据的权重进行初始化。通常,目标域数据的初始权重会高于源域数据。

  2. 迭代更新:在每一轮中,算法使用当前的权重来训练一个弱分类器。分类器首先在目标域上测试,然后在两个域上进行误差评估。

  3. 权重调整:算法根据分类器的表现来调整数据点的权重。对于源域数据,分类正确的数据点权重会增加(使得算法在后续迭代中更少地关注这些点),而分类错误的数据点权重会减少。这与传统的AdaBoost相反,其核心思想是减少源域中对目标域帮助不大或有害的数据点的权重。对于目标域数据,权重更新与传统AdaBoost相同,即增加被错误分类数据点的权重。

  4. 终止条件:算法会在达到预定的迭代次数后停止,或者当目标域上的误差不再显著减少时停止。

  5. 组合弱分类器:最后,算法结合所有的弱分类器,形成一个强分类器。每个弱分类器根据其在目标域上的性能加权,性能越好的分类器影响越大。

通过这种方式,能够有效利用源域数据来帮助构建在目标域上表现良好的分类器,即便源域和目标域的数据分布有所不同。

2. 基于特征的迁移

①特征选择

找出源域和目标域之间共同的特征表示,找出特征之间对应的不同相关性,利用这些特征进行知识迁移。

②特征映射

将源域和目标域的数据从原始特征空间映射到新的特征空间之中。

源域的特征值经过一系列变换,对应到目标域的特征值,经过一一映射,使得源域数据与目标域的数据分布相同,从而在新的空间中,更好地利用源域已有的标记数据样本进行分类训练。最终对目标域的数据进行分类测试。

3. 基于共享参数的迁移

找到源域与目标域空间模型之间的共同参数或先验分布。

前提:学习任务的每个相关模型都会共享一些相同的参数或者先验分布。

三、迁移学习使用场景

1. 有大量数据样本,但大部分样本无标注

要想继续增加更多数据标注,需要付出很多成本。利用迁移学习思想,可以寻找一些和目标数据相似而且已经有标注的数据,利用数据之间的相似性对知识进行迁移,提高对目标数据的预测效果或者标注精度。

2. 帮助解决算法的冷启动问题

在跨域推荐系统将用户偏好模型从现有域(如图书推荐领域)迁移到一个新域(如电影推荐领域)中。

3. 想要获取具有更强泛化能力,但是数据样本较少. 许多应用场景数据量小

高质量有标签数据总是供不应求。传统的机器学习算法常常因为数据量小而产生过拟合问题,因而无法很好地泛化到新的场景中。

4. 数据来自不同的分布时

数据分布不仅会随着时间和空间而变化,也会随着不同的情况而变化,我们可能无法使用相同的数据分布来对待新的训练数据。已经训练完成的模型需要在使用前进行调整,在不同于训练数据的新场景下。

四、迁移学习的示例

例:假设现在要构建一个对手写数字进行识别的模型,但目前已有的已标注数据较少,如何不花费大量时间精力标注数据也能获得一个效果较好的模型?

方法:借助迁移学习,利用其它模型来辅助实现该任务。

假设有一个已经训练好的可以识别猫、狗、汽车和人的图像识别模型。复制此神经网络,在其中插入新的参数,那么对于最后的输出层,可以消除输出层并用一个更小的输出层(10个)替换它。

可以做的是使用前几层隐藏层的参数(实际上是除输出层之外所有隐藏层),然后采用两种方法训练新的网络:

①将五个新的输出层参数作为顶部的值,固定它们然后使用随机梯度下降或Adam算法更新参数,来降低识别数字0到9的成本函数。

②更新并训练网络中的所有参数,但前几层参数可以借助之前的神经网络。

首先在大数据集上进行训练,然后再在较小的数据集上进一步调整参数,这就是监督预训练。

然后进行微调,在其中获取已初始化或从监督预训练中获得的参数,进一步运行梯度下降微调权重以适应对应新的学习任务的特定应用参数。

原理:如果同样是图像识别的神经网络,那么在前几层——检测图像边缘、检测角点、检测通用形状、基本曲线等等都是相同的步骤,因而可以通用进行。

故而,可以下载、借助他人预训练的神经网络来根据自己的数据进一步训练、微调神经网络以达成相应目的。

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

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

相关文章

Java单元测试:JUnit和Mockito的使用指南

引言: 在软件开发过程中,单元测试是一项非常重要的工作。通过单元测试,我们可以验证代码的正确性、稳定性和可维护性,帮助我们提高代码质量和开发效率。本文将介绍Java中两个常用的单元测试框架:JUnit和Mockito&#x…

Navicat连接Oracle数据库

Navicat连接Oracle数据库 打开服务里面找到Oracle服务 OracleServerXE或者OracleServerTTL 创建数据库连接 连接名默认自己起 主机选择本地 端口默认 服务名在服务中可以找到输入后缀 用户名默认都是system 密码是创建oracle时候填写的口令 点击测试连接即可

Spring Boot中的事务是如何实现的?懂吗?

SpringBoot中的事务管理,用得好,能确保数据的一致性和完整性;用得不好,可能会给性能带来不小的影响哦。 基本使用 在SpringBoot中,事务的使用非常简洁。首先,得感谢Spring框架提供的Transactional注解&am…

【金融数据分析】计算沪深300指数行业权重分布并用饼图展示

前言 前面的文章我们已经介绍了如何获取沪深300成分股所述行业以及权重的数据,想要了解这部分内容的小伙伴可以阅读上一篇文章 springbootjdbcTemplatesqlite编程示例——以沪深300成分股数据处理为例-CSDN博客 那么有了上文获取的数据,我们实际上可以…

【rabbitMQ】rabbitMQ控制台模拟收发消息

目录 1.新建队列 2.交换机绑定队列 3.查看消息是否到达队列 总结: 1.新建队列 2.交换机绑定队列 点击amq.fonout 3.查看消息是否到达队列 总结: 生产者(publisher)发送消息,先到达交换机,再到队列&…

微信小程序uni-app:常用Form表单组件使用示例

目录 input 输入框picker 选择器 input 输入框 https://developers.weixin.qq.com/miniprogram/dev/component/input.htmlhttps://uniapp.dcloud.net.cn/component/input.html <inputclass"input-class"type"text"v-model"value"placeholde…

Linux下文本三剑客:grep、awk、sed之对比

一、grep 主要用于搜索某些字符串&#xff1b;sed、awk 用于处理文本&#xff1a; grep基本是以行为单位处理文本的&#xff1b; 而awk可以做更细分的处理&#xff0c;通过指定分隔符将一行&#xff08;一条记录&#xff09;划分为多个字段&#xff0c;以字段为单位处理文本。…

python输出菱形字符图案 附实战代码

下面是一个Python程序&#xff0c;可以用来输出菱形字符图案。这个程序使用了两个嵌套的for循环&#xff0c;以及字符串连接操作。 # 获取用户输入 n int(input("请输入菱形的边长&#xff1a;"))# 生成上半部分菱形 for i in range(1, n 1, 2):print(" &quo…

SDK,但未在应用内的隐私政策/在AppGallery Connect上提交的隐私政策内容中进行明示,不符合华为应用市场审核标准。

&#xff08;暂时用不到的也建议收藏一下&#xff0c;因为文章持续更新中&#xff09; 最新更改时间&#xff1a;20023-12-10 第三方SDK合集列表 为了确保用户个人信息的安全&#xff0c;我们对使用到的第三方提供的软件开发包&#xff08;SDK&#xff09;进行了严格的安全检…

期末速成数据库极简版【存储过程】(5)

目录 【7】系统存储过程 【8】用户存储过程——带输出参数的存储过程 创建存储过程 存储过程调用 【9】用户存储过程——不带输出参数的存储过程 【7】系统存储过程 系统存储我们就不做过程讲解用户存储过程会考察一道大题&#xff0c;所以我们把重点放在用户存储过程。…

vscode 编写爬虫爬取王者荣耀壁纸

网上关于爬虫大部分教程和编辑器用的都不是vscode &#xff0c;此教程用到了vscode、Python、bs4、requests。 vscode配置Python安装环境可以看看这个大佬的教程 03-vscode安装和配置_哔哩哔哩_bilibili vscode配置爬虫环境可以参考这个大佬的教程【用Vscode实现简单的python…

U4_1 语法分析之自顶向下分析

文章目录 一、定义1、任务2、对比3、方法4、自顶向下面临问题 二、自顶向下分析1、概念2、特点3、二义性问题4、左递归问题1&#xff09;概念2&#xff09;消除3&#xff09;间接左递归 5、回溯问题1&#xff09;概念2&#xff09;消除3&#xff09;解决方法 6、总结 三、递归子…

Java 线程池中 submit() 和 execute() 方法有什么区别?

Java 线程池中 submit() 和 execute() 方法有什么区别&#xff1f; 在 Java 中&#xff0c;ExecutorService 接口是用于管理和执行线程的框架&#xff0c;它定义了两个用于提交任务的方法&#xff1a;submit() 和 execute()。这两种方法有一些区别&#xff1a; 返回值&#xf…

【Proteus仿真】【51单片机】光照强度检测系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使共阴数码管&#xff0c;PCF8591 ADC模块、光敏传感器等。 主要功能&#xff1a; 系统运行后&#xff0c;数码管显示光传感器采集光照强度值&#xff…

Gitzip插件【Github免翻下载】

今天给大家推荐一个github下载的插件&#xff0c;平常大家下载应该无外乎就是以下两种&#xff1a; Download zip利用git clone 但是这两种各有各的弊端&#xff0c;前者一般需要科学上网才可以&#xff0c;后者下载不稳定经常中途断掉。 今天给推荐一个款浏览器插件-Gitzip.大…

基于SSM的java衣服商城

基于SSM的java衣服商城 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 项目类型&#xff1a;Java EE项目 项目名称&#xff1a;基于SSM的美衣商城 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 前端技术&#xff1a;Layui等 后端技术…

Flask和Vue框架实现WebSocket消息通信

1 安装环境 1.1 安装Flask环境 主要的安装包 Flask、Flask-SocketIO&#xff0c;注意Python版本要求3.6 # Flask-SocketIO参考地址 https://flask-socketio.readthedocs.io/en/latest/ https://github.com/miguelgrinberg/flask-socketio更新基础环境 # 更新pip python -m …

Unity发布WebGL测试界面处理方式参考

如果使用Unity发布WebGL经常会和网页进行交互&#xff0c;为了能够做到界面统一&#xff0c;往往所有UI都是在页面上开发的&#xff0c;Unity本身不做任何UI或者只做三维UI&#xff0c;但是在开发过程中&#xff0c;为了测试接口&#xff0c;难免要在Unity中做一些UI来方便测试…

以太坊虚拟机EVM介绍,智能合约详解

以太坊为例&#xff1a;什么是智能合约&#xff1f;智能合约怎么部署、调用、执行&#xff1f;智能合约的原理&#xff1f;智能合约存在哪儿&#xff1f;如何区分调用的是智能合约&#xff1f;世界状态数据库、EVM、智能合约它们之间的关系&#xff1f; 什么是智能合约 指的是…

【Hive】启动beeline连接hive报错解决

1、解决报错2、在datagrip上连接hive 1、解决报错 刚开始一直报错&#xff1a;启动不起来 hive-site.xml需要配置hiveserver2相关的 在hive-site.xml文件中添加如下配置信息 <!-- 指定hiveserver2连接的host --> <property><name>hive.server2.thrift.bin…