zoukankan      html  css  js  c++  java
  • 迁移学习简述

     迁移学习是一种机器学习方法,它将一个已经开发过的任务模型重复利用,作为第二个任务模型的起点。预训练的模型被用作计算机视觉和自然语言处理任务,这在深度学习领域非常流行。

    阅读本文,你会发现如何使用迁移学习来提高训练的速度以及改善深度学习模型的性能。

    阅读本文后,你将会了解到:

    ·什么是迁移学习,以及其使用的方法。

    ·深度学习中,迁移学习的常见例子。

    ·在自己的预测建模问题上,何时使用迁移学习。

    bea4a892656dc623bff0d8759462d3faa5ae751c

    什么是迁移学习?

    迁移学习是一种机器学习技术,它将在一个任务上训练过的模型用在第二个相关的任务中重复使用。“迁移学习和领域适应性是指在一个配置环境中已经学习到的东西……被用来改善在另外一种配置中的泛化。”

    迁移学习是一种优化,它允许在第二个任务上建模时取得快速进步和改善性能。“迁移学习,通过从一个已经学习过的相关任务中转移知识来对新任务中学习的改进。”

    迁移学习并不完全是深度学习的研究领域,它也与多任务学习以及概念漂移等问题有关系。

    尽管如此,迁移学习在深度学习中是非常流行的,主要是因为在训练深度学习模型时需要耗费巨大的资源,以及在深度学习模型训练时所面对的具有挑战性的大型数据集。

    在迁移学习中,我们首先在基础数据集和任务上训练一个基础网络,然后重新调整学习到的模型特性,或将它们转移到第二个目标网络以在目标数据集和任务上接受训练。如果学习到的特性是常规的,那么这个过程将会起作用,这就意味着可以适用于基础任务和目标任务,而不仅只适用基础任务。

    这种用于深度学习的迁移学习形式被称为归纳转移(inductive transfer)。它以有利的方式通过使用一个适用于不同的但相关的任务,来缩小可能模型的范围(模型偏差)。

    09ce1519c3095070b1143edae47ebc21cc1ec789

    如何使用迁移学习?

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

    两个常用方法如下:

    1.开发建模方法。

    2.预训练建模方法。

    开发建模方法

    1.选择源任务。你必须选择一个有大量数据的相关的预测建模问题,且在这些数据中,输入数据、输出数据和(或)与在输入映射到输出数据过程中学习到的概念存在某种关系。

    2.开发源模型。你必须为这第一个任务开发一个成熟的模型。该模型必须比原始模型更好,以确定已经执行过一些特征学习。

    3.复用模型。适合源任务的模型可被用作第二个有关联的任务模型的起点。这可能会涉及到使用全部或部分模型,它取决于所用的建模技术。

    4.调整模型。可根据需要,对可用于在有关联的任务的输入-输出配对数据上进行调整或微调。

    预训练的建模方法

    1.选择源模型。预先训练的源模型是从可用模型中选取的。许多研究机构发布了在具有挑战性的大型数据集上建立的模型,这些数据集可能包含在可供选择的候选模型中。

    2.重利用模型。预训练的模型可被用作建立第二个有关联任务上的模型的起点。这可能会涉及到使用整个或部分模型,它取决于所用的建模技术。

    3.调整模型。可根据需要对可用于在有关联任务的输入-输出配对数据上进行调整或微调。

    第二种类型是在深度学习领域中比较常见的迁移学习方法。

    迁移学习的实际应用举例

    让我们用带有深度学习模型的两个常见的迁移学习例子来做具体的说明。

    图像数据的迁移学习

    以图像数据作为输入的预测建模问题进行迁移学习是比较常见的。

    这可能是以照片或视频数据作为输入的预测任务。

    对于这些类型的问题,通常使用针对具有挑战性的大型图像分类任务的预先训练的深度学习模型,如ImageNet 1000级照片分类竞赛。

    为此次竞赛开发模型的研究机构经常发布允许复用的最终版模型。这些模型在新式的硬件上进行训练需要花费几天或几周的时间。

    这些模型可供下载,且可以直接整合到以图像数据作为输入的新模型中。

    这种模型的三个实例如下:

    ·剑桥 VGG 模型

    ·谷歌 Inception 模型

    ·微软 ResNet 模型

    更多实例请参照Caffe Model Zoo,这里分享了更多的预训练模型。

    这种方法很有效,是因为图像是在大量的照片资料库上进行训练的,并且要求模型在相对大量的类上进行预测,相应地,为了在这个问题上做的好些,需要模型从图片中有效的学习提取特征。

    在斯坦福大学关于卷积神经网络进行视觉识别的课程中,作者提醒要谨慎的选择在新模型中使用预训练模型的数量。

    [卷积神经网络]特征在早期的网络层中更普遍,后来的网络层具有更多的原始数据集特有的特征。”

    -迁移学习,《用于视觉识别的CS231n卷积神经网络》

    语言数据的迁移学习

    使用文本作为输入或输出的自然语言处理问题进行迁移学习是很普遍的。

    对于这些类型的问题,使用单词嵌入,即将单词映射到一个高维连续矢量空间,其中具有相同意思的不同单词有相似的矢量表示。

    存在这种学习这些分布式单词表示的有效算法,研究机构通常会发布预先训练过的模型,这些模型是在有授权许可的大文本文件上训练的。

    使用这种类型的模型的例子如下:

    1.谷歌的 word2vec模型

    2.斯坦福的GloVe模型

    这些分布式单词表示模型可供下载,且可以被整合到以单词释义作为输入或单词的生成作为输出的深度学习语言模型,

    Yoav Goldberg在《用于自然语言处理的神经网络方法》一文中建议:

    “……可以下载预先训练过的单词矢量,这些矢量是基于大量的文本训练的[……]训练规则和底层语料库的差异对结果表现有很大的影响,并且现有预先训练过的表示对特殊的使用案例可能不是最好的选择”

    何时使用迁移学习?

    迁移学习是一个优化方式,也是一个节省时间或获得更好性能的捷径。

    一般来说,直到模型开发和评估完成以后,在相关领域中使用迁移学习的好处才会展现出来。

    Lisa Torrey和Jude Shavlik在迁移学习的章节中描述了使用迁移学习时的三个好处:

    1.更高的起点。源模型的初始技能(在提炼模型之前)比其它模型要高。

    2.更高的提升效率。训练源模型过程中提升技能的效率比其它模型要高。

    3.较高的渐近线。训练好的模型的融合技能比其它模型要好。

    理想情况下,可以看到成功应用迁移学习以上所有的三个好处。

    如果你可以用大量的数据识别一个相关的任务,并且有足够的资源为该任务开发一个模型,还在自己的问题上进行重用,那么这是一种尝试的方法,或者有一个可用的预先训练好的模型可以作为你自己模型的起点。

    如果你没有太多的数据,迁移学习可以使你开发熟练的模型。如果没有迁移学习,你根本没办法开发一个熟练的模型。

    源数据或源模型的选择是一个棘手的问题,这可能需要相关领域专业知识和(或)相关的开发经验。

    扩展阅读

    如果你想更深入的了解相关知识,本小节提供了相关的资源链接。

    预训练模型

    Oxford VGG模型

    Google Inception模型

    Microsoft ResNet模型

    Google’s word2vec模型

    Stanford’s GloVe模型

    Caffe Model Zoo

    文章

    《迁移学习–机器学习的下一个新领域》,2017.

    《迁移学习,用于视觉识别的CS231n卷积神经网络》

    《迁移学习是如何工作的》,Quora

    总结

    在本文中,你可以了解到如何使用迁移学习提升训练的速度和提高深度学习模型的性能表现。

     

     

    以上为译文。

    本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

    文章原标题《A Gentle Introduction to Transfer Learning for Deep Learning | Machine Learning Mastery,译者:Mags,审校:袁虎。

    文章为简译,更为详细的内容,请查看原文

  • 相关阅读:
    软件编程含有中文的编码问题
    iostream与iostream.h
    C++变量的定义
    c++标准线程库
    C++单例模式
    C++,类中重载函数的调用,类中模板函数定义与调用。
    c++ stl
    C++ static调用
    openssl基本概念
    C语言malloc(0)情况分析与malloc字节对齐
  • 原文地址:https://www.cnblogs.com/twodog/p/12137717.html
Copyright © 2011-2022 走看看