迁移学习基础
人类具有跨任务传输知识的固有能力。我们在学习一项任务的过程中获得的知识,可以用来解决相关的任务。任务相关程度越高,我们就越容易迁移或交叉利用知识。到目前为止所讨论的机器学习和深度学习算法,通常都是被设计用于单独运作的。这些算法被训练来解决特定的任务。一旦特征空间分布发生变化,就必须从头开始重新构建模型。迁移学习是一种克服孤立的学习范式,也是一种利用从一项任务中获得的知识来解决相关任务的思想。本章将介绍迁移学习的概念,并重点介绍其在深度学习方面的内容。本章将涵盖以下主题:
- 迁移学习简介;
- 迁移学习策略;
- 通过深度学习进行迁移学习;
- 深度迁移学习的类型;
- 迁移学习的挑战。
4.1 迁移学习简介
学习算法通常被设计用来单独处理任务或问题。根据用例和已有数据的需求,一种算法被应用于为给定的特定任务训练一种模型。传统的机器学习根据特定的领域、数据和任务,对每个模型进行单独的训练,如图4.1所示。
迁移学习将学习过程向前推进了一步,并且更符合人类跨任务利用知识的思想。因此迁移学习是一种将一种模型或知识重用于其他相关任务的方法。迁移学习有时也被认为是现有机器算法的扩展。在迁移学习领域以及理解知识如何跨任务迁移的课题中,有大量的研究和工作正在进行。1995年举办的神经信息处理系统(Neural Information Processing System,NIPS)研讨会上发布的Learning to Learn: Knowledge Consolidation and Transfer in Inductive Systems为该领域的研究提供了最初的动力。
图4.1
1995年NIPS会议的所有研讨会列表可以从网上获取。
从那时起,为学习而学习、知识巩固和归纳迁移等术语就开始与迁移学习交换使用。一直以来,不同的研究人员和学术文献从不同的上下文为迁移学习提供了不同的定义。Goodfellow等人在他们的著作Deep Learning中提及了在泛化上下文中的迁移学习。其定义为“迁移学习是这样一种情境:在一种条件下学习到的知识在另一种条件中被用于改进泛人。”
让我们通过一个例子来理解前面的定义。假设我们的任务是在餐馆的限定区域内识别图像中的对象,我们将此任务在其定义的范围内标记为T1。给定此任务的数据集,我们将训练一个模型并对其进行调优,使其能够很好地(泛化)处理来自相同领域(餐馆)中未见过数据点。传统的监督机器学习算法在我们没有足够的训练实例来完成给定领域的任务时就会出现问题。假设我们现在必须从来自公园或咖啡馆的图片中识别物体(即任务T2)。理想情况下,我们应该能够使用为任务T1训练的模型,但在现实中,我们将面临性能下降和模型泛化较差的问题。发生这种情况的原因有很多,我们可以将其统称为模型对训练数据和领域的偏差。因此迁移学习使我们能够利用以前学到的知识,并将其应用于新的相关任务中。如果我们有更多任务T1的数据,我们可以利用这些数据进行学习,并将其推广用于任务T2(任务T2的数据明显更少)。在图像分类中,特定的底层特征,如边缘、形状和光照,可以在任务之间共享,从而实现任务之间的知识迁移。
图4.2所示为迁移学习将已有知识重用在新的相关任务中的原理。
图4.2
在学习一个目标任务时,已有任务会被当作一项额外输入,如图4.2所示。
迁移学习的优点
我们可以利用源模型中的知识来加强目标任务中的学习。除了提供重用已建模型的能力外,迁移学习还可以通过以下几种方式协助完成学习目标任务。
- 提升基线性能。当我们用源模型中的知识增强孤立学习者(也称为无知学习者)的知识时,基线性能可能会由于这种知识转移而得到提升。
- 模型开发时间。与从零开始学习的目标模型相比,利用来自源模型的知识有助于全面学习目标任务。这反过来将促成开发或学习模型所需的总时长的改进。
- 提升最终性能。利用迁移学习可以获得更高的最终性能。
我们将在接下来的章节中详细讨论一个或多个收益是有可能的。图4.3所示的内容展示了更好的基线性能(更高的起点)、效率提升(更高的斜率)和更好的最终性能(更高的渐近线)。
图4.3
迁移学习已经在归纳学习者的上下文中被应用和研究,如神经网络、贝叶斯网络等。强化学习是另一个正在探索迁移学习可能性的领域,因此迁移学习的概念并不局限于深度学习。
在本章和后面几章的内容中,我们将把迁移学习的应用范围限制在深度学习的上下文中。
4.2 迁移学习策略
首先看一下迁移学习的正式定义,然后利用它来理解迁移学习不同的策略。在论文A Survey on Transfer Learning中,Pan和Yang使用领域、任务和边际概率来描述一个用于理解迁移学习的框架。该框架的定义为“一个领域D可以定义为一个包含两个元素的元组,一个元素为特征空间x,另一个元素为边际概率P(X),其中X表示一个样本数据点。”
,其中xi 表示一个特定向量,而且
。因此有公式4.1:
(公式4.1)
另一方面,一项任务T可以定义为一个包含两个元素的元组,其中一个元素是特征空间γ,另一个元素是目标函数f。目标函数可以从概率的角度表示为
。因此有公式4.2:
(公式4.2)使用该框架,我们可以将迁移学习定义为一个过程,目标是利用Ds领域中Ts源任务的知识,提升目标领域DT中的目标函数fT(或者目标任务TT)。这导致了以下4种场景。
- 特征空间。源和目标领域的特征空间彼此不相同,例如。如果我们的任务与文档分类相关,则该场景会引用不同语言的源和目标任务。
- 边际概率。源和目标领域的边际概率互不相同,例如。这个场景也被称为领域适应。
- 标签空间。源和目标领域的标签空间在该场景下互不相同,例如。这通常也意味着存在第四种场景——条件概率不同。
- 条件概率。在此意味着,这样的条件概率在源和目标领域中互不相同。
正如我们目前所看到的,迁移学习指的是在目标任务中利用来自源学习者的现有知识的能力。在迁移学习过程中,必须回答以下3个重要问题。
- 迁移什么。这是整个过程的第一步,也是最重要的一步。为了提高目标任务的性能,我们应该尝试寻找关于哪些部分的知识可以从源转移到目标。当尝试回答该问题时,我们将试图确定哪些知识是源中特定的,以及哪些部分是源和目标共有的。
- 何时迁移。在某些场景下,为了迁移而迁移知识会比没有提升更为糟糕(此种情况被称为负迁移)。我们的目标是利用迁移学习来提升目标任务的性能或结果,而不是降低它们。我们需要注意什么时候迁移,什么时候不迁移。
- 如何迁移。一旦“迁移什么”和“何时迁移”这两个问题得到回答,就可以着手确定跨领域或任务实际迁移知识的方法。该步骤涉及对现有算法和不同技术的修改,相关内容将在本章后面的部分中介绍。另外,4.3节将列出具体的用例,以便更好地理解如何迁移。
分组技术能够帮助我们理解总体特征,并为使用特征提供更好的框架。迁移学习方法可以根据其所涉及的传统机器学习算法的类型进行分类,如下所示。
- 归纳迁移。在此场景中,源领域和目标领域相同,但是源任务和目标任务不同,该算法尝试使用源领域的归纳偏差来对目标任务进行改进。根据源领域是否包含标记数据,可以进一步将其分为两个子类别,分别类似于多任务学习和自学学习。
- 无监督迁移。该设置类似于归纳迁移,同时侧重于目标领域中的无监督任务。源领域和目标领域相似,但是任务不同。在该场景中,标记数据在两个领域中都不可用。
- 直推迁移。在该场景中,源任务和目标任务之间有相似之处,但是对应的领域不同。源领域有很多标记数据,而目标领域没有。根据特征空间不同或边际概率不同的设置,该分类可以进一步划分出子类别。
以上3个迁移类别概述了迁移学习可以被应用和研究的不同设置。为了回答关于在这些类别分别迁移了什么东西的问题,可以采用以下方法。
- 实例迁移。将知识从源领域重用到目标任务通常是一个理想化的场景。在大多数情况下,源领域数据不能直接被重用。然而,源领域中的某些实例可以与目标数据一起被重用来改善结果。在归纳迁移的场景中,Dai和他的合著者对AdaBoost算法进行了修改,这有助于利用来自源领域的训练实例来改进目标任务。
- 特征表示迁移。这种方法的目的是通过识别可以从源领域到目标领域使用的良好特征表示来最小化领域差异和降低错误率。根据标记数据的可用性,监督或无监督算法可用于基于特征表示的迁移。
- 参数迁移。该方法的运行原理是基于有相关任务的模型共享一些参数或超参数先验分布的假设。与源任务和目标任务同时进行学习的多任务学习不同,对于迁移学习,我们可以对目标领域的损失增加额外的权重来提高整体性能。
- 相关知识迁移。与前3种方法不同,相关知识迁移会尝试处理非独立同分布(Indepently Identically Distribution,IID)数据,例如不独立且分布相同的数据。换句话说,每个数据点都和其他数据点有关联。例如,社交网络数据会利用相关知识转移技术。
本节我们学习了在不同的上下文和设置下以非常泛化的方式执行迁移学习的不同策略。现在让我们利用这些知识来学习如何在深度学习中应用迁移学习。
4.3 迁移学习和深度学习
深度学习模型是归纳学习的代表。归纳学习算法的目标是从一组训练实例中推导出一个映射。例如在分类场景中,模型学习输入特征和类别标签之间的映射。为了使模型能对从未见过的数据进行泛化,归纳学习算法使用了一组与训练数据分布相关的假设。这些假设集被称为归纳偏置。
归纳偏置或假设可以通过多个因素进行表征,例如其被限制的假设空间和通过假设空间的搜索过程。因此这些偏置会影响模型对给定任务和领域的学习方式和内容。
归纳迁移技术利用源任务的归纳偏置来辅助目标任务。该过程可以通过不同的方式来实现,例如通过限制模型空间、缩小假设空间,或者借助源任务的知识来调整搜索过程本身。该过程如图4.4所示。
图4.4
除了归纳迁移,归纳学习算法还利用贝叶斯和层次迁移技术来协助改进目标任务的学习和提升性能。
4.3.1 迁移学习方法论
近些年来,深度学习取得了长足的进步和惊人的成绩。但是此类深度学习系统所需的训练时间和数据量要比传统的机器学习系统高出几个量级。
在计算机视觉和自然语言处理等领域,多个具有先进性能的深度学习网络(有些性能与人类相当甚至更好)已经被开发和测试。在大多数情况下,团队或成员会共享这些网络的细节并提供给其他人使用(其中一些流行的网络已经在第3章中介绍过了)。这些预训练好的网络或模型构成了深度学习中迁移学习的基础。
1.特征提取
正如第3章中所讨论的,深度学习系统是层级架构,不同层会学习不同的特征,这些层最终连接到一个最终层(在分类的情况下,通常是一个全连接层)来获得最终输出。这种层级架构允许我们利用一个删除最终层的预先训练好的网络(如Inception V3或VGG)来作为其他任务的特征提取器。图4.5所示为基于特征提取的迁移学习过程。
例如,如果我们使用一个去除最终分类层的AlexNet网络,那么它将帮助我们将来自一个新的领域任务的图像基于其隐藏状态转换为4096维向量,以使我们能够利用源领域任务的知识从一个新领域的任务中提取特征。这是利用深度神经网络进行迁移学习的最广泛使用的方法之一。
图4.5
2.微调
这是一种更为复杂的技巧,在这种情况下不仅会对(用于分类或回归的)最终层进行替换,而且还会选择性地重训练前面的一些层。深度神经网络是具有多种超参数的高度可配置体系架构。正如前面所讨论的,初始层被认为是用来捕获一般特征,而后面的层则更多地关注特定任务。利用这种洞察能力,我们可以在重训练时冻结(固定权重)某些层,或者根据我们的需要对其他层进行微调。在这种情况下,我们可以利用网络总体架构方面的知识,并将其状态作为重训练步骤的起点。这将反过来帮助我们用更少的训练时间来获得更好的性能。
4.3.2 预训练模型
迁移学习的一个基本要求是存在能够很好地运行源任务的模型。幸运的是,深度学习世界相信分享。许多深度学习团队各自公开分享了最先进的深度学习架构,这些模型可以跨越不同的领域,例如计算机视觉和自然语言处理。在第3章中,我们研究了一些著名和文档优秀的架构,这些网络背后的团队不仅分享了结果,还分享了他们的预训练模型。预训练模型通常以数百万个参数或权值的形式被共享,这些参数或权值是在模型被训练到稳定状态时获得的。每个人都可以通过不同的方式使用预训练模型。著名的深度学习Python库keras提供了一个接口来下载各种可用的预训练网络,例如XCeption、VGG16和InceptionV3。同样,预训练模型也可以通过TensorFlow和其他深度学习库来获取。伯克利的Model Zoo提供了经过多年开发的更广泛的预训练模型集合。
4.3.3 应用
深度学习是一类非常成功的应用迁移学习的算法。以下是一些例子。
- 文本数据迁移学习。文本数据对机器学习和深度学习提出了各种挑战。文本数据经常会使用不同的技巧进行转换或向量化。词向量(如Word2vec和fastText)使用不同的训练数据集准备完成,它通过迁移源任务中的知识被运用到不同的任务中,如情绪分析和文档分类。
- 计算机视觉迁移学习。利用不同的CNN架构,深度学习已经非常成功地应用于各种计算机视觉任务,例如对象识别。在论文How transferable are features in deep neural networks中,Yosinski和其他合著者展示了关于较低层作为传统计算机视觉特征提取器(例如边缘检测器),而最终层则趋向于任务特定特征的发现。这些发现有助于将现有的先进模型(如VGG、AlexNet和Inception)运用于目标任务,例如样式迁移和面部检测,但这些任务的训练模型和源模型并不相同。
- 语音或音频迁移学习。与文本和计算机视觉领域类似,深度学习已经成功地应用于基于音频数据的任务。例如,为英语开发的自动语音识别(Automatic Speech Pecognition,ASR)模型已经成功地用于提高其他语言(如德语)的语音识别性能。除此之外,自动说话人识别是另一个对于说明迁移学习大有帮助的例子。
4.4 深度迁移学习类型
正如本章开头所提到的,关于迁移学习的文献经历了很多迭代,与迁移学习相关的术语已经被宽松地使用,并且经常可以互换使用。因此有时很难区分迁移学习、领域适应和多任务学习。请放心,这些方法都相互关联并且都可以用于尝试解决类似的问题。为了在本书中保持一致性,当尝试使用源任务-领域的知识解决目标任务时,我们将迁移学习的概念作为一个通用概念。
4.4.1 领域适应
领域适应通常指那些源和目标领域之间的边际概率不同的场景,例如
。源领域和目标领域的数据分布存在固有的偏移或漂移,需要进行调整才能迁移学习。例如,标记为正向或负向的电影评论语料库与产品评论情绪语料库不同。根据电影评论情绪训练的分类器如果用于对产品评论进行分类,会看到不同的分布。因此在这些场景下,领域适应技巧被用于迁移学习。
4.4.2 领域混淆
我们学习了不同的迁移学习策略,甚至讨论了迁移什么、何时迁移以及如何迁移3个将知识从源转移到目标的问题。特别地,我们讨论了特征表示迁移非常有效。值得重申的是深度学习网络中的不同层会捕获不同的特性集合,我们可以利用这一事实来学习领域不变特征,并提高它们跨领域的可移植性。我们不允许模型学习任何表示,而是推动这两个领域的表示尽可能相似。
该技巧可以通过将某些预处理步骤直接应用于表示本身来实现。其中一些已经由Baochen Sun、Jiashi Feng和Kate Saenko在他们的论文Return of Frustratingly Easy Domain Adaptation中讨论过。Ganin等人在他们的论文Domain-Adversarial Training of Neural Networks中也提及朝相似的表示进行推进的方法。这种技巧背后的基本思想是通过混淆领域本身向源模型添加另一个目标来鼓励相似性,因此被称为领域混淆。
4.4.3 多任务学习
多任务学习是迁移学习世界中一种风格略微不同的方法。在多任务学习的情况下,多个任务同时被学习,而不区分源任务和目标任务。在多任务学习中,学习者一次接收多个任务的信息;而在迁移学习中,学习者最初对目标任务一无所知。
多任务学习如图4.6所示。
图4.6
4.4.4 一次性学习
深度学习系统本质上对数据要求非常严苛,因此它们需要许多训练实例来学习权重。这是深度神经网络的局限性之一,尽管人类的学习方式并非如此。例如一旦孩子看到苹果的样子后,他们就能很容易地辨别出不同种类的苹果(用一个或几个训练例子);而机器学习和深度学习算法不是这样。一次性学习是迁移学习的一种变体,它试图基于一个或几个训练实例来推断出所需的输出。这在不可能为每个可能的类都产出标记数据(如果是一个分类任务)的现实场景中,以及在经常添加新类的场景中都非常有用。
在具有里程碑意义的论文One Shot Learning of Object Categories中,作者们提出了一次性学习的概念,明确该子领域的研究,并提出了一种用于对象分类表示学习的贝叶斯框架变体。这种方法在后续得到了改进,并使用深度学习系统加以应用。
4.4.5 零样本学习
零样本学习是迁移学习的另一种极端变体,它依赖于无标记的实例来学习任务。这可能听起来难以置信,尤其是考虑到大多数监督学习算法的本质就是对标记数据进行学习的事实。零数据学习或零样本学习方法在训练阶段对本身进行巧妙的调整,来提取额外信息以理解从未见过的数据。在Deep Learning一书中,Goodfellow和其他合著者将零样本学习描述为这样一种情境:共有3个变量被学习,例如传统输入变量x、传统输出变量y,以及用于描述任务T的额外随机变量。因此模型T被训练来学习条件概率分布
。零样本学习在一些场景(例如机器翻译)中很有用,此时的目标语言中甚至不会包含标签。
4.5 迁移学习的挑战
迁移学习潜力巨大,同时也是现有学习算法普遍需要的增强。然而一些与迁移学习相关的问题仍然需要更多的研究和探索。除了回答“迁移什么”“何时迁移”和“如何转移”等问题之外,负向转移和迁移边界也带来了主要的挑战。
4.5.1 负向迁移
到目前为止,我们讨论的案例都在将源任务的知识转移到目标任务后提升了性能。但在某些情况下迁移学习也可能会导致性能下降。负向迁移是指从源任务到目标任务的知识迁移没有带来任何改进,反而导致目标任务的整体性能下降的场景。出现负向迁移可能有多种原因,例如源任务与目标任务没有足够的关联,或者迁移方法不能很好地利用源任务和目标任务之间的关系。避免负向迁移非常重要,需要仔细调研。Rosenstien和其他合著者在他们的论文中经验性地展示了当源任务和目标任务不相似时,强制迁移将降低目标任务的性能。Bakker和其他合著者提出的Bayesian方法,以及其他用于辨别关联性基于聚类解决方案的技巧正在研究如何避免负向迁移。
4.5.2 迁移边界
在迁移学习中,对迁移进行量化也会对迁移的量和可行性产生重要影响。为了对迁移的量进行衡量,Hassan Mahmud和其他合著者利用柯尔莫戈罗夫复杂度(Kolmogorov complex)证明了一定的理论界限,以分析任务之间迁移学习和衡量任务之间的关联性。Eaton和其他合著者提出了一种新的基于图的方法来测量知识迁移。这些技术的详细细节超出了本书的范围。读者可以通过本节中列出的参考资料来对这些主题进行更多的探索。
4.6 总结
在本书的第1~3章中介绍了机器学习和深度学习的背景和基础之后,本章开始了构建迁移学习基础的第二阶段。在深入到实际用例之前,我们必须将对迁移学习的理解形式化,并学习不同的技巧和研究,以及与之相关的挑战。在本章中,我们介绍了迁移学习概念背后的基本原理,迁移学习近些年来的发展,以及为什么迁移学习是优先需求。
我们首先在学习算法的广泛背景之下理解了迁移学习及其优势。接着我们讨论了理解、应用和分类迁移学习方法的各种策略,以及深度学习背景下的迁移学习。我们讨论了与深度迁移学习相关的不同的迁移学习方法,如特征提取和微调;还介绍了著名的预训练模型和使用深度学习系统进行迁移学习的流行应用。近些年来,深度学习已被证明是非常成功的,因此许多在该领域中使用迁移学习进行的研究也越来越多。
我们简要讨论了深度迁移学习的不同变体,如领域适应、领域混淆、多任务学习、一次性学习和零样本学习。在本章的最后,我们提出了与迁移学习相关的挑战,如负向迁移和迁移边界。在本章中,我们列出了许多与迁移学习相关的各种参考资料,并鼓励读者探索它们以获得更多信息。本章内容是当前迁移学习领域的一个指针和概述。在第5章中,我们将进行一些与迁移学习相关的实践练习。
本文摘自《Python迁移学习》
本书有两个主要目的:第一个是我们会将重点集中在详细介绍深度学习和迁移学习,用易于理解的概念和例子将两者进行对比;第二个是利用TensorFlow、Keras和Python生态系统的真实世界案例和问题进行研究,并提供实际的示例。
本书首先介绍机器学习和深度学习的核心概念;接着介绍一些重要的深度学习架构,例如深度神经网络(Deep Neural Network,DNN)、卷积神经网络(Convolutional Neural Network,CNN)、递归神经网络(Recurrent Neural Network,RNN)、长短时记忆(Long Short Term Memory,LSTM)和胶囊网络;然后介绍迁移学习的概念和当前最新的预训练网络,如VGG、Inception和ResNet,我们还将学习如何利用这些系统来提升深度学习模型的性能;最后介绍不同领域(如计算机视觉、音频分析以及自然语言处理)的多个真实世界的案例研究和问题。
读完本书,读者将可以在自己的系统中实现深度学习和迁移学习。