2019-12-07 05:30:39

作者 | Tyler Folkman

编译 | 杨晓凡

对于深度学习而言,在有很多数据的情况下,再复杂的问题也不在话下,然而没有这么多数据呢?本文作者 Tyler Folkman 针对这一问题,为大家介绍了几个在有限的数据上使用深度学习的方法,让深度学习即便在面临数据稀缺时,也能大展身手。

众所周知,深度学习是有史以来最棒的事情。它能够在大量数据上以低成本解决复杂问题。唯一的问题是你既不在谷歌工作,也不在脸书工作,你的数据是稀缺的,那么你该怎么办?你是能继续使用是深度学习的能力,还是已无计可施?

下面就让我介绍几个在有限的数据上使用深度学习的方法,以及阐述为什么我认为这可能是未来研究中最令人兴奋的领域之一。

一、先从简单的开始

在我们探讨在有限的数据上使用深度学习的方法之前,请先从神经网络后退一步,建立一个简单的基线。用一些传统模型(如随机森林)进行实验通常不会花费很长时间,而这将有助于评估深度学习的所有潜在提升,并针对你的问题提供更多权衡深度学习方法和其他方法的视角。

二、获取更多数据

这听起来可能很荒谬,但是你真的考虑过自己能否收集更多的数据吗?我经常向公司提出获取更多数据的建议,但他们视我的建议如疯人疯语,这让我很吃惊。是的,投入时间和金钱去收集更多的数据是可行的,而事实上,这通常也是你最好的选择。例如,也许你正试图对稀有鸟类进行分类,但数据非常有限。几乎可以肯定地说,你可以仅仅通过标注更多的数据来比较轻易地解决这个问题。你不确定需要收集多少数据?对此,你可以在增加额外的数据时尝试绘制学习曲线(相关教程链接:https://www.dataquest.io/blog/learning-curves-machine-learning/),并同时查看模型性能的变化,从而确定所需的数据量。

三、微调

摄影作者 Drew Patrick Miller,来源 Unsplash(网站链接:https://unsplash.com/?utm_source=medium&utm_medium=referral)

现在假设你已经有一个简单的基线模型,且在获取更多数据上要么不可行要么太昂贵。此时最可靠和正确的方法是利用预训练模型,然后针对你的问题对模型进行微调。

微调的基本思想是取一个一定程度上跟模型所在域相似的非常大的数据集,训练一个神经网络,然后用你的小数据集对这个预先训练好的神经网络进行微调。你可以在 A Comprehensive guide to Fine-tuning Deep Learning Models in Keras 这篇文章内容:

  • 文章链接:https://flyyufelix.github.io/2016/10/03/fine-tuning-in-keras-part1.html

对于图像分类问题,最常用的数据集是 ImageNet。这个数据集涵盖目标多个类的数百万张图像,因此可以用于许多类型的图像问题。它甚至包括动物,因此可能有助于稀有鸟类的分类。

若需要使用一些用于微调的代码,请参阅 Pytorch 的教程(教程链接:https://pytorch.org/tutorials/beginner/finetuning_torchvision_models_tutorial.html)。

四、数据增强

如果你无法获得更多的数据,并且无法成功地对大型数据集进行微调,那么数据增强通常是你接下来的最佳选择。它还可以与微调一起使用。

数据增强背后的思想很简单:在不改变标签值的情况下,以提供新数据的方式改变输入。

例如,你有一张猫的图片,旋转图片后仍然是一张猫的图片,这便是一次不错的数据增强。另一方面,如果你有一张道路的图片,想要预测适当的方向盘转度(自动驾驶汽车),若旋转这张道路的图片将会改变适当的方向盘转度,除非你把方向盘转度调整到适当位置,否则难以预测成功。

数据增强是图像分类问题中最常见的方法,相关的技术可以在这个网站获取:https://nanonets.com/blog/data-augmentation-how-to-use-deep-learning-when-you-have-limited-data-part-2/。

你也可以经常思考一些创造性的方式来将数据增强应用到其他领域,例如 NLP(相关示例可参考:https://towardsdatascience.com/these-are-the-easiest-data-augmentation-techniques-in-natural-language-processing-you-can-think-of-88e393fd610),同时大家也在尝试使用 GANs 来生成新数据。如果对 GAN 方法感兴趣,可以阅读《深度对抗数据增强》(Deep Adversarial Data Augmentation)这篇文章(文章链接:https://github.com/SchafferZhang/DADA)。

五、余弦损失

最近的一篇论文《不使用余弦损失进行预训练的情况下在小数据集上进行深度学习》(Deep Learning on Small Datasets without Pre-Training using Cosine Loss)(论文链接:https://arxiv.org/pdf/1901.09054.pdf)发现,在分类问题中将损失函数从分类交叉熵损失转换为余弦损失时,小数据集的准确率提高了 30%,而余弦损失仅为“ 1 - 余弦相似度”。

从上图中可以看出,基于每个类的样本数量的性能是如何变化的,以及微调对于一些小型数据集(CUB)是多么有价值,而对于其他数据集(CIFAR-100)则没有那么有价值。

六、深入

在一篇 NIPS 论文《小数据集的现代神经网络泛化》(Modern Neural Networks Generalize on Small Data Sets)(论文链接:https://papers.nips.cc/paper/7620-modern-neural-networks-generalize-on-small-data-sets.pdf)种,作者将深度神经网络视为集合。具体来说,即「与其说每一层都呈现出不断增加的特征层次,不如说最后一层提供了一种集成机制。」

从中得到的关于小数据的益处是确保你建立的深度网络能利用这种集成效应。

七、自编码器

现在已有通过采用更多优化的起始权重成功使用堆栈自编码器对网络进行预训练的案例(该案例可参考论文「Using deep neural network with small dataset to predict material defects」:https://www.sciencedirect.com/science/article/pii/S0264127518308682)。这样可以避免局部优化和其他不良初始化的陷阱。不过,Andrej Karpathy 建议不要对无监督预训练过度兴奋(相关文章可参考:http://karpathy.github.io/2019/04/25/recipe/)。

如果你需要复习自编码器相关知识,可以看看斯坦福大学的深度学习教程(网址:http://ufldl.stanford.edu/tutorial/unsupervised/Autoencoders/)。自编码器的基本思想是建立一个预测输入的神经网络。

八、先验知识

图 4:摄影作者 Glen Noble,来源 Unsplash(网站链接:https://unsplash.com/?utm_source=medium&utm_medium=referral)

最后一点是尝试找到结合特定领域知识的方法,以指导学习过程。例如,在论文《通过概率程序规划归纳进行类人概念学习》(Human-level concept learning through probabilistic program induction,论文链接:https://science.sciencemag.org/content/350/6266/1332)中,作者构建了一个能够在学习过程中利用先验知识从部分概念中构造整体概念的模型,这样的模型能够实现人类水平的性能,并超出了当时的深度学习方法。

你也可以使用域知识来限制对网络的输入,以降低维度或将网络体系结构调整的更小。

我将其作为最后的选择,是因为结合先验知识可能是一个挑战,通常也是最耗费时间的。

九、让深度学习在小数据上也能变得很酷

希望本文为你提供了一些关于如何在有限的数据上使用深度学习技术的思路。我个人认为,这是一个目前没有得到足够讨论的问题,但它具有令人非常兴奋的意义。

大量问题的数据非常有限,因为获取更多的数据要么非常昂贵要么不可行,就比如说检测罕见疾病或教育成果。找到方法来应用深度学习等最好的技术来解决这些问题是非常令人兴奋的!正如吴恩达(Andrew Ng)也曾提到:

via:https://towardsdatascience.com/how-to-use-deep-learning-even-with-small-data-e7f34b673987

深度学习遇上稀缺数据就无计可施?这里有几个好办法相关推荐

  1. 当深度学习遇上异构并行计算

    当深度学习遇上异构并行计算 近几年来,以深度神经网络(DNN)为代表的深度学习如火如荼,深度学习的研究领域从开始的图像识别(如imagenet比赛)到现在的自然语言处理,几乎有席卷一切机器学习研究领域 ...

  2. 当深度学习遇上量化交易——图与知识图谱篇

    ©PaperWeekly 原创 · 作者|桑运鑫 学校|上海交通大学硕士生 研究方向|图神经网络在金融领域的应用 本文主要回顾三篇将图和知识图谱应用到量化交易上的文章. NeurIPS 2019 论文 ...

  3. 当深度学习遇上量化交易——公开信息篇

    ©PaperWeekly 原创 · 作者|桑运鑫 单位|上海交通大学硕士生 研究方向|图神经网络在金融领域的应用 本文主要回顾三篇利用文本信息和音频信息进行量化交易的文章. StockNet 论文标题 ...

  4. 当深度学习遇上量化交易——因子挖掘篇

    ©PaperWeekly 原创 · 作者|桑运鑫 学校|上海交通大学博士生 研究方向|图神经网络在金融领域的应用 在深度学习的所有应用场景中,股价预测也无疑是其中一个异常诱人的场景.随着传统线性模型的 ...

  5. 计算未来轻沙龙 | 当深度学习遇上归纳推理,图神经网络有多强大?

    作为一名新世纪的深度学习炼丹师 是否整天面对各种结构的原(shu)料(ju)? 对于无规则的空间数据 传统炼丹大法好像并不能发挥奇效 图作为一种非常神奇的表示方式 可以表示生活中绝大多数现象或情境 那 ...

  6. 当深度学习遇上Web开发:Spring和OpenAI如何实现图片生成?

    文章目录 一.简介 1. 什么是Spring和OpenAI 2. 生成图像的意义和应用场景 二.相关技术介绍 1. 深度学习模型 2. GAN模型 3. TensorFlow框架 四.简单的Sprin ...

  7. 【高效炼丹-筑基期】当深度学习遇上概率分布,你不能不知道的神奇度量方法:KL散度!

    什么是KL散度 KL散度(Kullback-Leibler divergence),也称为相对熵,是一种用于衡量两个概率分布之间差异的度量方法.它可以描述两个分布之间的距离,用于衡量模型预测结果与真实 ...

  8. 当深度学习遇上图: 图神经网络的兴起!(文末送书)

    当深度学习遇上图,会碰撞出怎样的火花呢? 本文就带你来了解一下--近年来逆势而上的一门技术:图神经网络! 内容选自<图神经网络:基础与前沿(全彩)>一书! 01 什么是图 也许我们从来没有 ...

  9. 当深度学习遇上图: 图神经网络的兴起!

    当深度学习遇上图,会碰撞出怎样的火花呢? 本文就带你来了解一下--近年来逆势而上的一门技术:图神经网络! 内容选自<图神经网络:基础与前沿(全彩)>一书! 01 什么是图 也许我们从来没有 ...

最新文章

  1. springboot-26-springboot 集成rabbitmq
  2. Gartner称2016会是Windows 10的“企业之年”
  3. 使用NodeList
  4. 开通了一个gmail邮箱
  5. 01ts简介和相关配置
  6. java 连接池技术_java数据库连接池技术原理(浅析)
  7. OPA 5 - CreateButtonTest creates CreateButtonSteps
  8. 使用Preference保存设置
  9. js 函数实参列表arguments和形参的那点事儿
  10. Springboot启动扩展点超详细总结,再也不怕面试官问了
  11. 开源了!伯克利今年大热的DeepMimic开源了~
  12. mi自学站【2018年8月】
  13. linux远程控制木马,Kali Linux-使用Shellter生成远控木马并进行持久化控制
  14. 2021-10-26
  15. 抖音小店开通及保证金详情;抖音小店商品上架详细流程。丨国仁网络资讯
  16. python按位置从字符串提取子串的操作是_Python基础-字符串操作和“容器”的操作...
  17. matlab使用pcode加密
  18. czl蒻蒟的OI之路
  19. [附源码]Python计算机毕业设计高校教室管理系统
  20. BIM模型轻量化的方法总结

热门文章

  1. 理解为何用期望最大化或梯度下降等启发式方法处理非凸函数在实际中如此有效,对于理论计算机科学而言是一大挑战
  2. 农村生态是下一个十年的发力点
  3. 什么是SAAS 即软件即服务模式
  4. Java注解基本原理
  5. Hashtable类
  6. 翟季冬:基于国产超算的百万亿参数超大预训练模型训练方法
  7. 马腾宇的AI学术历程:做科研要考虑长期的影响力
  8. 智源论坛 | 智能处理器探索(3月21日)
  9. 对话计算机史学权威,才知道量子计算机马上要来了
  10. ICLR2018论文投稿抢先看:Ian Goodfellow由衷赞赏的训练稳定方法SN-GANs