神经网络(十二) 迁移学习

介绍

1.什么时候需要进行迁移学习

  目前大多数机器学习算法均是假设训练数据以及测试数据的特征分布相同。然而这在现实世界中却时常不可行。例如我们我们要对一个任务进行分类,但是此任务中数据不充足(在迁移学习中也被称为目标域),然而却有大量的相关的训练数据(在迁移学习中也被称为源域),但是此训练数据与所需进行的分类任务中的测试数据特征分布不同(例如语音情感识别中,一种语言的语音数据充足,然而所需进行分类任务的情感数据却极度缺乏),在这种情况下如果可以采用合适的迁移学习方法则可以大大提高样本不充足任务的分类识别结果。也即是大家通常所说的将知识迁移到新环境中的能力,这通常被称为迁移学习。

  具体的示例:

  • 例如在评价用于对某一品牌的情感分类任务中(假如用户对任一品牌的评价有positive和negative两类),在分类任务之前首先要通过收集大量的用户评价,对其进行标注,然后进行模型的训练。然而现实生活中品牌众多,不同的人也会有不同的语言表达自己的情绪,我们无法收集到非常全面的用户评价的数据,因此当我们直接通过之前训练好的模型进行情感识别时,效果必然会受到影响。如果想要在测试数据上有好的分类效果,最直接的方式是收集大量与测试数据分布相似的数据,但是这样的开销非常大。因此这个时候通过迁移学习可以节省大量的时间和精力,并且通过合适的方法也可以得到较好的识别结果。
  • 小数据的问题。比方说新开一个网店,卖一种新的糕点,没有任何的数据,就无法建立模型对用户进行推荐。但用户买一个东西会反映到用户可能还会买另外一个东西,所以如果知道用户在另外一个领域,比方说卖饮料,已经有了很多很多的数据,利用这些数据建一个模型,结合用户买饮料的习惯和买糕点的习惯的关联,就可以把饮料的推荐模型给成功地迁移到糕点的领域,这样,在数据不多的情况下可以成功推荐一些用户可能喜欢的糕点。这个例子就说明,有两个领域,一个领域已经有很多的数据,能成功地建一个模型,有一个领域数据不多,但是和前面那个领域是关联的,就可以把那个模型给迁移过来。
  • 个性化的问题。比如每个人都希望自己的手机能够记住一些习惯,这样不用每次都去设定它,怎么才能让手机记住这一点呢?其实可以通过迁移学习把一个通用的用户使用手机的模型迁移到个性化的数据上面。

2.迁移学习的历史

  多任务学习和迁移学习相似,但是不同是多任务学习是对目标域和源域进行共同学习,而迁移学习主要是对通过对源域的学习解决目标域的识别任务。

  下图展示了传统的机器学习方法与迁移学习的区别:

3.迁移什么

  在一些学习任务中有一些特征是个体所特有的,这些特征不可以迁移。而有些特征是在所有的个体中具有贡献的,这些可以进行迁移。

4.什么时候迁移

  有些时候如果迁移的不合适则会导致负迁移,例如当源域和目标域的任务毫不相关时有可能会导致负迁移。

5.迁移学习主要思想

  对于源域和目标域,它们具有一部分相同分布的特征,目标域的数据集小于源域的数据集,举个例子:我们利用CNN对源域进行训练,使用了卷积层和全连接层,我们把卷积层拿来进行复用(这里只是做假设,具体情况尚待验证),将源域训练好的卷积层拿来复用到目标域的卷积层,目标域只需训练全连接层即可,达到了迁移的目的。

例子

在本例中,我们需要用深度学习技术对电影短评进行文本倾向性分析,例如“It was great,loved it.”表示积极正面的评论,“It was really stupid.”表示消极负面的评论。

假设现在可以得到的数据规模只有72条,其中62条没有经过预先的倾向性标记,用来预训练。8条经过了预先的倾向性标记,用来训练模型。2条也经过了预先的倾向性标记,用来测试模型。

由于我们只有8条经过预先标记的训练数据,如果直接以这样的数据量对模型展开训练,无疑最终的测试准确率将非常低。(因为判断结果只有正面和负面两种,因此可以预见最终的测试准确率可能只有50%)

为了解决这个难题,我们引入迁移学习。即首先用62条未经标记的数据对模型展开通用的情感判断,然后在这一预训练的基础上对本例的特定问题展开分析,复用预训练模型中的部分层次(迁移学习主要思想),就可以将最终的测试准确率提升到100%。下面将从3个步骤展开分析。

步骤1

创建预训练模型来分析词与词之间的关系。这里我们通过分析未标记语句中的某一词汇,尝试预测出现在同一句子中的其他词汇。

步骤2

对模型展开训练,使得出现在类似上下文中的词汇获得类似的向量表示。在这一步骤中,62条待处理语句首先会被删除停用词,并被标记解释。之后,针对每个词汇,系统会尝试减小其向量表示与相关词汇的差别,并增加其与不相关词汇的差别。

步骤3

预测一个句子的文本倾向性。由于在此前的预训练模型中我们已经得到了针对所有词汇的向量表示,并且这些向量具有用数字表征的每个词汇的上下文属性,这将使得文本的倾向性分析变得更易于实现。

需要注意的是,这里并非直接使用10个已经被预先标记的句子,而是先将句子的向量设置为其所有词汇的平均值(在实际任务中,我们将使用类似时间递归神经网络LSTM的相关原理)。这样,经过平均化处理的句子向量将作为输入数据导入模型,而句子的正面或负面判定将作为结果输出。需要特别强调的是,这里我们在预训练模型和10个被预先标记的句子之间加入了一个隐藏层(hidden layer),用来适配文本倾向性分析这一特定场景。正如你所看到的,这里只用10个标记量就实现了100%的预测准确率。

当然,必须指出的是,这里展示的只是一个非常简单的模型示意,而且测试用例只有2条。但不可否认的一点是,由于迁移学习的引入,确实使得本例中的文本倾向性预测准确率从50%提升到了100%。

本例的完整代码详见如下链接:https://gist.github.com/prats226/9fffe8ba08e378e3d027610921c51a78

原文地址:https://www.cnblogs.com/callyblog/p/8321989.html

时间: 2024-08-23 14:17:48

神经网络(十二) 迁移学习的相关文章

20145311 《信息安全系统设计基础》第十二周学习总结

20145311 <信息安全系统设计基础>第十二周学习总结 教材学习内容总结 20145311 <信息安全系统设计基础>第十一周学习总结 20145311 <信息安全系统设计基础>第十周学习总结 20145311 <信息安全系统设计基础>第九周学习总结 视频内容总结 指针数组:即用于存储指针的数组,也就是数组元素都是指针  int *a[10] 数组指针:即指向数组的指针,指针指向一个类型和元素个数都固定的数组 int (*a)[10] 指针函数:即返回值是

20145317《信息安全系统设计基础》第十二周学习总结1

20145317<信息安全系统设计基础>第十二周学习总结1 教材学习内容总结 第九周学习内容总结http://www.cnblogs.com/5317p/p/6052889.html 第十周学习内容总结http://www.cnblogs.com/5317p/p/6076074.html 第十一周学习内容总结http://www.cnblogs.com/5317p/p/6106708.html 视频学习内容总结 指针与声明 C语言中变量的声明包括两个部分: 类型 声明符 对于简单类型,声明并不

javaweb学习总结(三十二)——JDBC学习入门【转】

原文地址:javaweb学习总结(三十二)——JDBC学习入门 一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后 才能够使用声卡和网卡,同样道理,我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数 据库打交道,如下所示: 1.2.JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作

201671010117 2016-2017-2 《Java程序设计》Java第十二周学习心得

Java第十二周学习心得        在第十二周的理论课堂上,老师对1-4章的内容进行了测验,程序填空题和写程序题的分不是很高,程序题的重要部分都有遗漏,对于计算图书的总数那部分不会写,扣分较多,但是现在已经掌握了,接下来要在电脑上多多练习,周五老师对新内容第十章进行了讲解,这周到现在还没有遇到什么问题.

2017-2018-1 20155310 《信息安全系统设计基础》第十二周学习总结

2017-2018-1 20155310 <信息安全系统设计基础>第十二周学习总结 第一周 http://www.cnblogs.com/m20155310/p/7587317.html 第二周 http://www.cnblogs.com/m20155310/p/7618222.html 第三周 http://www.cnblogs.com/m20155310/p/7672424.html 第四周 http://www.cnblogs.com/m20155310/p/7672547.html

2017-2018-1 20155321 《信息安全系统设计基础》第十二周学习总结

2017-2018-1 20155321 <信息安全系统设计基础>第十二周学习总结 代码托管 上周考试错题总结 (多选题|1分)Y86-64中()指令没有访存操作 A.rrmovl B.irmovq C.rmmovq D.pushq E.jXX F.ret 正确答案:ABE (单选题|1分)Y86-64中,指令执行分为()阶段 A.3 B.4 C.5 D.6 E.7 F.8 正确答案:D ( 多选题 | 1 分)下面说法正确的是() A.ALU是一种时序电路 B.ALU是一种组合电路 C.寄存

201771010134杨其菊《面向对象程序设计java》第十二周学习总结

第十二周学习总结 第一部分:理论知识 内容概要: AWT与Swing简介:框架的创建:图形程序设计: 显示图像: 1.AWT组件: 2.Swing 组件层次关系 3 .AWT与Swing的关系:大部分AWT组件都有其Swing的等价组件; Swing组件的名字一般是在AWT组件名前面添加一个字母"J",如:JButton,JFrame,JPanel等. 4.组件:通常把由Component类的子类或间接子类创建的对象称为一个组件. 例:Button button = new Butto

张季跃 201771010139《面向对象程序设计(java)》第十二周学习总结

张季跃 201771010139<面向对象程序设计(java)>第十二周学习总结 第二部分:实验部分 1.实验目的与要求 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: (2) 掌握Java GUI中2D图形绘制常用类的API: (3) 了解Java GUI中2D图形中字体与颜色的设置方法: (4) 了解Java GUI中2D图像的载入方法. 2.实验内容和步骤 实验1: 导入第9章示例程序,测试程序并进行代码注释. 2.实验内容和步骤 实验1: 导入第10章示例程序,测试

《信息安全专业导论》第十二周学习总结

<信息安全专业导论>第十二周学习总结 <计算机概论> 在本周的概论学习中,我学习了信息安全的一些基本内容.学习了信息安全的保密性.完整性.可用性(缩写为CIA).保密性就是让关键数据被妥善保护.完整性就是让数据只能被合适的机制修改.可用性就是让授权用户在需要时可进行数据访问.学习了病毒.蠕虫.特洛伊木马.逻辑炸弹这几种恶意代码.学习了密码猜测.网络钓鱼.欺骗.后门.缓存溢出.拒绝服务等几种安全攻击.还学习了几种密码类型,包括替换密码.凯撒密码.转换密码.路径密码. 课下 在课下的练

信息安全系统设计基础第十二周学习总结

第十二周代码学习 一.environ.c #include <stdio.h> #include <stdlib.h> int main(void) { printf("PATH=%s\n", getenv("PATH")); setenv("PATH", "hello", 1); printf("PATH=%s\n", getenv("PATH")); #if