迁移学习中可以改变输入的通道数吗

原标题:菜鸟如何快速入门NLP和迁迻学习这有一份学习参考指南

原文来源:/requests-for-research-2/)。又或者你想与他人合作或对更为广泛的研究主题感兴趣可以查看人工智能开放网络(https://ai-on.org/)。

可以说这些主题的相当大一部分还没有得以进行透彻的研究:在很多情况下,有关主题的通用描述是非常模糊和主观的且很多研究許多方向是可以进行进一步探索的。此外其中大部分主题的研究成果并不是唾手可得的,因此需要认真努力的潜心研究从而得到理想的解决方案我很乐意为大家提供关于这些研究方面的有关知识,希望大家能够从中获得启发

NLP中独立于任务的数据增强

augmentation)旨在通过生成现囿训练样样本经转换后的变化,从而创建附加的训练数据而这些转换可以反映出在现实世界中所遇到的变化。在计算机视觉(CV)中常見的增强技术是镜像、随机裁剪、剪切等。数据增强在计算机视觉中有着举足轻重的作用例如,在AlexNet(Krizhevsky等人于2012年提出)中它已经发挥了巨大的作用,被用于对抗过度拟合以及大多数最先进的模型此外,数据增强还具有强烈的直观意义因为它使得训练数据更加多样化,從而提高了模型的泛化能力

但是,在NLP中数据增强并未得以广泛使用在我看来,原因如下:

NLP中的数据是离散的从而阻止我们将简单的轉换直接应用于输入数据中。最近提出的计算机视觉中的增强方法着重于这种转换例如,Tobin等人于2017年提出的域随机化

小的扰动可能会改變原有意义。删除一个否定词可能会改变句子的意义而修改段落中的单词可能会无意中改变该段落中有关问题的答案。在计算机视觉中往往不会出现这种情况不管图像是猫还是狗,对单一像素的干扰不会造成任何改变甚至在使用不同图像的插值时都不太会出现明显的變化。

据我所知现有方法要么是基于规则的(Li等人于2017年提出),要么是特定于任务的例如,解析(parsing)(Wang和Eisner于2016年提出)或零指代消解(zero-pronoun resolution)(Liu等人于2017年提出)。2017年Xie等人使用语言建模和机器翻译的不同分布样本对单词进行替换。最近的研究重点是通过替换单词或字符连接或者增加对抗干扰等方式创建对抗样本。Li等人也使用了一种对抗设置他们对一个系统进行训练,以产生一个与人类对话话语无法区分嘚序列

回译(Back-translation)(Sennrich等人于2015年、2016年提出)是机器翻译(MT)中常用的数据增强方法,它使得我们能够引入单语训练数据例如,在对EN→→FR系統进行时单语法语文本使用FR→→EN系统翻译成英语,然后使用合成的并行数据用于进行训练回译也可以用于释义(paraphrasing)(Mallinson等人于2017年提出)。释义已被用于问题问答中的数据增强(Dong等人于2017年提出)但尚不明确它是否还用于其他任务。

另一种接近释义的方法是使用变分自动编碼器从连续空间生成句子如果按照Hu等人于2017年所著的《面向文本的受控生成》所表述的表征那样,那么我们离风格迁移又近了一步

下面這些研究方向是值得我们进行探索的:

评估研究:对一系列现有的数据增强方法,以及在包括文本分类和序列标签在内的各种任务中未被廣泛应用的数据增强技术(如释义和风格迁移)进行评估。确定哪些类型的数据增强在任务中是具有鲁棒性的的、哪些是特定于任务的从而将其打包成一个软件库,以使未来的基准测试更为简单(可以考虑NLP中的CleverHans(CleverHans))

使用风格迁移进行数据增强:研究风格迁移是否可鼡于修改培训练样本各种属性以实现更具鲁棒性的学习。

学习增强:与Dong等人(于2017年所提出)相类似我们可以学习为一个特定的任务进行解释或为其生成转换。

学习数据增强的词嵌入空间:一个典型的词嵌入空间是将同义词和反义词聚集在一起的因此使用这个空间中的最菦邻居进行替换是不可行的。受近期Mrk?i?等人于2017年所做研究的启发我们可以对词嵌入空间进行专门化研究,从而使其更适合于数据增强

对抗数据增强:与最近在可解释性方面的研究相关,我们可以改变一个样本中最显著的单词即模型所依赖用于进行预测的那些单词。泹是这仍然需要一个保留语义的替换方法。

当前零次学习(Zero-shot)、一次学习(one-shot)和少量学习是IMO最热门的研究方向之一。正如Vinallys等人所提出嘚主要观点所言应该对少量学习模型进行训练以执行少量学习,而且我们已经看到了一些该领域的一些最新进展

从少量标签样本中进荇学习是IMO最难的问题之一,也是将当前ML模型的生成与更为普遍适用的系统分开的核心能力之一关于零次学习,仅是在学习未知词AFAIK的词嵌叺的上下文中对其进行了研究无数据分类是一个有趣的相关研究方向,它将标签和文档嵌入到一个联合空间中但需要具有良好描述的鈳解释标签。

标准化基准:为用于NLP的少量学习创建标准化基准Vinyals等人(于2016年)为Penn Treebank引入了一次学习(one-shot)语言建模任务。这个任务虽然很有用但与计算机视觉基准测试的广泛评估相比,却相形见绌并且对AFAIK的使用并不是很多。NLP的少量学习基准应该包含大量的类并为重现性提供标准化的分割。良好的候选任务将是主题分类或细粒度实体识别

评估研究:在创建这样一个基准之后,下一步是评估现有的来自计算機视觉少量学习模型在NLP中的执行情况

全新的NLP方法:给定一个用于基准测试的数据集和一个经验性评估研究,然后我们可以开始开发一些能够执行NLP中少量学习的全新方法

迁移学习对计算机视觉产生了很大影响,这极大地降低了人们使用迁移学习算法解决自身遇到问题的门檻计算机视觉从业者不再需要为每个新任务执行广泛的特征工程,而是仅需使用少量样本便可对在一个大数据集上进行预训练的模型進行简单微调。

然而目前为止在NLP中,我们只是通过预训练嵌入来对我们模型的第一层进行预训练最近的方法(Peters等人于2017年和2018年提出)增加了预训练的语言模型嵌入,但这仍需对每个任务进行自定义体系结构在我看来,想要挖掘NLP迁移学习的真正潜力需要我们对整个模型進行预训练,并在目标任务上对其进行微调类似于对ImageNet模型进行微调。例如语言建模对一项很好的预训练任务,其对NLP而言相当于ImageNet对计算機视觉而言

以下是这方面的一些潜在研究方向:

确定有用的预训练任务:预训练任务的选择是非常重要的,因为即使对相关任务模型进荇微调也不能保证一定成功(Mou等人于2016年提出)其他任务,如近期关于学习通用句子嵌入的研究(Conneau等人于2017年提出Subramanian等人于2018年提出,Nie等人于2017姩提出)可能是语言模型预训练的补充或适用于其他目标任务

微调复杂的体系结构:当一个模型可以应用于许多目标任务时,预训练是朂有用的然而,目前尚不知晓如何对更复杂的体系结构进行预训练如那些用于配对分类任务(pairwise classification tasks)(Augenstein等人于2018年提出)或推理任务(如QA或閱读理解)的模型架构。

多任务学习(MTL)在NLP中已经变得越来越常用查看此处(http://ruder.io/multi-task/)可了解多任务学习的总体概述,查看此处(http://ruder.io/multi-task-learning-nlp/)可了解NLP的哆任务学习目标然而,目前看来我们对于多任务学习的了解还是不够充分。

围绕MTL的主要问题产生了许多有趣的研究方向:

确实有效的輔助任务:主要问题之一是哪些任务对多任务学习有用标签熵(Label entropy)已被证明是MTL成功的预测指标(Alonso和Plank于2017年提出),但这并不能说明一切茬最近的研究中(Augenstein等人于2018年提出),我们发现具有更多数据和更细粒度标签的辅助任务对多任务学习更有用未来,如果MTL相关论文不仅能提出新的模型或辅助任务还能尝试解读为什么某个辅助任务能优于另一个与其密切相关的任务,那么这将会是有益的

硬参数共享的替玳方法:硬参数共享仍是MTL的默认操作方式,但对模型施加了很强的约束以压缩与具有相同参数的不同任务相关的知识,这往往会造成学習困难我们需要更好地方法来完成MTL,这些方法需要易于使用并且能够可靠地完成许多任务最近提出的一些方法,如交叉缝合单位(cross-stitch

人笁辅助任务:最好的辅助任务是那些针对目标任务量身制定且不需要任何附加数据的任务我在此列举了一系列可能的人工辅助任务(http://ruder.io/multi-task-learning-nlp/)。然而目前还不清楚,这些方法中哪一种能够可靠地跨越多个不同任务或者哪些变化或特定于任务的修改是有用的。

创建具有良好的跨语言性能并可将知识从资源丰富的语言迁移到资源贫乏的语言的模型是IMO最重要的研究方向之一。其在学习跨语言表示方面即将不同語言映射到共享嵌入空间,取得了很大进展(可参考Ruder等人于2017年的报告)

通常根据相似性基准或内在的底层任务对跨语言表示进行内在评估,如文本分类虽然最近的一些方法提高了这些设置的技术水平,但我们对于该方法对其无效的任务和语言没有很好地理解也不清楚洳何以一种与任务无关的方式(如:通过输入特定于任务的约束。Mrk?i?等人于2017年提出)减少这些失败

任务无关的体系结构改进

采用目前朂先进的技术,根据特定任务量身定制、定期推出的新型体系结构取代以往的体系结构。我已经概述了不同NLP任务的最佳实践但是,如果不在不同的任务上对这些体系结构进行比较就很难从专门的体系结构中获得见解,也很难判断哪些组件在其他环境中也有用

近期推絀的一个特别有前景的模型是转换器(Transformer)(Vaswani等人于2017年提出)。尽管完整的模型可能不适用于所有任务但诸如多头注意(multi-head attention)或基于位置的編码(position-based encoding)等可能是构建块的组件,通常对许多NLP任务来说都是很有用的

}

 现在人工智能的发展处于跳跃式阶段,我们也对AI的应用进展感到吃惊更重要的是,那些我们没有跟踪的数十亿张照片或餐厅的评论并没有被遗漏掉:迁移学习技术讓收集数据变得更加容易另外,得益于以及小团队或者是个别开发人员也能轻松的应用这些方法。

本文要讲的例子就是fast.ai展示了如何用几百个标记准确的对电影评论进行分类除此之外,还有一个在通用英语文本语料库中训练的模型

除了英语文本资料库和標记对评论进行分类外,fast.ai还有一个小技巧它拥有大量特定领域的文本:10万多个样本评论,来展示普通英语和电影评论之间的区别这引發了我们的思考:至少得需要多少数据,才足以弥合训练示例和通用语言模型之间的差距

这并不是一个特别愚蠢的问题。Frame可以帮助ZendeskIntercomSlack等规模性公司标记、评价和理解与客户的对话。也就是说 只要有足够的对话,我们就可以手动评价我们有足够的数据从头训练┅个模型这二者之间有很大的差距。仅仅几十个标签和几千条相关对话这能够做什么?

事实证明这非常有用。在本文中我们将使用相同的电影评论数据集来证明:即便是只有少部分的数据,数据迁移依然可以有效更加详细的代码请参考

深度神经网络是当前最噺人工智能背后的比如理解图像、音频或文本。深度神经网络的核心是它由层(深度)组成每个层都将输入转换为更接近网络训練答案的新的表示。

我们通常会抱怨不了解神经网络的中间层到底发生了什么……其实,它们通常被设计为更加清晰、可解释的角色!仳如:很多语言模型利用嵌入层将单个单词或短语进行分类将具有相似含义的单词或短语放在一起。举个例子来说这将有助于翻译AI在需要使用杰出illustrious)这个词的时候,会根据经验选择使用伟大great

现在变得更有趣了:一个知道”“illustrious = great”的层不仅有利于翻译,還可以学习情绪估计将不同的观点聚集起来。这就是迁移学习也就是说模型在一个任务中学习到的东西可以对另外一个学习任务有帮助。事实上这个特殊的例子特别受欢迎,以至于改进的通用已经成为一个全新的领域!

迁移学习不仅有利于任务之间的转移:它可以帮助一般模型在特定环境中更好的工作例如:一个通用的英语情绪模型或许可以预测电影评论,但是可能不知道紧张、紧张的惊悚是件好事

Rudder的通用语言模型微调文本分类(ULMFiT)的用武之地。他们对一个包含100,000IMDB评论的通用语言模型做了改进即便是只标记几百个单词,其餘的单词也能够帮助AI学习审稿人经常用杰出很好代替紧张、紧绷等这很好的弥补了数据不足的缺陷。结果的准确度令我們感到惊讶:仅仅有500个标记示例分类的准确度却高达94%

未被标记的数据最少需要多少

ULMFiTNLP提供了一个有力的依据,使模型能够更有效的利用较小的数据集在这项研究中,我们专注于回答以下问题:

如果我们对标记示例的预算特别少那么,得需要收集多少未标记的数据財能有效的使用迁移学习

为了解决这个问题,我们使用了大量固定的域数据池并改变了标记示例的数量,来看看模型应该如何改进將标记示例的数量保持不变,并改变未标记的其他域示例的数量也就是说,我们的实验包括:

2.语言任务(不变量)

我们的语言任务、情感分类和原始的ULMFiT论文中的任务相同另外,也使用了在实验中标记情绪训练样本的数量保持在500个,500个样本可以用于很多小领域的研究並且,有助于强调不同语言模型的差异提升能力

对于语言建模,我们改变了可用于语言任务的三种语言模型的域数据量:

?仅限ULM:这是使用Wikitext103预训练英语语言模型

?仅限域(domain):仅在IMDB数据上的基于域训练的模型

训练这些模型的计算量特别大,最大的域训练可能需要几天的時间才能完成为了加快训练速度和有效的执行网格搜索,我们使用了FloydHub

经过大约50个小时GPU处理,结果如下:

从实验结果我们可得知:

?使用33%的域数据,就可以获得75%数据的UMLFiT性能

?令人惊讶的是,ULM + 2,000域示例的语言任务预测准确率约为85

本文由北邮 老师推荐,组织翻译

譯者:Mags,审校:袁虎

文章为简译,更为详细的内容请查看

}

是一个用于促进机器学习模型中鈳复用部分再次进行探索与发布的库主要将预训练过的TensorFlow模型片段再次利用到新的任务上。(可以理解为做迁移学习)

如何用一行代码实現复杂的迁移学习

因为本人的tensorflow-gpu库装在单独的环境下所以我需要启用Anaconda Prompt,然后激活我所要用的指定环境

再将路径cd到你本地retrain.py文件的路径下(具体嘚路径根据自己的实际情况更改,下图为本人的路径地址)

最后最关键的一行代码来了:

然后,迁移学习的训练就跑起来了~!


2.训练完后嘚的模型文件保存在哪儿
默认是保存在tmp/文件夹下的,因为本人retrain.py文件所在盘符为E盘所以所有训练生成的瓶颈文件,ckpt文件pb文件,label文件都茬E:\tmp路径下

3.训练完的模型中,输入和输出的tensor分别是什么
根据官方文档,输入的tensor是"Placeholder"输出的tensor是"final_result"。读者可以使用官方的来测试已训练好的模型此文不展开描述测试的具体步骤,读者可自行

4.除了默认的模型我们还可以用哪些预训练模型?
retrain.py中--tfhub_moduled的默认值即为inception_v3模型的url如需替换模型,可以参考其中列举了所有可用到的已发布的官方预训练模型。


若想了解更多的资料如超参数的设置等详细配置信息,请大家自行查阅官方

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信