全文共2581字,预计学习时长5分钟
人们常说,大数据是打造成功机器学习项目的关键。但主要的问题在于:很多机构没有你想要的数据。
在没有大数据这一关键原材料的情况下,我们该如何将机器学习的想法制成原型,使其产生实效呢?我们又该如何用有限的数据来源,有效获取和创造价值呢?
功能性原型(functional prototype)是一种办法。因此,我们常常需要开发小样本数据。本文将介绍7种提高小样本数据原型化效果的方法。
- 模型不可能广泛适用
这是工作的首要前提。所建立的模型仅仅基于宇宙万物中的极小一部分,只有在这种情境下,模型才能顺利运行。
如果你利用一系列室内照片建立了一个视觉原型,那么这一模型绝对无法适用于室外。如果你利用网络聊天的玩笑话素材建立了一个语言模型,这一模型也绝对无法适用于一部奇幻小说。
必须保证你的上司和客户都明白这一点。只有如此,所有人才能对模型效果抱有现实合理的预期。也只有这样,才有可能产生更实用的关键绩效指标(KPI),来量化原型范围之内及范围之外的模型运行效果。
- 建立良好的数据基础设施
很多情况下,客户没有你需要的数据,同时你又不能调取公共数据。如果收集和标注新的数据属于制作原型的步骤之一,应确保参与工作的数据基础设施不会给你制造麻烦。
最好保证数据标注简单明了,以便非技术人员理解和实行。我们最近开始使用Prodigy,这一软件非常好:不仅容易入门,而且功能可拓展。还可以根据不同项目的大小,利用Prodigy设立一个自动数据摄取系统,让它帮你将数据自动录入标注库中。
如果录入新数据简单快捷,新的数据也将唾手可得。
- 开展数据扩充工作
我们常常能通过扩充数据来拓展现有数据集。扩充数据,就是在不影响整体的模型输出结果的前提下,略微调整现有数据集。比如说,把一只猫的图片旋转40度,它仍然是同一个图片。
大多数时候,扩充数据能让你制造更多用来训练模型的“半独立”的数据点。刚起步时可以尝试在数据里加入小部分高斯噪声(GaussianNoise)。
在计算机视觉领域里,许多方法可以用于放大图片。Albumentations图片数据增强库的使用体验较好,它能完成许多实用的图片转化任务,且不会损害原图的标注。
图片来源: Albumentations on Github
另一个广受好评的扩充技术是Mixup。这一技术的功能像它的名称所说那样,能够合并输入端的两个图片,并组合两者的标注。
图片来源: Cecilia Summers & Michael J. Dinneen
扩充其他类别的数据时,应适当考虑怎样的图片转换会改变标注,怎样的转换不会改变标注。
- 生成人造数据
如果你竭尽了数据扩充的所有可能,就可以考虑编造数据了。生成人造数据,不失为一种补充实际数据集的边界案例的有效方法。
举一个例子,很多机器加强学习系统(比如OpenAI的Dactyl)常常先在3D模拟环境下训练,而后才在真正的机器人应用。对图像识别系统而言,同样可以构建不同的3D场景,它们足以提供数以千计的新数据点。
15个模拟的Dactyl并行训练实例
生成人造数据的方法很多。Kanda正致力于创造一个基于转台结构的数据生成方案,用于目标检测。假如你有很高的数据需求,可以考虑用生成式对抗网络(Generative AdversarialNetworks,又名生成对抗网络,简称GAN)生成人造数据。但要注意,GAN出了名的难以训练,所以在使用前,要确保项目值得运用GAN。
有时候可以组合多种方法:苹果公司巧妙地利用GAN来加工3D人脸建模,使之看起来更像真实照片。只要有时间投入,这就是个延伸数据集的好方法。
- 警惕“幸运分组”
在训练机器学习模型时,人们往往会根据某些比例,随机将数据集划分为训练组和测试组。这通常是可行的,但是在处理小样本数据时,由于训练样本量较小,出现噪音的概率很大。
这种情况下,你很可能只是偶然碰到了一个“幸运分组”,即一个能让模型在测试组中完美运行和归纳的特定数据集分组。但实际上,这很可能只是因为测试组的数据恰好没有包含困难项。
在这种情况下用K-折交叉检验方法会是一个更好的选择。它的运作原理大概是,把一个数据集分为K“份”,训练新模型时,每次使用其中的一份作为测试组,其余作为训练组使用。以上方法保证了模型在测试中的表现并不受制于一个幸运(或不幸)的分组。
- 应用迁移学习
如果你正在处理一些较为程式化的数据,比如文本、图片、视频、音频等等,可以通过迁移学习利用所有前人在这一领域的成果,就好比站在巨人的肩膀上一样。
在进行迁移学习时,你使用的是其他人建立过的模型(通常来讲,此处的“其他人”指谷歌、脸书或是一些知名大学),并在此基础上,做出调试以适应特殊需求。
迁移学习之所以起作用,是因为大部分处理语言、图片或是音频的任务都具有共同特征,例如计算机视觉中对特定形状类型和颜色模式的侦测。
通过精准调试MobileNet SSD 检测模型(MobileNet Single Shot Detector),得以显著加快项目的进程。MobileNet SSD检测模型是在谷歌的Open Images v4数据集(包含约900万标注图片!)上训练的目标检测模型。只经过了一天的模型训练,就已经能建构出一个相当灵活的目标检测模型,其性能在0.85的mAP值下可以检测约1500个标注图片。
- 尝试组合多个“弱学习组”
有时候必须承认,你的数据根本不足以支持你做一些花哨复杂的工作。不过幸运的是,许多对于数据集样本容量要求不高的传统机器学习算法能帮到你。面对样本容量少而数据维度大的数据集,像SupportVector Machine这样的算法就是比较好的选择。
不幸的是,这些算法可能没有当今前沿的数据分析方法精准。这就是为什么人们称它们为“弱学习组”,至少相对于高参数化的神经网络,这些算法是更弱的。
提高性能的方法之一就是将多个这样的“弱学习组”进行组合(可以是一批诸如Support VectorMachines或Decision Trees之类的程序),使得它们能够“协同工作”,共同产生一个预测结果。这就是集成学习的主要内容。