干货丨 简述迁移学习在深度学习中的应用

转载 2018年01月08日 00:00:00

文章来源:机器之心

迁移学习是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。


深度学习中在计算机视觉任务和自然语言处理任务中将预训练的模型作为新模型的起点是一种常用的方法,通常这些预训练的模型在开发神经网络的时候已经消耗了巨大的时间资源和计算资源,迁移学习可以将已习得的强大技能迁移到相关的的问题上。


读完本文,你将学会如何使用迁移学习来加速训练过程,提升深度模型的性能。


什么是迁移学习?


迁移学习是一种机器学习的方法,指的是一个预训练的模型被重新用在另一个任务中。


迁移学习和域适应指的是在一种环境中学到的知识被用在另一个领域中来提高它的泛化性能。

——《深度学习》,第 526 页


迁移学习与多任务学习以及概念飘移这些问题相关,它不是一个专门的机器学习领域。


然而,迁移学习在某些深度学习问题中是非常受欢迎的,例如在具有大量训练深度模型所需的资源或者具有大量的用来预训练模型的数据集的情况。仅在第一个任务中的深度模型特征是泛化特征的时候,迁移学习才会起作用。


在迁移学习中,我们首先在一个基础数据集和基础任务上训练一个基础网络,然后我们再微调一下学到的特征,或者说将它们迁移到第二个目标网络中,用目标数据集和目标任务训练网络。如果特征是泛化的,那么这个过程会奏效,也就是说,这些特征对基础任务和目标任务都是适用的,而不是特定的适用于某个基础任务。

——论文《How transferable are features in deep neural networks?》(https://arxiv.org/abs/1411.1792)


深度学习中的这种迁移被称作归纳迁移。就是通过使用一个适用于不同但是相关的任务的模型,以一种有利的方式缩小可能模型的搜索范围。


归纳学习的解释


如何使用迁移学习


你可以在自己的预测模型问题上使用迁移学习。


以下是两个常用的方法:


  1. 开发模型的方法

  2. 预训练模型的方法


开发模型的方法


  1. 选择源任务。你必须选择一个具有丰富数据的相关的预测建模问题,原任务和目标任务的输入数据、输出数据以及从输入数据和输出数据之间的映射中学到的概念之间有某种关系,

  2. 开发源模型。然后,你必须为第一个任务开发一个精巧的模型。这个模型一定要比普通的模型更好,以保证一些特征学习可以被执行。

  3. 重用模型。然后,适用于源任务的模型可以被作为目标任务的学习起点。这可能将会涉及到全部或者部分使用第一个模型,这依赖于所用的建模技术。

  4. 调整模型。模型可以在目标数据集中的输入-输出对上选择性地进行微调,以让它适应目标任务。


预训练模型方法


  1. 选择源模型。一个预训练的源模型是从可用模型中挑选出来的。很多研究机构都发布了基于超大数据集的模型,这些都可以作为源模型的备选者。

  2. 重用模型。选择的预训练模型可以作为用于第二个任务的模型的学习起点。这可能涉及到全部或者部分使用与训练模型,取决于所用的模型训练技术。

  3. 调整模型。模型可以在目标数据集中的输入-输出对上选择性地进行微调,以让它适应目标任务。


第二种类型的迁移学习在深度学习领域比较常用。


深度学习中使用迁移学习的例子


下面用两个常见的例子具体介绍一下深度学习模型中的迁移学习。


使用图像数据进行迁移学习


在使用图像作为输入的预测建模问题中应用迁移学习是很常见的,其中使用图像或视频作为输入。


对于这种类型的问题而言,使用为大规模的挑战性图像数据集预训练的模型是很常见的做法,例如 ImageNet(1000 类图像分类挑战赛的数据集)。


为这个竞赛开发模型的研究组织通常会将最终模型发布出来,并且具备重新使用的许可。这些模型的训练一般会耗费几天到几星期不等的时间,这取决于所用的硬件环境。


这些模型可以直接下载到,它们将图像作为输入。


以下是这种类型的模型的三个例子:


  • 牛津 VGG 模型(http://www.robots.ox.ac.uk/~vgg/research/very_deep/)

  • 谷歌 Inception 模型(https://github.com/tensorflow/models/tree/master/inception)

  • 微软 ResNet 模型(https://github.com/KaimingHe/deep-residual-networks)


可以在 Caffe Model Zoo(https://github.com/BVLC/caffe/wiki/Model-Zoo)中找到更多的例子,那里分享了很多预训练的模型。


这个方法是有效的,因为大量的图片在这个模型上进行训练,需要模型能够预测出相对比较多的图片类型,反过来,这需要模型能够有效地学习从图片中提取特征,以较好地解决这个问题。


在斯坦福大学的课程《Convolutional Neural Networks for Visual Recognition》(视觉识别中的卷积神经网络)中,作者特别提醒,要仔细选择将预训练模型在多大程度上利用到新模型中。


卷积神经网络的前面几层提取到的特征更泛化,后面层提取到的特征与原始数据集更相关。

——迁移学习,CS231 卷积神经网络视觉识别课程 (http://cs231n.github.io/transfer-learning/)


语言数据中的迁移学习


在以文本作为输入-输出的自然语言处理任务中,使用迁移学习是很常见的。


对于这类问题,首先会使用词向量(Word embedding)将单词映射到连续的高维空间,在这个高维空间中,意思相近的不同单词具有相似的向量表征。


目前已经有学习这些分散词表征的高效算法,并且研究组织经常在大规模文本语料库上基于许可 license 发布预训练模型。


这类例子包括:


  • 谷歌的 word2vec 模型(https://code.google.com/archive/p/word2vec/)

  • 斯坦福的 GloVe 模型(https://nlp.stanford.edu/projects/glove/)


这些分立词表征的模型可以在上述地址下载,并且结合使用在将单词表征作为输入或者生成单词作为输出的深度语言学习模型中。


Yoav Goldberg 在他的书中提醒道:


..... 你可以下载到这些基于特大数量的文本训练得到的预训练词向量...... 但是,训练方法和本质语料库的不同对结果表征有着严重的影响,并且可以获取的预训练表征可能不是你的实际案例中的最佳选择。

——《Deep Learning for Natural Language Processing》(自然语言处理的深度学习方法),2017,第 135 页


什么时候使用迁移学习?


迁移学习是一种优化,是一种节省时间或者得到更好性能的捷径。


通常而言,在模型经过开发和测试之前,并不能明显地发现使用迁移学习带来的性能提升。


Lisa Torrey 和 Jude Shavlik 在他们关于迁移学习的章节中描述了使用迁移学习的时候可能带来的三种益处:


  1. 更高的起点。在微调之前,源模型的初始性能要比不使用迁移学习来的高。

  2. 更高的斜率。在训练的过程中源模型提升的速率要比不使用迁移学习来得快。

  3. 更高的渐进。训练得到的模型的收敛性能要比不使用迁移学习更好。


迁移学习能够改善学习的三种方式


理想情况下,在一个成功的迁移学习应用中,你会得到上述这三种益处。


如果你能够发现一个与你的任务有相关性的任务,它具备丰富的数据,并且你也有资源来为它开发模型,那么,在你的任务中重用这个模型确实是一个好方法,或者(更好的情况),有一个可用的预训练模型,你可以将它作为你自己模型的训练初始点。


在一些问题上,你或许没有那么多的数据,这时候迁移学习可以让你开发出相对不使用迁移学习而言具有更高性能的模型。


对源数据和源模型的选择是一个开放问题,可能需要领域专家或者实际开发经验。


迁移学习&自我学习

分类: Machine Learning2013-05-08 17:52 1415人阅读 评论(0) 收藏 举报 迁移学习自学习self taught learningtransfer ...
  • pi9nc
  • pi9nc
  • 2014年05月29日 15:37
  • 15333

迁移学习

对于Artist styletransfer for videos, 为了研究它是不是属于迁移学习,故查阅关于迁移学习的资料 迁移学习 在传统的机器学习框架下,学习的任务就是在给定充分训练数据的基础上...
  • oMengLiShuiXiang1234
  • oMengLiShuiXiang1234
  • 2016年11月23日 18:51
  • 1211

迁移学习( Transfer Learning )

迁移学习( Transfer Learning ) 薛贵荣        在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型;然后利用这个学习到的模型来对...
  • yewei11
  • yewei11
  • 2016年06月22日 14:50
  • 2477

迁移学习

Transfer Learning Resources 在机器学习领域,迁移学习(Transferlearning)是一个比较新的名词。目前国内做这个方面的很少,我目前只知道香港科技大学杨强教授及上...
  • tiandijun
  • tiandijun
  • 2014年10月19日 13:09
  • 12665

一文讲清楚什么是迁移学习?以及它都用在哪些深度学习场景?

作者 | Jason Brownlee 翻译 | AI科技大本营 参与 | 刘畅 迁移学习是机器学习方法之一,它可以把为一个任务开发的模型重新用在另一...
  • dQCFKyQDXYm3F8rB0
  • dQCFKyQDXYm3F8rB0
  • 2018年01月06日 13:51
  • 117

【迁移学习】什么是迁移学习?它都用在深度学习的哪些场景上?这篇文章替你讲清楚了

翻译 | 刘畅迁移学习是机器学习方法之一,它可以把为一个任务开发的模型重新用在另一个不同的任务中,并作为另一个任务模型的起点。 这在深度学习中是一种常见的方法。由于在计算机视觉和自然语言处理上,开发神...
  • np4rHI455vg29y2
  • np4rHI455vg29y2
  • 2017年12月27日 00:00
  • 218

迁移学习( Transfer Learning )

转载于: http://apex.sjtu.edu.cn/apex_wiki/Transfer Learning 迁移学习( Transfer Learning ) 薛贵荣     ...
  • czt130130
  • czt130130
  • 2016年08月26日 16:48
  • 395

迁移学习(Transfer learning)

本文转自: http://www.zhizhihu.com/html/y2009/790.html 在机器学习领域,迁移学习(Transfer learning)是一个比较新的名词。目前国内...
  • xiaoyanghijk
  • xiaoyanghijk
  • 2016年08月06日 10:25
  • 1303

深度学习进阶之路 - 从迁移学习到强化学习

一. 深度学习及其适用范围        大数据造就了深度学习,通过大量的数据训练,我们能够轻易的发现数据的规律,从而实现基于监督学习的数据预测。                 没错,这里要强调的...
  • linolzhang
  • linolzhang
  • 2017年06月06日 23:17
  • 4734

基于深度学习和迁移学习的识花实践

深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件。不过 TensorFlow 和 Keras 等框架的出现大...
  • c2a2o2
  • c2a2o2
  • 2017年11月23日 17:29
  • 264
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:干货丨 简述迁移学习在深度学习中的应用
举报原因:
原因补充:

(最多只允许输入30个字)