【IT168 资讯】昨天在我们的网站上已经有一篇介绍迁移学习的文章,简单的将迁移学习的基本情况进行了概述,在今天的这篇文章中,将讨论迁移学习的两个应用,概述自然语言处理和计算机视觉领域的相关例子。
NLP
与单一编码相比,这些单词嵌入是表示单词的更丰富的方式。它们被广泛使用,存在不同的变体。通常,这些变体在其产生的语料库中是不同的,例如维基百科、新闻文章等,以及嵌入模型的差异。了解这些模型和语料库的背景是非常重要的,以了解是否用词嵌入来进行转移学习是明智的。人们通常不会调用嵌入式迁移学习,但其实,因为与计算机视觉中传输学习的相似性。基本上,使用词嵌入意味着你正在使用一个特征提升器或嵌入网络将单词转换为信息向量。
在NLP中,存在不同的方法来表示单词(词语嵌入在左边有一个类似于表示法的词,在右边有一个类似于表示法的符号)。借助词嵌入,机器学习模型可以利用不同单词之间存在的关系。
尽管word2vec已经4岁了,但它仍然是一个非常有影响力的词嵌入方法。另一方面,如FastText最近的做法已经使得大量的语言可以使用字嵌入。与bag-of-words方法相比,来自word2vec或FastText的嵌入是向前迈出的重要一步。尽管如此,它们的有用性通常由问题领域决定。
想象一下,你正在为销售人员构建一个新闻推荐服务。销售人员希望收到可能对他们销售的产品感兴趣的公司的消息。在新闻文章中使用的词汇通常是相当通用或一般的,这意味着使用大多数词语嵌入(取决于他们所训练的语料库)支持的词汇。另外,如果你让销售人员收集他们阅读的新闻文章几个星期,那么你立即有一个大的标签语料库在你的手中。通过重复使用词嵌入,推荐引擎可能比简单的BoW模型表现得更好。
另一方面,假设你必须对法律合同进行主题分类。这些类型的数据集通常没有标签,或者只有有限的标签文档可用。下一节将介绍为什么现成的迁移学习只会在这种情况下得到你的支持:
·词汇外(OOV)单词是在训练期间没有看到的单词。虽然Word2vec和FastText是在例如Wikipedia或其他copora上进行训练的,但是使用的词汇是有限的。在训练期间,经常不经常出现的词经常被忽略。这就意味着,竞争法律中的特定领域的词语可能不被支持。所以需要在使用预先训练的单词嵌入时,检查OOV单词并将其替换为UNK令牌(UNKnown单词令牌),并将所有这些单词分配给相同的向量。如果语料库是领域特定的,这可能是非常无效的,因为特定领域的词通常具有很多含义。如果大多数(意义上的)单词被UNK令牌取代,那么这个模型就不会学到很多东西。
·标准的预先训练的词嵌入的另一种方法是对大量无监督的文档集上的嵌入进行微调。请注意,如果有大量文档可用,这只是一个选项。这意味着如果你有一个关于竞争法的庞大的语料库,你可以从预先训练的词嵌入开始,为其他更一般的词开始训练特定领域词的嵌入。通常情况下,开始预先训练的词嵌入将加速整个过程,并将使训练自己的文字嵌入更容易。请注意,使用开箱即用的词语嵌入仍然比较困难,并且需要一些关于如何准备词语嵌入训练的语料库的知识。
这里有个小建议,可以阅读这篇博客文章(http://ruder.io/word-embeddings-2017/)中提到的问题和解决方案,在处理有限的数据时,是创建稳健的NLP系统和文字嵌入的关键。
Gensim、Spacy和FastText是这三个框架,允许你在机器学习应用程序中快速使用文字嵌入。此外,他们还支持定制字嵌入的训练。
在计算机视觉中的迁移学习
深度学习方法已经在计算机视觉领域取得了重大成就。深度学习不需要手动定义特定问题的特征,例如面向方向梯度的直方图(HoG)特征、颜色特征等,从而允许从业者训练以原始图像作为输入的模型。
根据问题类型,需要定义不同类型的HOG特征。这些是可用于计算机视觉的一类视觉特征。注意与下面的卷积网络提取的特征的相似性。
特征定义的原始复杂性现在已经转向定义网络的复杂性。虽然体系结构经常被重用,但在构建网络体系结构中没有单一的策略。通常情况下,深度学习技术已经被发明并应用于大量数据集(如Imagenet或MS Coco)的研究环境中。为了提高这些大型数据集的性能,研究人员提出了日益深入和复杂的网络架构。这些体系结构导致具有数百万参数的模型(典型地)不能缩放到小图像数据集。在少于5000张图像的数据集上训练诸如ResNet或VGG网络之类的体系结构将导致显著的过度拟合。最近的深度学习趋势已经导致了明显的进步,但似乎只有小数据集的数据科学家被遗忘了。
事实证明,深度学习网络学习分层特征表示(见Distill博客文章)。这意味着底层的层次会学习低层特性,比如边缘,而高层级的层次学习了更高层次的,但是还有些不可解释的概念,比如形状。当网络在不同的数据集上进行训练时,也会出现这种分层特征表示的思想,这表明它们可以在不同的问题域中重用。
能够从图像中区分线条和形状(左)可以更容易地确定某物是否是“汽车”,而不是必须从原始像素值开始。迁移学习允许你利用来自其他计算机视觉模型的学习模式。
当在计算机视觉问题上使用迁移学习时,使用了两种方法。
·首先,如果有相当数量的图片(每个类别> 1,000张图片)可用,则可以使用在不同数据集上训练的模型的权重来初始化一个新模型。在训练期间,你可以保持固定的层数(通常是第一个卷积层),并优化高级层的参数。目标是减少需要优化的参数数量,同时重新使用较低的层次。无论问题域如何,较低层次最可能是相似的,并且该模型必须自由地将较高层次结合在一起,以解决问题。
·其次,如果只有少量的图片可用(<1,000),重新训练现有的模型很可能在大多数情况下仍然会导致过度配合。需要优化的参数的数量相对于图像的数量而言太大。无论如何,只要数据在视觉上与大型数据集中的图像相似,则可以将大型预先训练的网络(在该大型数据集上训练)用作特征。更具体地说,你可以删除大型网络的最后N层(通常N = 1或N = 2),并使用大型预先训练的网络的输出作为图像的特征表示。这也是基于这样的假设:预训练网络中的第一层学习与问题无关的特征。这些特征可以用于例如SVM或逻辑回归,类似于传统的计算机视觉方法。然而,不需要手动定义这些特征,而是使用预先训练的网络作为特征。
Keras的API允许加载预先训练的网络,并在训练期间保持几个图层的稳定。在下一节中,将再次讨论两个用例。
设想一下从事野生动植物保护工作中的情景,并且要分类出现在摄像头上的不同动物。特别是如果你正在尝试接近灭绝的监测物种,则可能无法收集大量标记的数据。由于训练有素的网络经常在广泛的概念领域(从食物到动物和物体)进行训练,因此使用预先训练好的网络作为特征或作为初始化者绝对是一种选择。
另一方面,想象一下你需要分析肿瘤科医师的放射照相图像。这些图像不是典型的猫狗图像,因为它们是在病人身上执行扫描的输出。这些图像虽然转换为RGB图像,但通常以灰色显示扫描结果。尽管预先训练的网络能够从RGB图像中检测形状和边缘,但是它们很可能难以检测放射线照相图像上的那些图像,因为那些图像不在预先训练的模型的训练数据中。另外,在医疗场景中,标签数据量通常较低。有几种技术可以利用(潜在丰富的)未标记的数据,但是他们通常需要更多的工作和微调。通常,这些技术试图通过迭代训练每个层来重构图像(使用卷积和去卷积层)来预训练分类网络的权重。这些技术和预先训练的网络的组合通常用于改善收敛性。
上述计算机视觉中的两种方法都依赖于一个重要的假设:原始数据集中提取的模式在新数据集的上下文中是有用的。这种用处很难量化,但这是一个重要的假设。地震、高光谱或甚至医学影像与ImageNet中的图像有一定的相似性。然而,确定图像包含哪些交通标志,依赖于相当相似的模式。了解计算机视觉问题领域是成功应用计算机视觉的关键。通过了解迁移学习中使用的模型(数据集,技术等)的背景,你就可以避免在实验过程中浪费时间,并专注于微调那些可能产生差异的模型上。