翻译: Transfer learning 迁移学习指南
Posted AI架构师易筋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻译: Transfer learning 迁移学习指南相关的知识,希望对你有一定的参考价值。
这是您需要了解的有关经典迁移学习和深度迁移学习的所有信息。阅读本指南可改进您的模型训练并在更短的时间内获得更好的性能。
1. 背景
事情是这样的——
至少可以说,在处理一项全新的任务时收集大量数据可能具有挑战性。
然而-
仅使用有限数量的训练数据获得令人满意的模型性能(想想:模型准确性)也很棘手……如果不是不可能的话。
幸运的是,有一个解决方案可以解决这个问题,它的名字叫迁移学习。
这几乎好得令人难以置信,因为它的想法非常简单:您可以用少量数据训练模型,并且仍然可以达到高水平的性能。
很酷,对吧? 好吧,请继续阅读,因为我们将为您提供有关这一切如何运作的最佳解释。
2. 什么是迁移学习?
迁移学习是一种机器学习方法,我们重用预先训练的模型作为新任务模型的起点。
简而言之,在一个任务上训练的模型被重新用于第二个相关任务,作为一种优化,允许在对第二个任务建模时快速进展。
通过将迁移学习应用于一项新任务,与仅使用少量数据的训练相比,可以获得显着更高的性能。
迁移学习是如此普遍,以至于很少从头开始为图像或自然语言处理相关任务训练模型。
相反,研究人员和数据科学家更喜欢从预先训练的模型开始,该模型已经知道如何对对象进行分类,并且已经学习了图像中的边缘、形状等一般特征。
ImageNet、AlexNet 和 Inception 是具有迁移学习基础的模型的典型示例。
3. 传统机器学习与迁移学习
深度学习专家引入迁移学习来克服传统机器学习模型的局限性。
让我们来看看这两种学习方式之间的区别。
-
传统机器学习模型需要从头开始训练,计算量大,需要大量数据才能达到高性能。另一方面,迁移学习在计算上是高效的,并且有助于使用小数据集获得更好的结果。
-
传统的机器学习有一种孤立的训练方法,每个模型都针对特定目的进行独立训练,而不依赖于过去的知识。与此相反,迁移学习使用从预训练模型中获得的知识来完成任务。为了更好地描绘它:
不能将 ImageNet 的预训练模型与生物医学图像一起使用,因为 ImageNet 不包含属于生物医学领域的图像。
- 迁移学习模型比传统的机器学习模型更快地达到最佳性能。这是因为利用来自先前训练的模型的知识(特征、权重等)的模型已经理解了这些特征。它比从头开始训练神经网络更快。
4. 经典迁移学习策略
根据应用程序的领域、手头的任务和数据的可用性,应用不同的迁移学习策略和技术。
在决定迁移学习策略之前,回答以下问题至关重要:
- 哪 部分知识可以从源转移到目标,以提高目标任务的性能?
- 什么时候迁移,什么时候不迁移,以便提高目标任务的性能/结果而不降低它们?
- 如何根据我们当前的领域/任务转移从源模型中获得的知识?
传统上,迁移学习策略根据任务域和存在的标记/未标记数据量分为三大类。
让我们更详细地探讨它们。
4.1 归纳迁移学习 Inductive Transfer Learning
归纳迁移学习要求源域和目标域相同,尽管模型处理的具体任务不同。
算法尝试使用来自源模型的知识并将其应用于改进目标任务。预训练模型已经具备领域特征的专业知识,并且比我们从头开始训练它处于更好的起点。
根据源域是否包含标记数据,归纳迁移学习进一步分为两个子类别。这些分别包括多任务学习和自学学习。
4.2 转导式迁移学习 Transductive Transfer Learning
源任务和目标任务的域不完全相同但相互关联的场景使用转导迁移学习策略。可以得出源任务和目标任务之间的相似性。这些场景通常在源域中有很多标记数据,而目标域只有未标记数据。
4.3 无监督迁移学习 Unsupervised Transfer Learning
无监督迁移学习类似于归纳迁移学习。唯一的区别是算法专注于无监督任务,并且在源任务和目标任务中都涉及未标记的数据集。
5. 迁移学习的常用方法
现在,我们将通过另一种方法来根据领域的相似性对迁移学习策略进行分类,并且独立于用于训练的数据样本的类型。
5.1 同构迁移学习 Homogeneous Transfer Learning
开发并提出了同质迁移学习方法来处理域具有相同特征空间的情况。
在同构迁移学习中,域的边际分布只有微小的差异。这些方法通过校正样本选择偏差或协变量偏移来调整域。
这是故障。
5.2 实例转移 Instance transfer
它涵盖了一个简单的场景,即源域中存在大量标记数据而目标域中标记数据数量有限。域和特征空间都只在边际分布上有所不同。
例如,假设我们需要建立一个模型来诊断老年人占多数的特定区域的癌症。给出了有限的目标域实例,并且可以从另一个年轻人占多数的地区获得相关数据。由于存在边际分布差异,直接从另一个区域转移所有数据可能不成功,并且老年人患癌症的风险高于年轻人。
在这种情况下,自然会考虑调整边际分布。基于实例的迁移学习将权重重新分配给损失函数中的源域实例。
5.3 参数传递 Parameter transfer
基于参数的迁移学习方法在模型/参数级别迁移知识。
这种方法涉及通过源和目标域学习器模型的共享参数传递知识。转移学习知识的一种方法是创建多个源学习器模型,并优化组合类似于集成学习器的重新加权学习器以形成改进的目标学习器。
基于参数的方法背后的想法是,在源域上经过良好训练的模型已经学习了一个定义良好的结构,如果两个任务相关,这个结构可以转移到目标模型。一般来说,深度学习模型中权重共享有两种方式:软权重共享和硬权重共享。
- 在软权重共享中,该模型预计将接近已学习的特征,并且如果其权重显着偏离给定的一组权重,通常会受到惩罚。
- 在硬权重共享中,我们在不同模型之间共享确切的权重。
5.4 特征表示转移 Feature-representation transfer
基于特征的方法转换原始特征以创建新的特征表示。这种方法可以进一步分为两个子类别,即不对称和对称的基于特征的迁移学习。
- 非对称方法转换源特征以匹配目标特征。换句话说,我们从源域中获取特征并将它们拟合到目标特征空间中。由于特征分布的边际差异,在这个过程中可能会有一些信息丢失。
- 对称方法找到一个共同的潜在特征空间,然后将源特征和目标特征都转换为这个新的特征表示。
5.5 关系知识转移 Relational-knowledge transfer
基于关系的迁移学习方法主要侧重于学习源域和目标域之间的关系,并利用这些知识推导出过去的知识并在当前上下文中使用它。
这种方法将在源域中学习的逻辑关系或规则转移到目标域。
例如,如果我们了解男性声音中语音的不同元素之间的关系,则有助于分析另一个声音中的句子。
5.6 异构迁移学习 Heterogeneous Transfer Learning
迁移学习涉及从先前的网络派生表示,以从新样本中提取有意义的特征以完成相互关联的任务。然而,这些方法忘记考虑源域和目标域之间特征空间的差异。
收集具有与目标域相同特征空间的标记源域数据通常具有挑战性,并且开发了异构迁移学习方法来解决这些限制。
该技术旨在解决源域和目标域具有不同特征空间和其他问题(如不同的数据分布和标签空间)的问题。异构迁移学习应用于跨领域任务,例如跨语言文本分类、文本到图像分类等。
6. 深度学习的迁移学习
最后,让我们在深度学习的背景下讨论迁移学习。
自然语言处理和图像识别等领域被认为是迁移学习的热门研究领域。还有许多模型达到了最先进的性能。
这些预训练的神经网络/模型构成了深度学习背景下迁移学习的基础,被称为深度迁移学习。
6.1 现成的预训练模型作为特征提取器 Off-the-shelf pre-trained models as feature extractors
要了解深度学习模型的流程,必须了解它们的组成部分。
深度学习系统是分层架构,可以在不同的层学习不同的特征。初始层编译更高级别的特征,随着我们深入网络,这些特征缩小为细粒度特征。
这些层最终连接到最后一层(通常是全连接层,在监督学习的情况下)以获得最终输出。这打开了使用流行的预训练网络(例如 Oxford VGG 模型、Google Inception 模型、Microsoft ResNet 模型)的范围,而无需将其最后一层作为其他任务的固定特征提取器。
这里的关键思想是利用预训练模型的加权层来提取特征,而不是在训练期间为新任务使用新数据更新模型的权重。
预训练模型在足够大且足够通用的数据集上进行训练,并将有效地用作视觉世界的通用模型。
6.2 微调现成的预训练模型 Fine Tuning Off-the-shelf Pre-trained Models
这是一种更具吸引力的技术,我们不仅直接依赖从预训练模型中提取的特征并替换最后一层,而且还选择性地重新训练之前的一些层。
深度神经网络是分层结构,具有许多可调的超参数。初始层的作用是捕获通用特征,而后面的层更多地关注手头的显式任务。微调基础模型中的高阶特征表示以使它们与特定任务更相关是有意义的。我们可以重新训练模型的某些层,同时在训练中保持一些冻结。
下图描述了一个关于目标检测任务的示例,其中网络的初始较低层学习非常通用的特征,而较高层学习非常特定于任务的特征。
6.3 冻结与微调 Freezing vs. Fine-tuning
进一步提高模型性能的一种合乎逻辑的方法是在训练您添加的分类器的同时重新训练(或“微调”)预训练模型顶层的权重。
这将强制从模型从源任务中学习的通用特征映射更新权重。微调将允许模型在目标领域应用过去的知识并再次重新学习一些东西。
此外,应该尝试微调少数顶层而不是整个模型。前几层学习基本和通用特征,这些特征可以推广到几乎所有类型的数据。
因此,明智的做法是冻结这些层并重用从过去培训中获得的基础知识。随着我们越来越高,这些特征越来越具体到训练模型的数据集。微调旨在调整这些特殊功能以使用新数据集,而不是覆盖通用学习。
7. 迁移学习分 6 步
最后,让我们带您了解迁移学习在实践中的运作过程。
7.1.获取预训练模型 Obtain pre-trained model
第一步是根据任务选择我们希望保留的预训练模型作为训练的基础。迁移学习需要预先训练的源模型和目标任务域的知识之间有很强的相关性,以使它们兼容。
以下是您可以使用的一些预训练模型:
对于计算机视觉:
- VGG-16
- VGG-19
- Inception V3
- XCeption
- ResNet-50
对于 NLP 任务:
- Word2Vec
- GloVe
- FastText
7.2. 创建基础模型 Create a base model
基础模型是我们在第一步中选择的与我们的任务密切相关的架构之一,例如 ResNet 或 Xception。我们可以下载网络权重,这样可以节省模型额外训练的时间。否则,我们将不得不使用网络架构从头开始训练我们的模型。
在某些情况下,基础模型在最终输出层中的神经元数量可能比我们在用例中所需的要多。在这种情况下,我们需要移除最终的输出层并进行相应的更改。
7.3. 冻结图层 Freeze layers
从预训练模型中冻结起始层对于避免使模型学习基本特征的额外工作至关重要。
如果我们不冻结初始层,我们将失去所有已经发生的学习。这与从头开始训练模型没有什么不同,而且会浪费时间、资源等。
7.4. 添加新的可训练层 Add new trainable layers
我们从基础模型中重用的唯一知识是特征提取层。我们需要在它们之上添加额外的层来预测模型的特殊任务。这些通常是最终的输出层。
7.5. 训练新层 Train the new layers
预训练模型的最终输出很可能与我们想要的模型输出不同。例如,在 ImageNet 数据集上训练的预训练模型将输出 1000 个类。
但是,我们需要我们的模型为两个类工作。在这种情况下,我们必须使用新的输出层来训练模型。
7.6.微调你的模型 Fine-tune your model
提高性能的一种方法是微调。
微调包括解冻基础模型的某些部分并以非常低的学习率在整个数据集上再次训练整个模型。低学习率将提高模型在新数据集上的性能,同时防止过度拟合。
8. 深度迁移学习的类型
8.1 领域适应 Domain Adaptation
域适应是一种迁移学习场景,其中源域和目标域具有不同的特征空间和分布。
域适应是适应一个或多个源域以传递信息以提高目标学习器性能的过程。此过程尝试更改源域以使源的分布更接近目标的分布。
8.2 领域混淆 Domain Confusion
在神经网络中,不同的层识别特征的不同复杂性。在一个完美的场景中,我们将开发一种算法,使该特征域保持不变并提高其跨域的可迁移性。
在这样的上下文中,源域和目标域之间的特征表示应该尽可能相似。目标是在源处为模型添加一个目标,以通过混淆源域本身来鼓励与目标的相似性。
具体来说,域混淆损失用于通过匹配目标域和源域的分布来混淆神经网络的高级分类层。
最后,我们要确保样本对分类器来说是无法区分的。为此,必须最小化源样本的分类损失,还必须最小化所有样本的域混淆损失。
8.3 多任务学习 Multi-task Learning
在多任务学习的情况下,来自同一领域的多个任务同时学习,不区分源和目标。
我们有一组学习任务 t1 , t2 , ..., t(n)
并且我们同时共同学习所有任务。
这有助于从每个场景中转移知识,并从同一领域的所有不同场景中开发出丰富的组合特征向量。学习者通过一些共享知识优化所有 n 个任务的学习/性能。
8.4 单发学习 One-shot Learning
单发学习是一项分类任务,我们有一个或几个示例可以学习并在未来对许多新示例进行分类。
人脸识别就是这种情况,人脸必须用不同的面部表情、光照条件、配饰和发型正确分类,模型有一张或几张模板照片作为输入。
对于一次性学习,我们需要完全依赖基础模型的知识转移,这些基础模型是根据我们为一个班级提供的一些示例进行训练的。
8.5 零样本学习 Zero-shot Learning
如果迁移学习过度使用类的零个实例并且不依赖于标记的数据样本,则相应的策略称为零样本学习。
零样本学习在训练阶段需要额外的数据来理解看不见的数据。
零样本学习侧重于传统输入变量x、传统输出变量y和特定于任务的随机变量。零样本学习在机器翻译等场景中派上用场,我们可能没有目标语言的标签。
9. 深度迁移学习应用
迁移学习帮助数据科学家从以前使用的机器学习模型中获得的知识中学习,以完成类似的任务。
这就是为什么这项技术现在已应用于我们在下面列出的几个领域的原因。
9.1 自然语言处理 NLP
NLP 是迁移学习最有吸引力的应用之一。迁移学习使用可以理解语言结构的预训练 AI 模型的知识来解决跨域任务。下一个单词预测、问答、机器翻译等日常 NLP 任务使用 BERT、XLNet、Albert、TF 通用模型等深度学习模型。
9.2 计算机视觉 Computer Vision
迁移学习也应用于图像处理。
深度神经网络用于解决与图像相关的任务,因为它们可以很好地识别图像的复杂特征。密集层包含检测图像的逻辑;因此,调整较高层不会影响基本逻辑。图像识别、目标检测、图像噪声去除等是迁移学习的典型应用领域,因为所有与图像相关的任务都需要熟悉图像的基本知识和模式检测。
9.3 音频/语音 Audio/Speech
迁移学习算法用于解决音频/语音相关的任务,例如语音识别或语音到文本的翻译。
当我们说“Siri”或“Hey Google!”时,为英语语音识别开发的主要 AI 模型正忙于在后端处理我们的命令。
有趣的是,为英语语音识别开发的预训练 AI 模型构成了法语语音识别模型的基础。
10. 迁移学习简而言之:关键要点
最后,让我们快速回顾一下我们今天学到的所有内容。以下是我们所涵盖内容的要点摘要:
- 迁移学习模型专注于存储在解决一个问题时获得的知识,并将其应用于不同但相关的问题。
- 许多预训练模型可以作为训练的起点,而不是从头开始训练神经网络。这些预先训练的模型提供了更可靠的架构并节省了时间和资源。
- 迁移学习用于没有足够数据进行训练或我们希望在短时间内获得更好结果的场景。
- 迁移学习包括选择与目标领域相似的源模型,在知识迁移之前使源模型适应目标模型,并训练源模型以实现目标模型。
- 通常对模型的较高层进行微调,而将较低层冻结,因为从源任务转移到同一领域的目标任务的基础知识是相同的。
- 在具有少量数据的任务中,如果源模型与目标模型过于相似,则可能存在过拟合问题。为了防止迁移学习模型过拟合,必须调整学习率、冻结源模型中的一些层,或者在训练目标模型时添加线性分类器可以帮助避免这个问题。
参考
https://www.v7labs.com/blog/transfer-learning-guide
以上是关于翻译: Transfer learning 迁移学习指南的主要内容,如果未能解决你的问题,请参考以下文章
PyTorch 迁移学习 (Transfer Learning) 代码详解