数据不够怎么训练深度学习模型?不妨试试迁移学习

深度学习大牛吴恩达曾经说过:做AI研究就像造宇宙飞船,除了充足的燃料之外,强劲的引擎也是必不可少的。假如燃料不足,则飞船就无法进入预定轨道。而引擎不够强劲,飞船甚至不能升空。类比于AI,深度学习模型就好像引擎,海量的训练数据就好像燃料,这两者对于AI而言同样缺一不可。

随着深度学习技术在机器翻译、策略游戏和自动驾驶等领域的广泛应用和流行,阻碍该技术进一步推广的一个普遍性难题也日渐凸显:训练模型所必须的海量数据难以获取。

以下是一些当前比较流行的机器学习模型和其所需的数据量,可以看到,随着模型复杂度的提高,其参数个数和所需的数据量也是惊人的。

基于这一现状,本文将从深度学习的层状结构入手,介绍模型训练所需的数据量和模型规模的关系,然后通过一个具体实例介绍迁移学习在减少数据量方面起到的重要作用,最后推荐一个可以简化迁移学习实现步骤的云工具:NanoNets。

层状结构的深度学习模型

深度学习是一个大型的神经网络,同时也可以被视为一个流程图,数据从其中的一端输入,训练结果从另一端输出。正因为是层状的结构,所以你也可以打破神经网络,将其按层次分开,并以任意一个层次的输出作为其他系统的输入重新展开训练。

数据量、模型规模和问题复杂度

模型需要的训练数据量和模型规模之间存在一个有趣的线性正相关关系。其中的一个基本原理是,模型的规模应该足够大,这样才能充分捕捉数据间不同部分的联系(例如图像中的纹理和形状,文本中的语法和语音中的音素)和待解决问题的细节信息(例如分类的数量)。模型前端的层次通常用来捕获输入数据的高级联系(例如图像边缘和主体等)。模型后端的层次通常用来捕获有助于做出最终决定的信息(通常是用来区分目标输出的细节信息)。因此,待解决的问题的复杂度越高(如图像分类等),则参数的个数和所需的训练数据量也越大。

引入迁移学习

在大多数情况下,面对某一领域的某一特定问题,你都不可能找到足够充分的训练数据,这是业内一个普遍存在的事实。但是,得益于一种技术的帮助,从其他数据源训练得到的模型,经过一定的修改和完善,就可以在类似的领域得到复用,这一点大大缓解了数据源不足引起的问题,而这一关键技术就是迁移学习。

根据Github上公布的“引用次数最多的深度学习论文”榜单,深度学习领域中有超过50%的高质量论文都以某种方式使用了迁移学习技术或者预训练(Pretraining)。迁移学习已经逐渐成为了资源不足(数据或者运算力的不足)的AI项目的首选技术。但现实情况是,仍然存在大量的适用于迁移学习技术的AI项目,并不知道迁移学习的存在。如下图所示,迁移学习的热度远不及机器学习和深度学习。

迁移学习的基本思路是利用预训练模型,即已经通过现成的数据集训练好的模型(这里预训练的数据集可以对应完全不同的待解问题,例如具有相同的输入,不同的输出)。开发者需要在预训练模型中找到能够输出可复用特征(feature)的层次(layer),然后利用该层次的输出作为输入特征来训练那些需要参数较少的规模更小的神经网络。

由于预训练模型此前已经习得了数据的组织模式(patterns),因此这个较小规模的网络只需要学习数据中针对特定问题的特定联系就可以了。此前流行的一款名为Prisma的修图App就是一个很好的例子,它已经预先习得了梵高的作画风格,并可以将之成功应用于任意一张用户上传的图片中。

值得一提的是,迁移学习带来的优点并不局限于减少训练数据的规模,还可以有效避免过度拟合(overfit),即建模数据超出了待解问题的基本范畴,一旦用训练数据之外的样例对系统进行测试,就很可能出现无法预料的错误。但由于迁移学习允许模型针对不同类型的数据展开学习,因此其在捕捉待解问题的内在联系方面的表现也就更优秀。如下图所示,使用了迁移学习技术的模型总体上性能更优秀。

迁移学习到底能消减多少训练数据?

这里以此前网上流行的一个连衣裙图片为例。如图所示,如果你想通过深度学习判断这条裙子到底是蓝黑条纹还是白金条纹,那就必须收集大量的包含蓝黑条纹或者白金条纹的裙子的图像数据。参考上文提到的问题规模和参数规模之间的对应关系,建立这样一个精准的图像识别模型至少需要140M个参数,1.2M张相关的图像训练数据,这几乎是一个不可能完成的任务。

现在引入迁移学习,用如下公式可以得到在迁移学习中这个模型所需的参数个数:

No. of parameters = [Size(inputs) + 1] * [Size(outputs) + 1] = [2048+1]*[1+1]~ 4098 parameters

可以看到,通过迁移学习的引入,针对同一个问题的参数个数从140M减少到了4098,减少了10的5次方个数量级!这样的对参数和训练数据的消减程度是惊人的。

一个迁移学习的具体实现样例

在本例中,我们需要用深度学习技术对电影短评进行文本倾向性分析,例如“It was great,loved it.”表示积极正面的评论,“It was really stupid.”表示消极负面的评论。

假设现在可以得到的数据规模只有72条,其中62条没有经过预先的倾向性标记,用来预训练。8条经过了预先的倾向性标记,用来训练模型。2条也经过了预先的倾向性标记,用来测试模型。

由于我们只有8条经过预先标记的训练数据,如果直接以这样的数据量对模型展开训练,无疑最终的测试准确率将非常低。(因为判断结果只有正面和负面两种,因此可以预见最终的测试准确率可能只有50%)

为了解决这个难题,我们引入迁移学习。即首先用62条未经标记的数据对模型展开通用的情感判断,然后在这一预训练的基础上对本例的特定问题展开分析,复用预训练模型中的部分层次,就可以将最终的测试准确率提升到100%。下面将从3个步骤展开分析。

步骤1

创建预训练模型来分析词与词之间的关系。这里我们通过分析未标记语句中的某一词汇,尝试预测出现在同一句子中的其他词汇。

步骤2

对模型展开训练,使得出现在类似上下文中的词汇获得类似的向量表示。在这一步骤中,62条待处理语句首先会被删除停用词,并被标记解释。之后,针对每个词汇,系统会尝试减小其向量表示与相关词汇的差别,并增加其与不相关词汇的差别。

步骤3

预测一个句子的文本倾向性。由于在此前的预训练模型中我们已经得到了针对所有词汇的向量表示,并且这些向量具有用数字表征的每个词汇的上下文属性,这将使得文本的倾向性分析变得更易于实现。

需要注意的是,这里并非直接使用10个已经被预先标记的句子,而是先将句子的向量设置为其所有词汇的平均值(在实际任务中,我们将使用类似时间递归神经网络LSTM的相关原理)。这样,经过平均化处理的句子向量将作为输入数据导入模型,而句子的正面或负面判定将作为结果输出。需要特别强调的是,这里我们在预训练模型和10个被预先标记的句子之间加入了一个隐藏层(hidden layer),用来适配文本倾向性分析这一特定场景。正如你所看到的,这里只用10个标记量就实现了100%的预测准确率。

当然,必须指出的是,这里展示的只是一个非常简单的模型示意,而且测试用例只有2条。但不可否认的一点是,由于迁移学习的引入,确实使得本例中的文本倾向性预测准确率从50%提升到了100%。

迁移学习的实现难点

虽然迁移学习的引入可以显著减少模型对训练数据量的要求,但同时也意味着更多的专业调教。从上面的例子就能看出,只是考虑这些海量的必须硬编码实现的参数数量,以及围绕这些参数进行的繁杂的调试过程,就足够让人望而生畏了。而这也是迁移学习在实际应用中难以进一步推广的重要阻碍之一。这里我们总结了8条常见的迁移学习的实现难点。

  1. 获取一个相对大规模的预训练数据
  2. 选择一个合适的预训练模型
  3. 难以排查哪个模型没有发挥作用
  4. 不知道需要多少额外数据来训练模型
  5. 难以判断应该在什么情况下停止预训练
  6. 决定预训练模型的层次和参数个数
  7. 代理和服务于组合模型
  8. 当获得更多数据或者更好的算法时,预训练模型难以更新

NanoNets工具

NanoNets是一个简单方便的基于云端实现的迁移学习工具,其内部包含了一组已经实现好的预训练模型,每个模型有数百万个训练好的参数。用户可以自己上传或通过网络搜索得到数据,NanoNets将自动根据待解问题选择最佳的预训练模型,并根据该模型建立一个NanoNets(纳米网络),并将之适配到用户的数据。NanoNets和预训练模型之间的关系结构如下所示。

以上文提到的蓝黑条纹还是白金条纹的连衣裙为例,用户只需要选择待分类的名称,然后自己上传或者网络搜索训练数据,之后NanoNets就会自动适配预训练模型,并生成用于测试的web页面和用于进一步开发的API接口。如下所示,图中为系统根据一张连衣裙图片给出的分析结果。

具体使用方法详见NanoNets官网。

本文作者:恒亮

来源:51CTO

时间: 2024-07-28 18:16:18

数据不够怎么训练深度学习模型?不妨试试迁移学习的相关文章

数据不够怎么训练深度学习模型?不妨试试迁移学习

深度学习大牛吴恩达曾经说过:做AI研究就像造宇宙飞船,除了充足的燃料之外,强劲的引擎也是必不可少的.假如燃料不足,则飞船就无法进入预定轨道.而引擎不够强劲,飞船甚至不能升空.类比于AI,深度学习模型就好像引擎,海量的训练数据就好像燃料,这两者对于AI而言同样缺一不可. 随着深度学习技术在机器翻译.策略游戏和自动驾驶等领域的广泛应用和流行,阻碍该技术进一步推广的一个普遍性难题也日渐凸显:训练模型所必须的海量数据难以获取. 以下是一些当前比较流行的机器学习模型和其所需的数据量,可以看到,随着模型复杂

数据有限时怎样调优深度学习模型

迁移学习 所谓迁移学习,就是将一个问题上训练好的模型通过简单的调整,使其适用一个新的问题,可以认为是一种模型调优的"取巧"方法.可以类比人的举一反三能力. 迁移学习的特点 1. 需求数据量少 假设有两个领域,一个领域已经有很多的数据,能成功地建一个模型,有一个领域数据不多,但是和前面那个领域是关联的,就可以把那个模型给迁移过来.比如,我们想做一个化妆品推荐模型,但数据量较少,可以先用一个成型的较为稳定的饰品推荐模型进行调优.跨领域的在学术界也有尝试哦,比如网络搜索可以迁移到推荐,图象识

Top 100论文导读(一):纯干货!深度神经网络中的理解,泛化以及迁移学习

更多深度文章,请关注:https://yq.aliyun.com/cloud 作者:Adrian Colyer, 著名阿克赛尔合伙公司(Accel Partners)的投资合伙人,该公司致力于帮助杰出的企业家创建世界级的高科技企业,在加入Accel之前,Adrian拥有20年技术人员工作经验,如担任Pivota , VMware, SpringSource的CTO.如果你对科技企业感兴趣,可以和他联系.邮箱:acolyer@accel.com. 他的领英主页. 前言:作者从top 100 优秀深

科学式家|杨强教授漫谈《西部世界》、生成式对抗网络及迁移学习

「范式大学」由第四范式发起,致力于成为"数据科学家"的黄埔军校,校长为第四范式首席科学家,华人界首个国际人工智能协会AAAI Fellow.唯一的AAAI 华人执委杨强教授.   [范式大学]在探索AI工业化的同时,也关注最新学术研究成果.近日,杨强教授在[范式大学]内部课程中,与大家分享了他在 "生成式对抗网络模型" 和迁移学习等领域的独特见解和最新思考.在此特别感谢杨教授的博士生张颖华同学的帮助.   以下内容根据杨强教授演讲编写,略微有所删减. 有些人看过电视

2017 年最值得关注的科学概念之 “迁移学习”

Edge.org 为著名知识分子俱乐部 The Reality Club 的线上社区,自 1996 年上线,如今已有 20 年历史.在其创刊 20 周年之际,Edge.org 也推出了 2017 年度问题 -- 2017 年,最值得关注的科学术语或概念是什么?微软全球资深副总裁 Peter Lee 博士受邀应答,向大家介绍了迁移学习这一科学术语的前世今生 迁移学习 "你永远不能理解一种语言 -- 除非你至少理解两种语言". 任何一个学过第二语言的人,对英国作家杰弗里·威廉斯的这句话应该

迁移学习怎么做?迁移成分分析 (TCA) 方法简介

之前整理总结迁移学习资料的时候有网友评论,大意就是现在的类似资料大全的东西已经太多了,想更深入地了解特定的细节.从这篇文章开始我将以<小王爱迁移>为名写一系列的介绍分析性的文章,与大家共享迁移学习中的代表性方法.理论与自己的感想.由于我的水平有限,请各位多多提意见,我们一起进步.今天第一篇必须以我最喜爱的杨强老师的代表性方法 TCA 为主题!(我的第一篇文章也是基于 TCA 做的) [我刚整理重写好的加速版 TCA 代码(matlab):jindongwang/transferlearning

忽悠神经网络指南:教你如何把深度学习模型骗得七荤八素

知己知彼,无论你是想成为黑客(最好不要!)或防范未来黑客的入侵,都有必要来了解一下如何骗过由海量数据训练出来的深度学习模型. 只要有程序员还在编程,黑客们就会不遗余力地找寻利用这些程序的方法.恶意黑客更是会利用程序中最为微小的漏洞来侵入系统,窃取数据,对系统造成严重破坏. 但由深度学习算法驱动的系统应该是能够避免人为干扰的,对吧? 一个黑客怎么能够突破被TB(兆兆字节)级数据训练的神经网络呢? 然而事实证明,即使是最先进的深层神经网络也是很容易被欺骗的.只需要使用一些小技巧,你就可以迫使模型预测

独家 | 教你在R中使用Keras和TensorFlow构建深度学习模型

引言: 在R和Python之间如何进行选择一直是一个热议的话题.机器学习世界也被不同语言偏好所划分.但是随着深度学习的盛行,天平逐渐向Python倾斜,因为截至目前为止Python具有大量R所没有的深度学习的资源库和框架. 我个人从R转到Python是因为我想更加深入机器学习的领域,而仅仅使用R的话,这(在之前)是几乎不可能实现的事情.不过也仅此而已! 随着Keras在R中的实现,语言选择的斗争又重新回到舞台中央.Python几乎已经慢慢变成深度学习建模的默认语言,但是随着在R中以TensorF

Arimo利用Alluxio的内存能力提升深度学习模型的结果效率(Time-to-Result)

深度学习算法通常被一些具体应用所采用,其中比较显著的应用领域包括计算机视觉.机器翻译.文本挖掘.欺诈检测等.深度学习的方法在大模型加大数据的场景下效果显著.与此同时,被设计用来处理大数据的分布式计算平台(如Spark)也日益应用广泛.因此,通过在Spark平台上开发深度学习计算框架,深度学习的应用领域可以变得更加广泛,企业完全可以在已有的Spark基础设施上使用深度学习. 1.利用Alluxio协处理器进行基于Spark的分布式深度学习 在2015 Strata + Hadoop World N