georgesale 2019-06-27
摘要: 到底是迁移学习?什么时候使用它?如何使用它?
所谓迁移学习是指针对新问题重新使用预先训练的模型。由于它能用较少的数据训练深度神经网络,这使得目前它在深度学习领域非常流行。通过这篇文章您将会了解什么是迁移学习,它是如何工作的,为什么应该使用它以及何时可以使用它。同时这篇文章将向您介绍迁移学习的不同方法,并为您提供一些已经预先训练过的模型的资源。
在迁移学习中,能够使用预先训练模型的问题只能是与之不同但相类似的问题。比如,您训练了一个简单的分类器来预测图像中是否有背包,则可以使用模型在训练过程中获得的知识来识别太阳镜等其他物体。
迁移学习的总体思路是利用已有知识,即一个模型从一项任务中学到的很多被标记的训练数据可以用在另外一个我们没有很多数据的新任务中。
迁移学习主要用于需要大量计算能力的计算机视觉和自然语言处理任务,如情感分析。
例如,在计算机视觉领域,神经网络通常会尝试检测早期图层的边缘,中间图层的形状以及底图层中的一些特定人物的特征。通过迁移学习,您可以利用最初接受培训任务留下的早期层和中间层,并仅对底图层进行重新的训练。
例如,上述提到的识别背包的训练模型示例,该模型将用于识别太阳镜。在早期的图层中,模型学会识别物体,因此,我们只需重新训练后一层,这样它就能了解到太阳镜和其他物体的区别。
迁移学习的主要优点是节省训练时间,在大多数情况下您的神经网络不需要大量数据就能使得性能更好。
通常情况下,从头开始训练一个神经网络需要大量的数据,但你并不总是能够获得足够的数据。比如自然语言处理(NLP),它需要创建大型标记数据集。而要训练深度神经网络有时需要大量时间,这样您还可以节省大量训练时间。
据DeepMind Technologies首席执行官Demis Hassabis介绍,Transfer也是最有前途的技术之一,它有朝一日可以引领我们进入人工智能(AGI)领域。
一种情况是,当满足以下一点或两点:(a)您没有足够的带标签的培训数据来从头开始培训您的网络(b)已经存在一个预先培训过的类似任务的网络,该网络通常是经过大量数据的培训的。另一个适用的情况是,任务1和任务2具有类似的输入。
如果原始模型是使用TensorFlow进行训练的,您可以简单地恢复它并为您的任务重新训练一些层。请注意,只有当从第一个任务中学习的特性具有一般性时,转移学习才会起作用,这意味着他们对于另一个相关的任务也很有用。此外,模型的输入需要与初始训练时的尺寸同步。如果没有,您需要增加一个预处理步骤,将输入大小调整到所需大小。
1. 训练一个模型并运用它
举个例子,你想解决任务A,但没有足够的数据来训练深度神经网络。但是你有关于与之类似的任务B的大大量数据,您可以在任务B上训练一个深度神经网络,并以此模型为出发点来解决您的初始任务A。
您所尝试解决的问题决定了您是使用整个模型还是仅使用其中的几层。如果您在两个任务中有相似的输入,则可以重新使用该模型并对新输入进行预测。或者,您也可以更改并重新训练不同的任务特定图层或输入图层。
2. 使用预训练模型
这里有很多这样的模型,所以你需要做一些研究。你可以重复使用多少层,需要再次训练多少层,很难形成一个通用规则。
例如,Keras提供了九种预先训练的模型,可用于迁移学习、预测、特征提取和微调。从这里您可以了解到如何使用这些模型。
也有很多研究机构发布了他们已经培训过的模型。这种类型的迁移学习在深度学习中最为常用。
3. 特征提取
另一种方法是使用深度学习找出表述问题的最佳形式,这意味着要找到最重要的特征。这种方法也被称为表示学习,并且通常可以获得比用手工设计的表示更好地性能。
在机器学习的大部分时间里,这些功能都是由研究人员和领域专家手工制作的,好在深度学习可以自动提取特征,但是您仍然需要决定应将哪些功能放入网络。神经网络可以了解到你已经投入了哪些功能,哪些是真正重要的,哪些不是。表示学习算法可以在很短的时间内发现一个很不错的特征组合(就算是需要大量人力的复杂任务也可以做到这一点)。
表示学习也可以用于其他问题。您只需使用第一层来找出特征的正确表示,但由于它任务特定性太强,不能使用网络的输出。只需将数据提供给您的网络,并使用其中一个中间层作为输出层。这一层可以被解释为原始数据的表示。
这种方法主要用于计算机视觉领域,因为它可以减少数据集的大小,从而缩短计算时间并使其更适合传统算法。
受欢迎的预训练模型
有一些预先训练好的机器学习模型非常流行,其中之一是Inception-v3模型,该模型经过了ImageNet“大型视觉识别挑战”的培训。在这个挑战中,参与者必须将图像分为1000个类,如“斑马”“斑点狗”和“洗碗机”。
在这里,您可以从TensorFlow中看到有关如何重新训练图像分类器的教程。
微软还通过MicrosoftML R软件包和microsoft Python软件包提供了一些预先训练好的模型,可用于R和Python开发。
其他非常流行的模型是ResNet和AlexNet。您可以访问pretrained.ml,它是一个可排序搜索的预训练深度学习模型汇编,还有演示和代码。
本文由阿里云云栖社区组织翻译。
文章原标题《Transfer Learning》
作者:Niklas Donges
详情请阅读原文