机器学习—添加数据
如何为应用程序添加一些数据的技巧?
训练机器学习算法时,感觉我们总是希望我们几乎每时每刻都有更多的数据,所以有时候我们获得更多关于一些的数据是很有诱惑力的,试图获得更多类型的数据可能既慢又贵,相反,添加数据的另一种方法可能是专注于添加更多类型的数据,如果错误分析现实农民垃圾邮件是一个大问题,你可能会决定有一个更有针对性的努力,不是为了得到更多关于太阳下一切的数据,而是专注于以更适中的成本获得更多农民垃圾邮件的例子,这可以让你只添加电子邮件,你需要帮助你的学习算法在识别农民垃圾邮件方面变得更加智能,所以你可以这样做的一个例子是如果你有很多未标记的电子邮件数据,说坐在那里发电子邮件,也没有人费心给他贴上垃圾邮件或非垃圾邮件的标签,你可能可以转到未标记的数据,也许可以问你的标签,快速浏览未标记的标签,还有五个与农民相关的垃圾邮件的例子,这可以提高你的学习算法性能,而不仅仅是视图添加,更多关于各种电子邮件的数据,但更普遍的模式,如果你有一些方法可以添加更多的数据,那就没问题了,但如果误差分析表明数据有某些子集,算法做得特别差,你想提高性能,然后获得更多你希望它做得更好的类型的数据,更多药品垃圾邮件示例,或者别的什么,这可能是一种更有效的方法来添加一点点数据,但是将算法的性能提高了很多,除了获得全新的培训例子xy,还有一种技术被广泛使用,特别是对于图像和音频数据,可以显著增加训练集的大小,这种技术被称为数据增强。举一个现有的训练例子,创建新的训练示例,例如,如果你试图识别从A到Z的字母,光学字符识别问题,所以不仅仅是数字0到9,但从A到Z的字母也给出了这样的图像,你可能会决定通过旋转图像来创建一个新的训练示例,把图像放大一点或者缩小一点,或者通过改变图像的对比度,这些是图像扭曲的例子,这些扭曲不会改变,事实上,这仍然是字母表,这仍然是字母A,对于一些字母,但不是其他的,也可以把镜像转看起来仍然像字母A,但这只适用于一些字母,这些是以训练为例的方法,对输入X施加失真或变换,为了想出另一个有相同标签的例子,通过这样做,你告诉算法字母A旋转了一点或者放大了一点或者缩小了一点,但它仍然是字母A,并创建这样的额外示例,帮助学习算法更好的学习如何识别字母A。
有关数据增强的更高级示例,你也可以拿字母A在上面放一个网格,通过引入这个网络的随即翘曲,你可以把字母A引入字母A的翘曲,创建一个更丰富的字母A示例库,扭曲这些例子的过程,然后把一个图像或一个例子变成了这里,可以提供给学习算法的训练示例,以帮助它更健壮地学习,这种数据增强的思想也适用于语音识别,对于语音搜索应用程序,有一个听起来像这样的原始音频剪辑,将数据增强应用于语音数据的一种方法,把嘈杂的背景音频,如果你把这两个音频片段,第一个和人群的噪音加在一起,然后就会听见一个不一样的音频剪辑,这像是有人在说,但他们是在背景中喧闹的人群中说的,或者事实上,如果你用不同的背景噪音,假设有人在车里,这就是汽车的背景噪音听起来像什么,要把原始的音频剪辑添加到汽车噪音中,听起来像原始音频片段但好像演讲者在车里说的,更先进的数据增强步骤是如果你让原始音频听起来像是在坏的手机连接上录音,所以我们已经看到了如何拍摄一个音频片段,把它变成这里的三个训练例子,一个有人群背景噪音,一个有汽车背景噪音,一个好像是在一个坏的手机连接上录的,研究录音识别系统的时候,这实际上是一个非常关键的技术,可以人为的增加训练数据的大小。
数据增强的一个技巧,对数据所做的改变或扭曲应代表测试集中的噪声或失真类型,例如,如果你把字母A像这样翘曲,这看起来仍然像字母的例子,你可能会看到你想认识的或用于添加背景噪音或手机连接不良的音频,如果这代表了你在测试集中所期望的,那么这些将是对音频数据进行数据增强的有用方法,相比之下,在数据中添加纯粹随机的无意义噪声通常没有那么大的帮助,例如,你取了字母A,我把每个像素的噪声加了进去,如果Xi是像素亮度的强度,如果把噪音加到每个像素,然后你最终得到的图像看起来像这样,但如果到了这并不能代表你在测试集中看到的情况,因为你不经常在测试集中得到这样的图像,这实际上不会有什么帮助,所以考虑数据增强的一种方法是你如何修改、扭曲或者使数据更加嘈杂,但在某种程度上,所以你得到的仍然和你的测试集很相似,因为这就是学习算法,最终会做得很好,获取一个现有的培训示例并对其进行和修改以创建另一个培训示例。
还有一种技术是数据合成,从零开始创造全新的例子,不是通过修改现有的示例,但通过创造全新的例子,以照片OCR为例,照相光学或照相光学字符识别指的是像这样看图像的问题,让计算机自动读取此图像中出现的文本,所以这张图片里有很多文字,如何训练ocr算法从这样的图像中读取文本。
当你仔细观察这张那个图片中的字母时,它们实际上是这样的,这是照片中OCR任务中的真实数据,照片OCR任务的一个关键步骤是能够看到像这样的小图像,认出中间的字母,所以中间有T,中间有字母LC,以此类推,因此,为这项任务创建人工数据的一种方法是如果你转到计算机的文本编辑器,你发现它有很多不同的字体,你能做的就是把这些字体基本上在文本编辑器中键入随机文本,截图它使用不同的颜色,不同的对比度和非常不同的字体,你会得到像右边这样的合成数据,左边的图像是从世界上拍摄的真实照片中获得的真实数据,右边的图像是使用计算机上的字体合成生成的,它实际上看起来很逼真,所以像这样的合成数据生成,可以为你的照片ocr任务生成大量的图像或示例,编写代码可能需要大量工作,为给定的应用程序生成看起来逼真的合成数据,但是当你花时间这样的时候,它有时可以帮助你为应用程序生成非常大量的数据,并极大地提高算法的性能,合成数据生成最可能用于计算机视觉任务,其他应用更少,音频谈话也不多。
所有的技术都与寻找设计系统使用的数据的方法,以机器学习在过去几十年中的发展方式,几十年来,大多数机器学习研究人员的注意力集中在传统的以模型为中心的方法上,机器学习系统或人工智能系统包括实现算法或模型的代码,以及训练算法的数据,在过去的几十年里,大多数进行机器学习研究的研究人员会下载数据集并保存数据修复,当他们专注于改进算法或模型的代码时,多亏了机器学习研究的范式,今天我们可以访问的算法比如线性回归、逻辑回归、神经网络还有决策树,有一些算法非常好,将很好的适用于许多应用程序,因此,有时花更多的世家收集数据会更有成效,以人为中心的方法,在这种方法中,专注于设计算法使用的数据,这可以是任何事情,从收集更多的数据到收集更多的数据,只是在药品垃圾邮件上,如果这就是错误分析告诉你要做的使用数据增强来生成更多的图像或更多的音频或者使用数据合成来创建更多的训练示例,有时,关注数据是帮助学习算法提高性能的有效方法。