雷锋网AI科技评论按,本文作者是Kanda的机器学习工程师DanielRothmann,他对一切具有变革性的事物都感兴趣,这里是他在和客户合作的过程中总结出的小数据处理方法。雷锋网整理。
我们经常听说大数据是构建成功的机器学习项目的关键。这里有一个大问题:许多组织没有你需要的这么多数据。
在没有最基本的数据的情况下,我们如何才能原型化和验证机器学习的想法?当资源稀缺时,我们如何有效地获取和利用数据创造价值?
在我的工作场所,我们为客户生产了许多功能原型。因此,我经常需要使用小数据。在本文中,我将分享7个改进使用小数据集进行原型设计结果的小技巧。
1.认识到你的模型不能很好地泛化
这应该是第一步。你正在构建一个模型,它是建立在宇宙的一小部分知识之上的,而这应该是唯一一个可以期望它能很好地工作的情境。
如果你正在建立一个基于室内照片选择的计算机视觉原型,不要期望它在室外工作得很好。如果你有一个基于聊天室的语言模型,不要指望它适用于幻想小说。
确保你的经理或客户理解这一点。这样,每个人都可以根据你的模型应该提供的结果,调整实际期望。它还创造了一个机会来提出一个新的有用的关键指标,以量化原型范围内外的模型性能。
2.建立良好的数据基础架构
在许多情况下,客户机没有你需要的数据,公共数据也不合适。如果原型的一部分需要收集和标记新数据,请确保基础架构,尽可能减少摩擦。
你要确保数据标签对技术和非技术人员来说都是非常容易的。我们已经开始使用Prodigy,我认为这是一个很好的工具:既可访问又可扩展。根据项目的大小,你可能还需要设置一个自动数据接收功能,它可以接收新数据并自动将其输入到标签系统。
如果将新数据导入系统既快捷又简单,你将获得更多数据。
3.做一些数据扩充
你通常可以通过增加所拥有的数据来扩展数据集。但这只是对数据进行细微更改,它不应显著地改变模型的输出。例如,如果旋转40度,猫的图像仍然是猫的图像。
在大多数情况下,增强技术允许你生成更多的「半唯一」数据点来训练你的模型。首先,你可以尝试在你的数据中加入少量的高斯噪声。
对于计算机视觉,有许多简洁的方法来增强图像。我对Albumentations库有过丰富的使用经验,它可以在保持标签不受损的同时进行许多有用的图像转换。
图片来源:Github上的Albumentations
许多人认为另一种有用的增强技术是「Mixup」。这种技术实际上是将两个输入图像混合在一起并组合它们的标签。
图片由CeciliaSummers和MichaelJ.Dinneen拍摄
在扩充其他输入数据类型时,需要考虑哪些转换会损害标签,哪些不会。
4.生成一些合成数据
如果你已经用尽了增加真实数据的方法,你可以开始考虑创建一些假数据。生成合成数据也是一种很好的方法,它可以用来覆盖一些实际数据集中不会出现的边缘情况。
例如,许多机器人强化学习系统在部署到真正的机器人之前,都是在模拟的3D环境中进行训练的。对于图像识别系统,你可以类似地构建3D场景,它可以提供数千个新的数据点。
15个模拟的Dactyl并行训练实例
创建合成数据有许多方法。在Kanda,我们正在开发一个基于转盘的解决方案来创建用于对象检测的数据。如果你有非常高的数据需求,你可以考虑使用通用的生成对抗网络来创建合成数据。要知道GAN是出了名的难以训练,所以你要确保它是值得的。
NVIDIAsGauGAN
有时你可以结合使用这些方法:苹果有一个非常聪明的方法,用一个GAN来处理3D模型人脸的图像,使其看起来更逼真。如果有时间的话,可以使用这个扩展数据集的绝妙技术。
5.小心「幸运的分割」
在训练机器学习模型时,通常将数据集按一定比例随机分割成训练集和测试集。通常情况下,这很好。但是,在处理小数据集时,由于训练示例数量较少,因此噪音风险较高。
在这种情况下,你可能会意外地得到一个幸运的分割:一个特定的数据集分割,在这个分割中,你的模型将很好地执行并在测试集中效果很好。然而,在现实中,这可能仅仅是因为测试集中没有困难的例子(巧合)。
在这种情况下,k-fold交叉验证是一个更好的选择。本质上,你将数据集拆分为k个「folds」,并为每个k训练一个新的模型,其中一个fold用于测试集,其余的用于训练。这可以控制你看到的测试结果,而不仅仅是由于幸运(或不幸运)的拆分。
6.使用迁移学习
如果你使用的是某种标准化的数据格式,如文本、图像、视频或声音,那么你可以使用其他人在这些域中用迁移学习所做的所有先前工作。这就像站在巨人的肩膀上。
当你进行迁移学习时,你会采用其他人建立的模型(通常,「其他人」是google、Facebook或一些主要的大学),并根据你的特殊需求对它们进行微调。
迁移学习之所以有效,是因为大多数与语言、图像或声音有关的任务都具有许多共同的特征。例如,对于计算机视觉来说,它可能是检测某些类型的形状、颜色或图案。
最近,我为客户开发了一个目标检测原型,这个客户对精度的要求非常高。我可以通过微调一个MobileNet单镜头探测器来大大加快开发速度,该探测器已经在google的开放式图像v4数据集(约万张标签图像)上接受过训练。.经过一天的训练,我能够使用大约张标记图像生成一个相当健壮的目标检测模型。
7.试一试「weaklearners」
有时候,你只需要面对这样一个事实:你没有足够的数据去做任何想做的事情。幸运的是,有许多传统的机器学习算法,你可以考虑使用这些算法,它们对数据集的大小不太敏感。
当数据集较小,数据点维数较高时,支持向量机等算法是一种很好的选择。
不幸的是,这些算法并不总是像最先进的方法那样精确。这就是他们之所以被称为「weaklearners」的原因,至少与高度参数化的神经网络相比是如此。
提高性能的一种方法是将这些「weaklearners」(这可能是一组支持向量机或决策树)组合在一起,以便它们「协同工作」生成预测。这就是组合学习的全部意义。
via: