数据太少怎么搞深度学习?

1,593 阅读5分钟

作者:Tyler Folkman
编译:McGL

你一定看过这种报道——深度学习是切片面包以来最流行的东西。它许诺用海量数据的一小部分即可解决你最复杂的问题。唯一的问题是你既不在 Google 也不在 Facebook 工作,数据稀缺。那该怎么办呢?你是否仍然可以利用深度学习的力量?还是无奈运气不佳?让我们看看怎样在数据有限的情况下利用深度学习,以及为什么我认为这可能是未来研究最令人兴奋的领域之一。

从简单开始

在我们讨论利用有限的数据进行深度学习的方法之前,请忘了神经网络并创建一个简单的基准。尝试一些传统模型(如随机森林)通常不需要很长时间。这将帮助你评估深度学习的任何潜在提升,并深入理解在你的问题上深度学习与其它传统方法的权衡取舍。

获取更多数据

这听起来很荒谬,但是你是否真正考虑过可以收集更多数据呢?我对公司提出这个建议的频率感到惊讶,他们看我像是个疯子。没错,可以花时间和金钱来收集更多数据。实际上,这通常是你的最佳选择。例如,也许你正在尝试对稀有鸟类物种进行分类并且数据十分有限。几乎可以肯定,仅通过标记更多数据,你就可以更轻松地解决此问题。不确定需要收集多少数据?尝试在增加数据时绘制学习曲线并查看模型性能的变化。

微调(Fine-Tuning)

Okay. 假设你现在有了一个简单的基准模型,并且不可能收集更多数据或费用太高。此时,尝试最多的方法是利用预训练模型,然后针对你的问题进行微调。

微调的基本思想是用一个非常大的数据集,该数据集最好和你数据的领域有些相似,训练一个神经网络,然后用较小的数据集微调此预训练网络。

对于图像分类问题,这个关键数据集是经典的ImageNet。该数据集包含很多不同类别的数百万图像,对很多类型的图像问题非常有用。它甚至包括动物,因此可能有助于稀有鸟类的分类。

数据增强(Data Augmentation)

如果无法获得更多数据,且无法对大型数据集进行微调,那么数据增强通常是你的第二选择。它也可以与微调结合使用。

数据增强背后的思路很简单:改变输入数据而不改变输出标签值。

例如,如果你有一只猫的图片并旋转图像,那它仍然是一只猫。这是很好的数据增强。另一方面,如果你有一张道路图片,并且想要预测适当的转向角(自动驾驶汽车),则旋转图像会更改合适的转向角。这种情况数据增强当然是不行滴。

数据增强最常用于图像分类问题。

你经常可以想到一些创造性的方法把数据增强用到其它领域(如NLP),人们也在尝试使用GAN来生成新数据。如果对GAN方法感兴趣,可以看DADA(Deep Adversarial Data Augmentation)。

余弦损失(Cosine Loss)

最近一篇paper "Deep Learning on Small Datasets without Pre-Training using Cosine Loss", 使用余弦损失在没有进行预训练的情况下对小型数据集进行深度学习的研究发现,将损失函数从分类交叉熵损失切换为余弦损失时,分类问题小型数据集的准确率提升了30%。

从上图可以看到,基于每个类的样本数量,性能如何变化。微调对于某些小型数据集(CUB)非常有价值,而对于其它数据集(CIFAR-100)则不那么有意义。

更深

在NIPs paper "Modern Neural Networks Generalize on Small Data Sets" 中,他们将深度神经网络视为ensembles。具体来说,“最后的层可能会提供一种ensemble机制,而不是每个层都呈现出不断增加的特征层次。”

我从中得出的结论是针对小数据,请确保你的网络足够深以便利用这种ensemble效果。

自编码器(Autoencoders)

使用堆叠式自编码器以更理想的初始权重对网络进行预训练已经取得了一些成功。这可以让你避开局部最优解以及其它错误初始化的陷阱。不过Andrej Karpathy 建议不要对无监督的预训练过度兴奋。

自编码器的基本思想是建立一个可预测输入的神经网络。

先验知识(Prior Knowledge)

最后但并非最不重要的一点是,尝试找到整合领域特定知识以指导学习过程的方法。例如,在paper "Human-level concept learning through probabilistic program induction"中通过概率性程序归纳法,作者构建了一个模型,该模型通过利用过程中的先验知识从各个部分构建概念。这超越了当时的深度学习方法,达到了人类水平的表现。

你还可以应用领域知识来限制网络的输入,以减少维度或将网络结构调整到更小。

我将其作为最后的选择是因为整合先验知识很有挑战性,且通常是最耗时的。

Making Small Cool Again

希望本文为你提供了一些在数据有限的情况下如何利用深度学习技术的思路。我发现,这个问题目前尚未得到应有的讨论,但它的意义非凡。

目前很多这样的问题存在:数据非常有限,获取更多数据非常昂贵或者不可能。例如,检测罕见疾病或教育成果。寻找将我们的最佳技术(比如深度学习等)应用于这些问题的方法非常令人兴奋!

来源:towardsdatascience.com/how-to-use-…