迁移学习全面指南:概念、项目实战、优势、挑战

https://www.toutiao.com/a6685571761766924803/

 

2019-04-30 14:32:56

前言

希望大家从头到尾的去看,而不是看完前面一点点感觉有用然后收藏,堆积到文档或者百度盘占地方。自己不去理解别人的永远是别人的。

人类具备在任务间迁移知识的内在能力。我们在学习一件任务时获取的知识,可以用来解决相关任务。任务越是相关,我们迁移(交叉应用我们的知识)起来就越容易。一些简单的例子:

  • 知道如何骑自行车,学习如何开车。
  • 知道如何弹奏古典钢琴,学习如何弹奏爵士钢琴。
  • 知道数学和统计学,学习机器学习。

 

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

在上面每个场景中,我们试图学习新的方面和新的主题时都不用一切从头学起。我们迁移和利用过去学到的知识!

目前而言,传统机器学习和深度学习算法传统上是设计用于独立工作的。这些算法被训练来解决特定任务。一旦特征空间分布改变,模型需要从头开始。迁移学习的想法是超越这一孤立学习范式,利用从一项任务中获取的知识解决相关的任务。在这篇文章中,我们将全面介绍这些概念以及迁移学习的真实世界应用,甚至还将展示一些可以上手的例子。具体而言,我们将介绍以下内容:

  • 迁移学习的动机
  • 理解迁移学习
  • 迁移学习策略
  • 用于深度学习的迁移学习
  • 深度迁移学习策略
  • 深度迁移学习类型
  • 迁移学习应用
  • 案例研究一:数据可用性限制下的图像分类
  • 案例研究二:大量分类、少量可用数据情况下的多类细粒度图像分类
  • 迁移学习优势
  • 迁移学习挑战
  • 结语和后续预告

我们将介绍一般高层概念意义上的迁移学习(机器学习和统计建模的时代就有这一概念),不过,本文将重点介绍深度学习。

注意:这里的案例研究将包括逐步的细节(代码和输出),这些都是基于实际的试验得到。我们在编写Hands on Transfer Learning with Python一书(详见文末)的过程中实现并测试了这些模型。

网上关于迁移学习的信息极多,本文的目标是在介绍理论概念的同时演示可供实际上手的深度学习应用的例子。所有的例子均基于keras框架(tensorflow后端),这个框架既适合老手,也适合刚开始深度学习的人!对PyTorch感兴趣?欢迎转换这些例子,并联系我,我会在这里和GitHub上列出你的工作。

 

迁移学习的动机

我们已经简单讨论了人类并不从头学习每件事情,而能迁移之前领域所学至新领域和任务。由于真通用人工智能的一时狂热,数据科学家和研究人员相信迁移学习可以进一步推动AGI。事实上,著名教授和数据科学家吴恩达(涉及Google Brain、百度、斯坦福、Coursera)在NIPS 2016上给过一个超棒的演讲,Nuts and bolts of building AI applications using Deep Learning,其中他提到:

监督学习之后——迁移学习将是ML商业成功的下一个驱动者。

事实上,迁移学习不是21世纪10年代才出现的概念。NIPS 1995工作坊Learning to Learn: Knowledge Consolidation and Transfer in Inductive Systems被认为提供了这一领域研究的初始动机。至此以后,Learining to Learn(元学习)、Knowledge Consolidation(知识巩固)、Inductive Transfer(推导迁移)和迁移学习(transfer searning)可以互换使用。一如既往,不同的研究人员和学术文本基于不同的上下文给出了不同的定义。Goodfellow等所著知名的《Deep Learning》(深度学习)一书,在讨论概括性的上下文环境中提到了迁移学习。他们的定义如下:

利用一种设置下已经学到的情况,以提升另一设置的概括性。

因此,迁移学习的关键动机,特别是考虑深度学习这一上下文,在于大多数解决复杂问题的模型需要大量数据,然而,考虑到标注数据点所需的时间和精力,监督模型获取大量标注数据可能真的很困难。一个简单的例子是ImageNet数据集,其中包括几百万张预训练为不同类别的图像,感谢斯坦福多年来的艰辛努力!

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

基于ImageNet数据集的ImageNet挑战很流行

然而,在每个领域中获得这样的数据集很难。此外,大多数深度学习模型为一个具体领域甚至一项特定任务专门化,尽管这些也许是当前最佳模型,精确性非常高,战胜了一切基准,但仅仅是在一些特定数据集上如此。用于新任务时,这些模型的表现会有显著下降,而新任务也许仍和训练模型的任务相似。这形成了迁移学习的动机,超越特定任务和领域,试图找到一种方法,利用从预训练模型中取得的知识解决新问题!

 

理解迁移学习

首先,迁移学习并不是一个深度学习特定的新概念。在构建、训练机器模型的传统方法,和使用遵循迁移学习原则的方法论之间,有着鲜明的不同。

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

传统方法是孤立的,纯粹基于特定任务、数据集训练孤立模型。没有保留可以从一个模型迁移到另一个模型的任何知识。在迁移学习中,你可以利用之前训练的模型中得到知识(特征、权重等),训练新模型,甚至可以应对新任务数据较少的问题。

让我们通过一个例子更好地理解前面的解释。假定我们的任务是识别图像中的物体(领域限定为餐馆)。我们将这一任务记为T1。给定这一任务的数据集,我们训练一个模型,并加以调试,使其在相同领域(餐馆)的未见数据点上表现良好(推广)。当我们不具备给定领域任务所需的足够训练样本时,传统的监督ML算法无法工作。假定我们现在需要检测公园或咖啡馆图像中的物体(记为T2)。理想情况下,我们应该能够应用为T1训练的模型,但在现实中,我们会面临表现退化和模型概括性不好的问题。这背后有多种原因,大多数情况下可以归纳为模型在训练数据和领域上的偏差。

迁移学习应该让我们可以利用之前学习任务所得的知识,并应用于新的相关任务。如果我们在任务T1上明显有更多数据,我们可以利用其所学,并推广这一知识(特征、权重)至任务T2(明显数据更少)。在计算机视觉领域,边缘、形状、角落、亮度之类特定的低层特征可以在任务间分享,从而使得任务间的知识迁移成为可能!同样,如同之前图中所示,在学习新的目标任务时,现有任务中的知识可以作为额外输入。

形式化定义

现在让我们看下迁移学习的形式化定义,再用它来理解不同的策略。Pan和Yang的论文A Survey on Transfer Learning(迁移学习调研)使用领域、任务、边缘概率表示用来理解迁移学习的框架。该框架定义如下:

领域D定义为由特征空间和边缘概率P(X)组成的双元素元组,其中X是样本数据点。因此,在数学上,我们可以将该领域表示为D = {, P(X)}。xi表示内的一个特征向量。

另一方面,任务T可以定义为由标签空间γ和目标函数η组成的双元素元组。就概率学的角度而言,目标函数也可记为P(γ|X)。

基于以上定义和表示,我们可以如此定义迁移学习:

给定源领域DS、相应的源任务TS,及目标领域DT和目标任务TT,迁移学习的目标是让我们基于DS和TS中所得的信息学习DT中的目标条件概率分布P(YT|XT),且DS ≠ DT或TS ≠ TT。在大多数情形下,我们假定可以得到的标注目标样本的数目有限,比标注源样本要指数级地少。

场景

根据之前的定义,现在让我们看下迁移学习的典型场景:

  1. S ≠ T 源领域和目标领域的特征空间不一样,例如,用两种语言书写的文档。
  2. P(XS) ≠ P(XT) 源领域和目标领域的边缘概率分布不一样,例如,讨论不同主题的文档。
  3. S ≠ T 两个任务的标签空间不一样,例如,目标任务中给文档分配另一套不同于源任务的标签。在实践中,这个场景往往和下一个场景同时发生,这是因为,两个不同的任务有不同的标签空间,却有完全一致的条件概率分布,这种情况极为罕见。
  4. P(YS|XS) ≠ P(YT|XT) 源任务和目标任务的条件概率分布不一样,例如,源文档和目标文档的分类不均衡。实践中这一场景相当常见,过采样、欠采样、SMOTE之类的方法在该场景下应用广泛。

 

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

关键点

在迁移学习的过程中,必须回答下面三个重要的问题:

  • 迁移什么: 这是整个过程的第一步,也是最重要的一步。我们需要分清哪部分知识是来源特定的,哪部分是来源和目标之间共享的。
  • 何时迁移: 可能有些场景下迁移知识并不会改善表现,反而会使事情更糟(也称为负迁移)。迁移学习的目标是改善目标任务的表现/结果,而不是劣化。我们需要小心什么时候迁移,什么时候不迁移。
  • 如何迁移: 当我们搞明白迁移什么还有何时迁移后,我们就可以进一步确定在领域/任务间实际迁移知识的方式了。本文后面的部分会详细介绍这部分内容。

 

迁移学习策略

根据领域、任务、数据可用性,我们可以选择不同的迁移策略和技术,详见下图(摘自我们之前提到的论文A Survey on Transfer Learning)。

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

我们可以从这张示意图看到,迁移学习可以归为三类:

  • 归纳迁移学习: 源领域和目标领域一致,而源任务和目标任务不同。取决于源领域是否包含标注数据,可以进一步划分为两个子类别:多任务学习和自行学习。
  • 无监督迁移学习: 和归纳迁移学习一样,领域一致,任务不同。只不过源领域和目标领域都没有标注数据。
  • 直推式迁移学习: 源任务和目标任务相似,但相应的领域不同。源任务有大量标注数据,而目标领域没有标注数据。这一类别可以进一步分为特征空间不同和边缘概率分布不同两种子类别。

下表总结了上面三个类别的不同点:

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

从迁移什么的角度,迁移学习可以分为以下类别:

  • 实例迁移 在目标任务中复用源领域的知识通常属于理想场景。在大多数情形下,源领域数据无法直接复用。相反,源领域中的一些具体实例可以用来改进目标任务的结果。比如,Dai等提出AdaBoost扩展TrAdaBoost就属于这一类。
  • 特征表示迁移 通过识别可以用于目标领域的良好特征表示,最小化领域散度并降低误差率。取决于标注数据的可用性,可以应用监督或无监督方法进行特征表示迁移。
  • 参数迁移 相关任务的模型可能共享一些参数或者超参数的先验分布。这和多任务学习不同,多任务学习同时学习源任务和目标任务,而在参数迁移中,我们可以对目标领域的损失函数应用额外的权重,以改善总体表现。
  • 关系知识迁移 和上面三类不同,关系知识迁移试图处理非IID(非独立同分布)数据。例如,社交网络数据可以利用关系知识迁移技术。

下表总结了上述两种分类系统之间的关系:

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

 

用于深度学习的迁移学习

下面,我们将这些对迁移学习的理解应用于深度学习背景。

DL下的深度学习

流言: 除非你的问题有一百万标注数据,你无法进行深度学习。

现实

  • 你可以从未标注数据学习有用的表示。
  • 你可以基于易于生成标签的相邻的代理目标训练。
  • 你可以从相关任务迁移学习到的表示。

深度学习模型属于归纳学习的代表。归纳学习算法的目标是从一组训练样本中推断出映射关系。例如,在分类情形下,模型学习输入特征到分类标签之间的映射。这样的学习器要想很好地推广到未见数据上,它的算法需要遵循和训练数据分布相关的一些假定。这些假定称为归纳偏差。归纳偏差或假定可以通过多种因素体现,例如受限的假设空间,还有在假设空间中的搜索过程。因此,这些偏差会影响给定任务和领域上的模型如何学习和学习什么。

迁移学习:思路

不必为你的任务从头训练一个深度网络,相反,你可以:

  • 选取一个在不同领域为不同的源任务训练的网络
  • 使其适应目标领域和目标任务。

变体:

  • 领域相同,任务不同
  • 领域不同,任务相同

 

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

归纳迁移学习利用源任务的偏差帮助完成目标任务。这可以通过不同方式实现,例如调整目标任务的归纳偏差,限制模型空间,收紧假设空间,调整搜索过程本身。

迁移学习全面指南:概念、项目实战、优势、挑战

来源:Lisa Torrey和Jude Shavlik

 

归纳迁移之外,归纳学习算法同样利用贝叶斯和层次化迁移技术,帮助改善目标任务的学习和表现。

深度迁移学习策略

近年来,深度学习取得了显著的进展,让我们可以处理复杂问题,得到惊人结果。然而,深度学习系统所需的训练时间和数据量比传统ML系统要多得多。人们在计算机视觉和自然语言处理(NLP)等领域开发、测试了各种取得当前最优表现(有时和人类表现相当甚至超过人类表现)的深度学习网络。大多数情况下,开发者会分享这些网络的细节,供他人使用。这些预训练网络/模型形成了深度学习环境中迁移学习(深度迁移学习)的基础。让我们看下深度迁移学习的两种最流行的策略。

作为特征提取器的现成预训练模型

深度学习系统和模型属于层叠架构,在不同层学习不同的特征。接着这些层最后连接最终层(在监督学习情形下通常是一个全连接层)以得到最终输出。这样的层叠架构让我们可以利用Inception V3或VGG之类的预训练网络,去其最终层,将其作为固定的特征提取器,用于其他任务。

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

这一想法的关键在于只使用预训练模型的权重层提取特征,在为新任务训练新数据的时候不更新这些预训练层。

例如,如果我们使用不带最终分类层的AlexNet,它会基于其隐藏状态帮助我们将新领域任务中的图像转换为4096维的向量,从而让我们可以利用源领域任务的知识,提取新领域任务的特征。基于深度神经网络进行迁移学习时,这是使用最广泛的方法之一。

现在你可能会产生一个疑问,在实践中,这些预训练的现成特征提取器在不同任务上的表现如何?

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

毫无疑问,在现实世界任务中,这种做法效果真的很好。如果嫌上面的图不够清楚,那么我们放大一下上图右侧的比较:

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

可以看到,在不同的计算机视觉任务中,预训练模型的表现都非常出色。

微调现成预训练模型

这里我们并不仅仅替换最终的分类/回归层,同时还选择性地重新训练之前的一些层。深度神经网络是高度可配置架构,有各种超参数。如前所述,前面的层捕捉通用特征,后面的层更关注手头的特定任务。比如,在下图的人脸识别问题中,前面的低层学习很通用的特征,而高层则学习任务特定的特征。

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

基于这一洞见,我们在重新训练时可以冻结(固定权重)特定层,微调剩余层以匹配我们的需求。在这一情形下,我们利用了网络总体架构的知识,并将其状态作为重训步骤的开始。这有助我们在更短的时间内取得更好的表现。

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

冻结还是微调?

这就带来一个问题,我们应该冻结网络层将它们作为特征提取器呢,还是应该同时微调网络层呢?

这取决于目标任务。如果目标任务的标签匮乏,而且我们希望避免过拟合,那就冻结。相反,如果目标任务的标签更丰富,那就微调。一般而言,我们可以通过给不同层设置不同的学习率找到冻结和微调之间的折衷。

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

预训练模型

迁移学习的基础需求之一是有在源任务上表现良好的模型。幸运的是,深度学习世界相信分享。许多不同领域的当前最先进的深度学习架构被相关团队开放分享,例如计算机视觉和NLP,深度学习应用最流行的两个领域。预训练模型通常以百万参数/权重的形式分享,这些参数/权重是模型训练至稳定状态后取得的。每个人都可以通过不同方式使用预训练模型。著名的深度学习Python库keras,提供了下载一些流行的模型的接口。你也可以通过网络获取预训练模型,因为大多数模型是开源的。

计算机视觉的一些流行模型:

  • VGG-16
  • VGG-19
  • Inception V3
  • Xception
  • ResNet-50

自然语言处理任务的一些词嵌入模型:

  • Word2Vec
  • GloVe
  • FastText

最近,NLP迁移学习方面有一些非常优秀的进展,其中最著名的是Google的普适句编码器和BERT。

这两个进展很有潜力,我非常确定真实世界应用很快就会广泛采用。

深度迁移学习类型

迁移学习方面的文献经过了多次迭代,如前所述,相关的术语比较随意,经常可以互相替换。因此,有时候要区分迁移学习、领域自适应、多任务学习挺让人迷惑的。放轻松,这些都是相关的术语,试图解决类似的问题。一般来说,你应该总是将迁移学习看成一般概念或原则,试图使用源任务-领域的知识解决目标任务。

领域自适应

通常,领域自适应指源领域和目标领域的边缘概率不同的场景。源领域和目标领域数据分布的内在偏移,意味着我们需要进行一些调整才能迁移学习。例如,标记为正面、负面的影评语料库和产品评论的情绪分析语料库是不一样的。在影评上训练的分类器在分类产品评论时会见到不同的分布。因此,这些场景下的迁移学习将使用领域自适应技术。

领域混淆

之前我们了解了不同的迁移学习策略,甚至讨论了从源领域/任务到目标领域/任务迁移什么,何时迁移,如何迁移。特别是,我们讨论了特征表示迁移如何有用。值得再次强调的是,深度学习网络的不同层捕捉了不同的特征。我们可以利用这一事实学习领域不变的特征,并提升它们在不同领域间的可迁移性。我们并不让模型学习任何表示,而是使两个领域的表示尽可能地接近。这可以通过直接对表示本身应用特定的预处理步骤达成。Baochen Sun、Jiashi Feng、Kate Saenko的论文Return of Frustratingly Easy Domain Adaptation(容易得要死的领域自适应的回归)讨论了其中一些技术,Ganin等的论文Domain-Adversarial Training of Neural Networks(神经网络的领域对抗训练)也讨论了这种提高表示相似性的技术。这一技术背后的基本思路是在源模型中加入另一个目标,通过混淆领域自身鼓励相似性。领域混淆正是由此得名。

多任务学习

在迁移学习的世界中,多任务学习的调调有点不一样。在迁移学习情形下,同时学习多个任务,不区分源任务和目标任务。在这一情形下,学习器一下子从多个任务中接收信息,而在迁移学习中,学习器刚开始对目标任务一无所知。

迁移学习全面指南:概念、项目实战、优势、挑战

 

 

单样本学习

深度学习系统对数据有着天然的饥渴,因为它们需要许多训练样本才能学习权重。这是深度神经网络的限制因素之一,尽管人类学习不存在这一问题。例如,一旦小孩知道了苹果是什么样的,他可以很容易地识别另一品种的苹果(只需一个或少量训练样本);而ML和深度学习算法就没有这个能力。单样本学习是迁移学习的一个变体,我们根据单个或少量训练样本尝试推理所需输出。在不可能为每个可能分类(假设这是一个分类任务)获取标注数据的真实世界场景下,以及经常加入新分类的场景下,单样本学习尤为有用。一般认为,李飞飞及其协作者的里程碑论文One Shot Learning of Object Categories(目标类别的单样本学习)创造了单样本学习这一术语,开启了单样本学习这一子领域的研究。该论文提出了一个贝叶斯框架的变体,用于目标类别的表示学习。后来人们改进了这一方法,并应用了深度学习系统。

零样本学习

零样本学习是迁移学习的又一极端变体,基于未标注数据学习一项任务。这也许听起来难以置信,如果这一方法真的有效,那将置大多数监督学习算法于何地?零数据学习或零样本学习方法在其训练阶段做了巧妙的调整,利用额外的信息来理解未见数据。Goodfellow等的《深度学习》一书是这样讲述零样本学习的:在这一场景下学习了三个变量,传统的输入变量x,传统的输出变量y,和一个描述任务的随机变量T。训练模型学习条件概率分布P(y|x,T)。在机器翻译这类的场景下,零样本学习很方便,因为我们可能甚至都没有目标语言中的标签。

迁移学习应用

毫无疑问,深度学习是从迁移学习中受益良多的算法类别。下面是一些例子:

  • NLP中的迁移学习: 对ML和深度学习而言,文本数据提出了各种各样的挑战。通常,我们使用不同的向量化技术转换文本。基于不同的训练数据集,我们得到了Word2Vec和FastText之类的嵌入。通过从源任务迁移知识,它们可以用于不同的任务,例如情绪分析和文档分类。除此之外,普适句编码器和BERT这类较新的模型毫无疑问地展现了未来的无穷可能。
  • 音频/语言中的迁移学习: 类似NLP和计算机视觉,深度学习也在基于音频数据的任务中得到了广泛应用。例如,针对英语的自动语音识别(ASR)模型成功用于提升德语等其他语言的识别表现。自动识别说话人则是迁移学习大有助益的另一个例子。
  • 计算机视觉中的迁移学习: 基于不同的CNN架构,深度学习在多种计算机视觉任务上的应用取得了相当大的成功。Yosinski及其协作者的论文How transferable are features in deep neural networks(深度神经网络中特征的迁移性如何)揭示了低层如何提取边缘等计算机视觉特征,最终层如何作用于任务特定的特征。因此,这些发现帮助我们在风格迁移和人脸识别等目标任务中利用VGG、AlexNet、Inception等现有的当前最先进模型,目标任务和这些模型原本训练的任务不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值