本文概述
- 迁移学习:定义
- 迁移学习的一般概念
- 迁移学习的应用
文章图片
下一篇博客文章将解释如何将主动学习与迁移学习结合使用, 以最佳地利用现有(和新)数据。从广义上讲, 利用外部信息来提高性能或泛化能力的机器学习应用程序使用迁移学习。
迁移学习:定义 迁移学习的一般思想是使用从任务中学习到的知识, 这些任务在只有很少标记数据的设置中可以使用许多标记数据。创建带标签的数据非常昂贵, 因此最佳利用现有数据集是关键。
在传统的机器学习模型中, 主要目标是基于从训练数据中学习的模式, 将未见数据概括为通用的。使用迁移学习, 你将尝试从为其他任务学习的模式开始, 从而启动这一概括过程。本质上, 你不是从(通常是随机初始化的)空白纸开始学习过程, 而是从已经学习的解决不同任务的模式开始。
知识和模式的转移在很多领域都是可能的。今天的帖子将通过研究这些不同领域的几个示例来说明迁移学习。目的是激励数据科学家在他们的机器学习项目中尝试进行迁移学习, 并让他们意识到其优缺点。
我认为, 对迁移学习的充分理解是数据科学家的一项关键技能, 这有以下三个原因:
- 迁移学习对于任何类型的学习都是必不可少的。并非教导人类要完成每个任务或问题。每个人都会遇到从未遇到过的情况, 我们仍然设法以临时的方式解决问题。从大量经验中学习以及将” 知识” 导出到新环境中的能力正是迁移学习的全部内容。从这个角度来看, 迁移学习和概括在概念上非常相似。主要区别在于, 迁移学习通常用于” 跨任务转移知识, 而不是概括特定任务” 。因此, 迁移学习本质上与所有机器学习模型中必需的泛化概念相关。
- 迁移学习是确保深度学习技术在大量小数据设置中取得突破的关键。深度学习在研究中几乎无处不在, 但是许多现实生活中的场景通常没有数以百万计的标记数据点来训练模型。深度学习技术需要大量数据才能调整神经网络中的数百万个参数。尤其是在监督学习的情况下, 这意味着你需要大量(非常昂贵的)标记数据。标记图像听起来很琐碎, 但是例如在自然语言处理(NLP)中, 需要专业知识才能创建大的标记数据集。例如, Penn树库, 即词性标注语料库, 已经建立了7年, 需要训练有素的语言学家的密切合作。迁移学习是减少数据集所需大小以使神经网络成为可行选择的一种方法。其他可行的选择正在朝着概率更大的模型发展, 这些模型通常更适合处理有限的数据集。
- 迁移学习既有优点也有缺点。了解这些缺点对于成功的机器学习应用至关重要。知识的转移只有在” 适当” 时才可能进行。在这种情况下, 准确定义什么合适的方法并不容易, 通常需要进行实验。你不应该相信在玩具车中四处行驶的幼儿能够骑法拉利。迁移学习具有相同的原理:尽管很难量化, 但迁移学习存在上限。它不是适合所有问题案例的解决方案。
迁移学习的一般概念 迁移学习的要求
顾名思义, 迁移学习需要将知识从一个领域转移到另一个领域的能力。迁移学习可以在较高层次上进行解释, 也就是说, 可以将NLP模型体系结构重新用于序列预测问题, 因为许多NLP问题可以固有地减少为序列预测问题。迁移学习也可以从低层次进行解释, 实际上你是在不同模型中重用一个模型中的参数(跳过语法, 连续词袋等)。迁移学习的要求一方面是特定于问题的, 另一方面是特定于模型的。接下来的两节将分别讨论迁移学习的高级和低级方法。尽管你通常会在文献中找到这些名称不同的概念, 但迁移学习的总体概念仍然存在。
多任务学习
在多任务学习中, 你可以同时针对不同的任务训练模型。通常, 使用深度学习模型是因为它们可以灵活地适应。
文章图片
调整网络体系结构, 以使第一层用于不同的任务, 然后是不同的任务特定层和用于不同任务的输出。总体思路是, 通过对网络进行不同任务的培训, 网络将更好地推广, 因为需要模型在需要类似” 知识” 或” 处理” 的任务上表现良好。
在自然语言处理的情况下, 一个示例是一个模型, 其最终目标是执行实体识别。与其仅在实体识别任务上训练模型, 不如将其用于执行语音分类, 下一词预测等功能。因此, 该模型将从这些任务和不同数据集中学习的结构中受益。我强烈推荐塞巴斯蒂安·鲁德(Sebastian Rude)撰写的该博客和该博客, 它们都致力于解决多任务学习问题, 以了解有关多任务学习的更多信息。
特色化器
深度学习模型的一大优势是特征提取是” 自动的” 。基于标记的数据和反向传播, 网络能够确定任务的有用功能。网络会” 弄清楚” 输入的哪一部分是重要的, 以便例如对图像进行分类。这意味着抽象了特征定义的手动工作。深度学习网络可以在其他问题中重用, 因为提取的特征类型通常也对其他问题有用。本质上, 在功能丰富的设备中, 你可以使用网络的第一层来确定有用的功能, 但是你不必使用网络的输出, 因为它的输出过于特定于任务。
文章图片
鉴于深度学习系统擅长特征提取, 你如何重用现有网络来执行其他任务的特征提取?可以将数据样本馈送到网络中, 并将网络中的中间层之一作为输出。该中间层可以解释为原始数据的固定长度, 经过处理的表示形式。通常, 在计算机视觉的背景下使用特征化器的概念。然后将图像输入到经过预先训练的网络(例如VGG或AlexNet)中, 并在新的数据表示形式上使用其他机器学习方法。提取中间层作为图像表示形式会显着减少原始数据大小, 从而使它们更适合传统的机器学习技术(例如, 与较小的图像表示形式(例如尺寸128)相比, 逻辑回归或SVM可以更好地工作)原始尺寸, 例如128× 128 = 16384尺寸)。
迁移学习的应用 自然语言处理
【迁移学习(利用大数据的洞察力)】我以前的一篇博客文章讨论了当今许多NLP管道如何使用词嵌入。与单行编码相比, 这些词嵌入是一种更丰富的词表示方式。它们被广泛使用, 并且存在不同的变体。通常, 这些变体在其起源的语料库(例如Wikipedia, 新闻文章等)方面有所不同, 并且在嵌入模型方面也有所不同。重要的是要了解这些模型和语料库的背景, 以了解带有词嵌入的迁移学习是否明智。人们通常不会称呼使用单词嵌入迁移学习, 但鉴于与计算机视觉迁移学习的相似性, 我不同意。本质上, 使用单词嵌入意味着你使用的是featurizer或嵌入网络将单词转换为向量。
即使word2vec已经使用4年了, 它仍然是一种非常有影响力的词嵌入方法。另一方面, 诸如FastText之类的最新方法已使词嵌入具有多种语言。与词袋方法相比, word2vec或FastText的嵌入是向前迈出的重要一步。尽管如此, 它们的用处通常取决于问题领域。
想象一下, 你正在为销售人员构建新闻推荐服务。销售人员希望收到有关可能对其所销售产品感兴趣的公司的新闻。新闻文章中使用的词汇通常相当通用或笼统, 这意味着使用的词汇通常会受到大多数词嵌入的支持(取决于他们所接受训练的语料库)。另外, 如果你有销售人员收集他们阅读了几周的新闻文章, 那么你马上将拥有一个大号的标记语料库。通过能够重用单词嵌入, 推荐引擎的性能可能会显着提高。
另一方面, 假设你必须对法律合同执行主题分类。不仅是任何类型的法律合同, 还有竞争法范围内的法国法律合同。这些类型的数据集通常没有标签, 或者只有有限的一组标签文档可用。下一节将说明为什么在这种情况下, 即用型迁移学习只能带你到现在为止:
- 词汇外(OOV)单词是训练期间未看到的单词。虽然word2vec和FastText是在Wikipedia或其他语料库上进行训练的, 但使用的词汇是有限的。在训练过程中, 经常出现的单词经常被忽略。这意味着可能不支持竞争法中法律合同的特定领域用语。使用预训练的单词嵌入时, 通常会检查OOV单词并将其替换为UNK令牌(UNKnown单词令牌), 并且所有这些单词都分配有相同的向量。如果语料是特定领域的, 这是非常无效的, 因为特定领域的单词通常带有很多含义。如果将大多数(带有含义的)单词替换为UNK令牌, 则该模型将无法学到很多东西。
- 标准预训练单词嵌入的一种替代方法是在无监督的大型文档集上微调嵌入。请注意, 这仅是在有大量文档可用的情况下的一种选择。这意味着, 如果你在竞争法方面拥有大量的语料库, 则可以通过针对其他更通用的词进行预先训练的词嵌入, 来训练针对特定领域的词的词嵌入。通常, 开始进行预训练的词嵌入将加快整个过程, 并使训练自己的词嵌入更加容易。请注意, 开箱即用地使用词嵌入仍然更加困难, 并且需要有关如何准备用于词嵌入训练的语料库的一些知识。
Gensim, spacy和FastText是三个很棒的框架, 可让你在机器学习应用程序中快速使用单词嵌入。此外, 它们还支持自定义单词嵌入的训练。查看这个gensim, 这个spacy或这个FastText教程, 以了解更多信息!
计算机视觉中的迁移学习
深度学习方法已在计算机视觉方面取得了巨大的成功。深度学习无需手动定义特定于问题的特征(例如, 定向梯度的直方图(HoG)特征, 直方图特征等), 而是使从业人员可以训练将原始图像作为输入的模型。特征定义的原始复杂性现在已经转移到了定义网络的复杂性上。虽然架构经常被重用, 但是在组成网络架构时没有单一的策略。通常, 已经发明了深度学习技术, 并将其应用于庞大的数据集(例如Imagenet或MS Coco)的研究环境中。为了提高这些大型数据集的性能, 研究人员提出了深度和复杂性不断提高的网络体系结构。这些体系结构导致具有数百万个参数的模型(通常)无法扩展到小型图像数据集。在少于5, 000个图像的数据集上训练诸如住宅网络(ResNet)或VGG网络之类的体系结构只会导致严重的过度拟合。最近的深度学习趋势已经取得了重大进展, 但是似乎只有很少数据集的数据科学家被冷落了。
事实证明, 深度学习网络学习分层特征表示(请参阅Distill的此博客文章)。这意味着较低级别的层学习较低级别的特征(例如边), 而较高级别的层则学习较高级别的但无法解释的概念(例如形状)。当在不同的数据集上训练网络时, 也会出现分层特征表示的想法, 这表明可以在不同的问题域中重用它们。
将迁移学习用于计算机视觉问题时, 可以使用两种方法。
- 首先, 如果有足够数量的图片(每类> 1, 000张图片), 则可以使用在不同数据集中训练的模型的权重来初始化新模型。在训练过程中, 你将保持多个固定层(通常是第一个卷积层), 并优化较高层的参数。目标是减少需要优化的参数数量, 同时重用较低级别的层。无论问题域如何, 较低层的层极有可能是相似的, 并且模型必须自由地将特定于问题的较高层的层组合在一起。
- 其次, 如果只有很少数量的图片可用(< 1, 000张), 则在大多数情况下, 对现有模型进行再培训很可能仍会导致过拟合。关于图像的数量, 需要优化的参数的数量将仅仅是太大。无论如何, 只要数据在视觉上与大型数据集中的图像相似, 则可以使用大型预训练网络(在该大型数据集上进行训练)作为特征化工具。更具体地说, 你删除大型网络的最后N个层(通常为N = 1或N = 2), 并将大型预训练网络的输出用作图像的特征表示。再次基于这样的假设, 即预训练网络中的第一层学习独立于问题的特征。然后, 可以将这些功能与传统的计算机视觉方法一起用于例如SVM或逻辑回归。但是, 不必手动定义功能, 而是将预训练的网络用作特征化器。
想象一下从事野生动植物保护的工作, 你想对实时摄影机供稿中出现的不同动物进行分类。特别是如果你正在尝试濒临灭绝的监测物种, 则可能将无法收集大量带标签的数据。鉴于预先训练的网络通常会在广泛的概念领域(从食物到动物和物体)进行训练, 因此使用预先训练的网络作为特征或初始化绝对是一种选择。
另一方面, 假设你需要为肿瘤科医生分析放射线图像。这些图像不是典型的猫狗图像, 因为它们是对患者执行的扫描的输出。这些图像尽管转换为RGB图像, 但通常以灰色阴影显示以说明扫描结果。尽管预训练的网络能够从RGB图像中检测形状和边缘, 但是它们很可能很难检测射线照相图像上的形状和边缘, 因为那些不在预训练模型的训练数据中。另外, 在医疗场景中, 标记数据量通常很少。存在几种利用(可能丰富的)未标记数据的技术, 但是它们通常需要更多的工作和微调。通常, 这些技术试图通过迭代训练每一层以重建图像(使用卷积和反卷积层)来预训练分类网络的权重。这些技术和预训练网络的组合通常用于改善收敛。
上面提到的两种计算机视觉方法都基于一个重要的假设:在原始数据集中提取的模式在新数据集的上下文中很有用。这种有用性很难量化, 但它是要考虑的重要假设。地震, 高光谱甚至医学图像与ImageNet中的图像显示出有限的相似性。然而, 确定图像包含哪个交通标志依赖于相当相似的模式。了解计算机视觉问题域对于成功应用计算机视觉至关重要。通过了解用于迁移学习的模型(数据集, 技术等)的背景, 你可以避免在实验过程中浪费时间, 而将精力集中在微调可能会有所作为的模型上。
推荐阅读
- 精品!10个构建现代应用程序的AI平台
- 人工智能世界的9大框架热门推荐
- Python中的Web爬虫和NLP
- R Graph Gallery的访问量最大的5个图主题
- 适用于初学者的Python Seaborn教程
- 使用Python的扑克概率和统计
- 使用Python进行时间序列分析的教程
- hybridapp/webapp的前端UI框架推荐
- 配置vCenter Server Appliance 6.7