Press "Enter" to skip to content

小数据也有大未来,数据稀缺如何应用深度学习?

 

来源:Pexels

 

有人说,深度学习是目前科技界 最大的瓜,每个人都想分一块。

 

 

它承诺以最小代价的大数据解决最复杂的问题。 但现在大家面对的普遍问题是: 我们既不在谷歌工作也不在Facebook工作,数据很稀缺,还能利用深度学习吗?

 

答案是: 能!

 

下面就和小芯一起看看如何在有限的数据下利用深度学习吧~

 

开始越简单越好

 

在讨论针对有限数据利用深度学习的方法之前,请先后退一步,从神经网络开始,建立一个简单的基线。 用一些传统模型(如随机森林)进行实验通常不会花费很长时间。

 

这将帮助您评估深度学习的一些潜在提升,并为您的问题提供大量关于深度学习与其他方法之间权衡的见解。

 

得到更多的数据

 

这听起来可能很荒谬,但是你考虑过是否可以收集更多的数据吗?

 

有人会经常向公司提出这样的建议,但公司大多数的人都会觉得你好像疯了一样,这似乎十分出乎意料。

 

是的,投入时间和金钱去收集更多的数据是可以的。 事实上,这往往是你最好的选择。 例如,也许你正试图对稀有鸟类进行分类,但数据非常有限。 几乎可以肯定地说,通过标记更多的数据,你将更容易解决这个问题。

 

不确定需要收集多少数据? 尝试在添加额外数据时绘制 学习曲线 ,并查看模型性能的变化。

 

微调

 

假设你现在有一个简单的基线模型,并且不能收集更多数据或者造价昂贵。 此时最可靠、最正确的方法是利用预先训练好的模型,然后针对问题对模型进行微调。

 

 

来源:Pexels

 

微调的基本思路是选取一个非常大的数据集,希望它在某种程度上与你的域相似,然后训练一个神经网络,使用较小的数据集对这个预先训练好的网络进行微调。 你可以在 本文 中了解更多信息。

 

对于图像分类问题,最常用的数据集是 ImageNet 。 这个数据集包含数百万张类对象图片,因此可以用于很多类型的图像问题。 它甚至包括动物,因此可能对稀有鸟类的分类有所帮助。

 

要开始使用一些用于微调的代码,请参阅Pytorch的优秀 教程 。

 

数据扩充

 

如果你无法获得更多的数据,也不能成功地对大型数据集进行微调,那幺数据扩充通常是您的下一个最佳选择,它还可以与微调一起进行。

 

数据扩充背后的思想很简单: 在不更改标签值的情况下,通过更改输入来提供新数据

 

例如,如果有一张猫的图片,旋转它,它仍然是一张猫的图片。 因此,这将是很好的数据扩充。 另一方面,如果你有一张道路的图片,想要预测适当的转向角度(自动驾驶汽车),旋转图像会改变适当的转向角度是不可能的,除非方向盘的角度也适当做出了调整。

 

数据扩充适用于最常见的图像分类问题,你可以在 此处 找到该技术的相关信息。

 

通常可以想到一些创造性的方法来扩充其他领域(例如NLP)中的数据(请参见 此处 的示例),并且人们也在尝试使用 生成对抗网络(GAN) 来生成新数据。 如果GAN的方法有点意思,那幺看一下 DADA : 深度对抗性数据扩充(Deep Adversarial Data Augmentation)。

 

余弦损失

 

 

最近的一篇名为《在没有使用余弦损失进行预处理的情况下对小数据集进行深度学习》(Deep Learning on Small Datasets without Pre-Training using cosLoss)的 论文 表示,在分类问题中将损失函数从分类交叉熵损失转换为余弦损失时,小数据集的准确率提高了30%。 余弦损失就是1- 余弦相似度(cosine similarity) 。

 

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

 

深入

 

在NIPs的一篇 论文 中,现代神经网络概括了小数据集,他们将深度神经网络视为整体。 具体来说,“不是每一层都呈现一个不断增加的特征层次结构,而是最后一层提供了一个集成机制。 ”

 

小芯从中得到的教训是,对于小数据,要确保你建立了深入的网络来利用这种集成效应。

 

自动编码

 

使用堆叠式自动编码,以更理想的初始权重对网络进行预训练已经取得了一些 成就 ,这可以避免局部最优和其他错误初始化的隐患。 不过,安德烈·卡帕蒂(AndrejKarpathy) 建议 不要对无监督的预训练感到过度兴奋。

 

如果你需要温习一下自动编码,可以看看斯坦福大学的深度学习 教程 ,其基本思路是建立一个可预测输入内容的神经网络。

 

先验知识

 

 

来源:Pexels

 

最后,同样重要的是,尝试并找到方法,结合特定的领域知识来指导学习过程。 例如,在通过概率性程序归纳进行 人类层次的概念学习 中,作者构建了一个模型,该模型利用过程中的先验知识从部分构建概念,这让其达到了人类水平的表现,并超过了当时的深度学习方法。

 

你还可以使用领域知识来限制对网络的输入,以降低维度或调整网络架构使其更小。

 

小芯把它作为最后的选择,因为整合先验知识是有挑战性的,而且通常是一种最耗时的选择。

 

小而不俗,又小又酷

 

 

来源:Pexels

 

目前数据科学的发展仍然存在大量问题,数据非常有限,获取更多的数据非常昂贵或不可能。

 

例如,检测罕见疾病或教育成果。 如果能找到一些方法来应用我们最好的技术,如深度学习,来解决这些问题。 难道没有让你兴奋不已,跃跃欲试吗?

 

虽然关于如何在有限的数据下利用深度学习技术的问题。 目前还没有得到足够讨论,但它背后蕴含的意义和无限可能,就足以让人激动难耐。

 

来吧,少年少女,我们一起来钻研吧~

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注