迁移学习综述

参考论文:A Survey on Transfer Learning

1、Introduction

  在机器学习和数据挖掘中有一个很普遍的假设就是训练数据和测试数据来源于统一特征空间并服从相同的分布。而当测试数据分布发生改变之后,我们又不得不从新收集同分布的训练数据并从新训练模型。这在真实的应用中去从很难去重新收集数据并建模,而且给原始数据人工标签的代价也很昂贵。在这些情况下,迁移学习可以很好的解决这些问题。

  什么是迁移学习?用一句话概述就是基于已有的知识可以更快的学习新的知识。例如一个人会下象棋就会更容易地学会下围棋,一个人会说英语也就更容易学会西班牙语等。迁移学习强调的是在不同但是相似的领域、任务和分布之间进行知识的迁移。

  迁移学习能应用的场景也很多。例如网络文档分类,我们将网络中的文档分入到预设定的几个类别中。我们用当时的网络文档打上标签训练分类模型,而对于现在新的网络文档,其数据特征和分布可能和当初训练模型时的训练数据不同,此时新的网络文档分类就会不准确。而从新收集训练数据并训练模型的成本又非常高,这种情况下,迁移学习就能很有帮助。另一个例子,我们在对相机的评价做情感分类时,不同品牌的相机的评价数据可能服从不同的分布,然而在训练模型时,我们又无法收集所有品牌的相机的评价数据,并打上相应的标签,这样的成本是很高的。通常情况下我们可以收集几种品牌的相机的评价数据并打上标签,用这些带标签的数据训练模型,之后可以通过迁移学习的方式将其迁移到其他品牌相机的情感分类问题上。

2、Overview

  传统的机器学习和数据挖掘算法都是基于有监督或无监督训练后的统计模型来预测。无论怎样,在传统的机器学习中我们都认为训练数据和预测数据是服从同分布的。迁移学习其实和多分类问题有点类似,不过多分类问题是讲所有的任务同时进行的,即使这些任务的分布状态不同。而迁移学习可以根据早期的任务来应用到新的任务上。关于传统机器学习和迁移学习的区别如下图所示:

    

  在上图中,传统的机器学习是讲源任务和目标任务放在一起同时学习的,而对于迁移学习是先学习源任务,然后从源任务中抽取相关的知识迁移到目标任务上。在这里的目标任务有个特点就是可用的训练数据非常小,仅仅用目标任务自身的数据训练出的模型泛化能力非常差。

  在这里我们引入域的概念,域的表达式如下 $D={\chi, P(X)}$ ,其中 $\chi$ 表示特征空间,$P(X)$ 表示边缘概率分布。引入源域 $D_S$ 和目标域 $D_T$ 的概念。且源域的大小要远远大于目标域。当源域和目标域的特征空间存在一些关系时,我们就认为这两个域是相关的。

  在迁移学习中主要有三个问题:

  1)迁移什么?

  2)怎么迁移?

  3)什么时候该迁移?

  “迁移什么”是说在从源任务中迁移知识到目标任务时,哪些知识是可以迁移的?一般认为在源域中存在两种类型的知识,一种是源域特有的知识,一种是源域和目标域通用的知识,一般迁移的都是这类通用的知识。确定迁移的知识之后,就是“怎么迁移?”,也就是用什么算法进行知识的迁移。

  “什么时候该迁移?”,确切的说就是在哪些场景下需要应用迁移学习,一般来说只有在源任务和目标任务之间存在相关性的时候才可以进行迁移学习。而在不相关的时候进行迁移时不会有任何效果,甚至可能会造成“负迁移”的后果。

  基于上面关于迁移学习的定义,作者总结了不同场景下的迁移学习和传统机器学习的关系,具体如下表所示:

    

  如上表所示,作者将迁移学习分为三种应用场景:Inductive Transfer Learning;Unsupervised Transfer Learning;Transductive Transfer Learning

  1)Inductive Transfer Learning

  在该场景下,源任务和目标任务分布不同但相关。该场景下需要根据目标域中少量可用的数据构建预测模型。该场景和多分类任务有点类似,知识迁移学习通过在源任务中提取相关的知识来提高目标任务的预测率,而在多分类任务中是将源任务和目标任务一起训练。

  2)Unsupervised Transfer Learning

  非监督迁移学习旨在解决聚类、密度估计等问题。

  3)Transductive Transfer Learning

  在该场景下,源域和目标域分布不同但是相关,而且有两种不同的情况:

    a)源域和目标域的特征空间不同;

    b)源域和目标域的边缘概率分布不同;

  上述的三种场景下的迁移学习和相关应用领域的关系如下表所示:

    

   上述的三种场景下的迁移学习可以被归结为四个案例中,具体如下表所示

     

  上述表中四种案例分别是:

  1)基于样本的迁移学习

  源域中某一部分的数据通过施加权重后(相关性强的样本给予高权重),可以直接用来添加到目标域中直接学习目标任务,Tradaboost 算法就是这种类型的迁移学习。

  2)基于特征的迁移学习

  源域中数据的部分特征和目标域中相同,不如有一个猫狗的分类器可以用来迁移学习不同品种狗的分类器。

  3)基于参数的迁移学习

  源任务和目标任务共用相同参数的模型。或者是共用部参数或先验分布。

  4)基于相关性的迁移学习

  认为源域和目标域中的数据之间是具有相关性的迁移方式。

  下表描述了四种不同案例可以使用的迁移方法。可以看到具体的案例可以用哪些迁移学习方法来解决。

    

   

转载于:https://www.cnblogs.com/jiangxinyang/p/9661415.html

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

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

相关文章

实例46:python

#题目:求输入数字的平方,如果平方运算后小于 50 则退出。 #!/usr/bin/python -- coding: UTF-8 -- TRUE 1 FALSE 0 def SQ(x): return x * x print (‘如果输入的数字小于 50,程序将停止运行。’) again 1 while again: num int(input…

常见笔顺错误的字_最全汉字书写笔顺规则

最全汉字书写笔顺规则汉字笔画名称汉字书写顺序一个字先写哪一笔,后写哪一笔,叫做笔顺。汉字的笔顺有一定规律,一般如下:常见的笔画笔顺易错字;"忄" 先写点和点,最后写竖。"匕" 先写撇…

ajax时间控件,带有ajax的JQuery中的插件datetimepicker出错

我尝试这样做,禁用所有日期并启用我通过参数传递的日期这段代码不起作用$.ajax({method: "GET",url: "url",}).success(function(msg) {console.log(JSON.parse(msg));var disableIni JSON.parse(msg);var disable [];for (var i 0; i < disableIni.…

实例47:python

#题目&#xff1a;两个变量值互换。 encoding:utf-8 ‘’’ 三种简单的变量交换方法——参数法&#xff1b;相互运算法&#xff1b;字符拼剪法 ‘’’ def shuru(): a input(‘请输入a的值’) b input(“请输入b的值”) return a, b def change1(a, b):#加入第三变量 t …

ajax 批量上传图片插件,TinyMCE多图片批量上传(Ajax)教程

需要用上插件&#xff1a;axupimgs插件作者&#xff1a;莫若卿支持版本&#xff1a;5.0.4支持语言&#xff1a;仅中文插件版本&#xff1a;1.6一、axupimgs 插件作用&#xff1a;这是一个tinymce多图片批量上传插件&#xff0c;支持拖拽文件添加&#xff0c;拖拽支持白名单&…

实例48:python

#题目&#xff1a;数字比较。 #!/usr/bin/env python -- coding:utf-8 -- def compare(num1, num2): if num1 > num2: print("%s大于%s" % (num1, num2)) elif num2 > num1: print("%s大于%s" % (num2, num1)) else: print("%s等于%s" %…

实例49:python

#题目&#xff1a;使用lambda来创建匿名函数。 #!/usr/bin/python -- coding: UTF-8 -- MAXIMUM lambda x,y : (x > y) * x (x < y) * y MINIMUM lambda x,y : (x > y) * y (x < y) * x if name ‘main’: a 10 b 20 print (‘The largar one is %d’ %…

java程序员经常使用的Intellij Idea插件

大概从去年年初开始慢慢抛弃习惯多年的eclipse&#xff0c;开始使用Intellij Idea,以下是我使用过的一些Intellij Idea插件&#xff1a; 1.lombok https://plugins.jetbrains.com/plugin/6317-lombok-plugin 支持lombok的各种注解&#xff0c;从此不用写getter setter这些 可以…

实例50:python

#题目&#xff1a;输出一个随机数。 #!/user/bin/env python #coding:utf-8 import random print (random.random()) #输入0-1之间的随机数 print (random.uniform(10,20)) #输出10-20之间的随机数 print (random.randint(10,20)) #输出10-20之间的随机整数

系统mysql数据库服务器,系统mysql数据库服务器

系统mysql数据库服务器 内容精选换一换“数据导入”章节适用于MRS 3.x及后续版本。Loader是实现MRS与外部数据源如关系型数据库、SFTP服务器、FTP服务器之间交换数据和文件的ETL工具&#xff0c;支持将数据或文件从关系型数据库或文件系统导入到MRS系统中。Loader支持如下数据导…

tableau地图城市数据_举个栗子!Tableau 技巧(156):在地图分析中创建缓冲区

缓冲区指的是一个区域&#xff0c;在地图中就是从一个位置&#xff08;或位置范围&#xff09;到特定距离内的所有位置。实际业务场景中&#xff0c;如果需要对某些范围的数据进行邻近性分析或定义搜索区域&#xff0c;例如&#xff1a;服务中心的辐射范围、物流业务的覆盖范围…

服务器与项目之间的关系,项目 服务器 和数据库的关系

项目 服务器 和数据库的关系 内容精选换一换华为云关系型数据库服务提供使用内网、公网和数据管理服务(Data Admin Service&#xff0c;简称DAS)的连接方式。VPC&#xff1a;虚拟私有云(Virtual Private Cloud&#xff0c;简称VPC)。ECS&#xff1a;弹性云服务器(Elastic Cloud…

bios设置开机双系统选择_打破专家的断言,突破微软和英特尔的封锁,惠普电脑玩转双系统...

引子&#xff1a;新电脑&#xff0c;win10系统&#xff0c;界面略显繁琐&#xff0c;开始菜单不能一步直达&#xff0c;工作效率低。况且&#xff0c;厂家说不能安装win7&#xff0c;不信邪。研究如何&#xff0c;打破专家的断言&#xff0c;突破封锁&#xff0c;安装win7。成功…

asp 判断数组等于_如何在 ASP.NET Core MVC 中处理 404 错误

译文链接&#xff1a;https://www.infoworld.com/article/3545304/how-to-handle-404-errors-in-aspnet-core-mvc.html http://asp.net core mvc 对应着 .NET Framework 中的 http://ASP.NET MVC, 前者可以跨平台&#xff0c;可扩展&#xff0c;高性能&#xff0c;不过令人惊讶…

实例51:python

#题目&#xff1a;学习使用按位与 & 。 #程序分析&#xff1a;0&00; 0&10; 1&00; 1&11。 #!/usr/bin/python -- coding: UTF-8 -- if name ‘main’: a 77 b a & 3 print (‘a & b %d’ % b) b & 7 print (‘a & b %d’ % b)

asp.net core环境变量product/development设置

一&#xff1a;项目里修改环境变量 环境变量可以在launchSettings.json文件里面设置&#xff0c;也可以右键项目->属性->调试->环境变量进行设置。 这两种方式的内容是同步的&#xff0c;任何一种方式修改后&#xff0c;另外一种就会同步。只不过一个是直接修改文件&a…

win102004优化_win10 2004系统电脑出现玩命运2掉帧的问题

有一位深度技术用户喜欢一款叫命运2的游戏&#xff0c;但是他的电脑安装win10 2004系统后&#xff0c;发现玩命运2的时候&#xff0c;画面经常出现掉帧卡顿卡死等问题&#xff0c;非常影响了正常游戏。接下来深度技术小编给大家分享一下win10电脑玩命运2掉帧的详细解决方法&…

实例52:python

#题目&#xff1a;学习使用按位或 | 。 #!/usr/bin/python -- coding: UTF-8 -- if name ‘main’: a 77 b a | 3 print (‘a | b is %d’ % b) b | 7 print (‘a | b is %d’ % b)

实例53:python

#学习使用按位异或 ^ #!/usr/bin/python -- coding: UTF-8 -- if name ‘main’: a 77 b a ^ 3 print (‘The a ^ 3 %d’ % b) b ^ 7 print (‘The a ^ b %d’ % b)

unity全栈开发是什么意思_unity游戏公司面试问题总结

面试大计切勿怕你说的面试官听不懂就重复解释&#xff0c;一定要言简意赅的回答。C#篇一、请简述ArrayList和List的主要区别&#xff1f;ArrayList就是一个List<Object>而已&#xff0c;泛型集合的优势就是类型安全和无装箱。二、请简述nternal的作用internal&#xff1a…