处理数据不匹配问题

如果您的训练集来自和开发测试集不同的分布,如果错误分析显示有一个数据不匹配的问题该怎么办?这个问题没有完全系统的解决方案,但可以看看一些可以尝试的事情。如果发现有严重的数据不匹配问题,通常会亲自做错误分析,尝试了解训练集和开发测试集的具体差异。技术上,为了避免对测试集过拟合,要做错误分析,应该人工去看开发集而不是测试集。

但作为一个具体的例子,如果正在开发一个语音激活的后视镜应用,可能要看看……想如果是语音的话,可能要听一下来自开发集的样本,尝试弄清楚开发集和训练集到底有什么不同。所以,比如说可能会发现很多开发集样本噪音很多,有很多汽车噪音,这是的开发集和训练集差异之一。也许还会发现其他错误,比如在的车子里的语言激活后视镜,发现它可能经常识别错误街道号码,因为那里有很多导航请求都有街道地址,所以得到正确的街道号码真的很重要。当了解开发集误差的性质时,就知道,开发集有可能跟训练集不同或者更难识别,那么可以尝试把训练数据变得更像开发集一点,或者,也可以收集更多类似的开发集和测试集的数据。所以,比如说,如果发现车辆背景噪音是主要的错误来源,那么可以模拟车辆噪声数据。或者发现很难识别街道号码,也许可以有意识地收集更多人们说数字的音频数据,加到的训练集里。

现在知道这篇博客只给出了粗略的指南,列出一些可以做的尝试,这不是一个系统化的过程,想,这不能保证一定能取得进展。但发现这种人工见解,可以一起尝试收集更多和真正重要的场合相似的数据,这通常有助于解决很多问题。所以,如果的目标是让训练数据更接近的开发集,那么可以怎么做呢?

可以利用的其中一种技术是人工合成数据(artificial data synthesis),讨论一下。在解决汽车噪音问题的场合,所以要建立语音识别系统。也许实际上没那么多实际在汽车背景噪音下录得的音频,或者在高速公路背景噪音下录得的音频。但发现,可以合成。所以假设录制了大量清晰的音频,不带车辆背景噪音的音频,“The quick brown fox jumps over the lazy dog”(音频播放),所以,这可能是的训练集里的一段音频,顺便说一下,这个句子在AI测试中经常使用,因为这个短句包含了从a到z所有字母,所以会经常见到这个句子。但是,有了这个“the quick brown fox jumps over the lazy dog”这段录音之后,也可以收集一段这样的汽车噪音,(播放汽车噪音音频)这就是汽车内部的背景噪音,如果一言不发开车的话,就是这种声音。如果把两个音频片段放到一起,就可以合成出"the quick brown fox jumps over the lazy dog"(带有汽车噪声),在汽车背景噪音中的效果,听起来像这样,所以这是一个相对简单的音频合成例子。在实践中,可能会合成其他音频效果,比如混响,就是声音从汽车内壁上反弹叠加的效果。

但是通过人工数据合成,可以快速制造更多的训练数据,就像真的在车里录的那样,那就不需要花时间实际出去收集数据,比如说在实际行驶中的车子,录下上万小时的音频。所以,如果错误分析显示应该尝试让的数据听起来更像在车里录的,那么人工合成那种音频,然后喂给的机器学习算法,这样做是合理的。

现在要提醒一下,人工数据合成有一个潜在问题,比如说,在安静的背景里录得10,000小时音频数据,然后,比如说,只录了一小时车辆背景噪音,那么,可以这么做,将这1小时汽车噪音回放10,000次,并叠加到在安静的背景下录得的10,000小时数据。如果这么做了,人听起来这个音频没什么问题。但是有一个风险,有可能的学习算法对这1小时汽车噪音过拟合。特别是,如果这组汽车里录的音频可能是可以想象的所有汽车噪音背景的集合,如果只录了一小时汽车噪音,那可能只模拟了全部数据空间的一小部分,可能只从汽车噪音的很小的子集来合成数据。

而对于人耳来说,这些音频听起来没什么问题,因为一小时的车辆噪音对人耳来说,听起来和其他任意一小时车辆噪音是一样的。但有可能从这整个空间很小的一个子集出发合成数据,神经网络最后可能对这一小时汽车噪音过拟合。不知道以较低成本收集10,000小时的汽车噪音是否可行,这样就不用一遍又一遍地回放那1小时汽车噪音,就有10,000个小时永不重复的汽车噪音来叠加到10,000小时安静背景下录得的永不重复的语音录音。这是可以做的,但不保证能做。但是使用10,000小时永不重复的汽车噪音,而不是1小时重复学习,算法有可能取得更好的性能。人工数据合成的挑战在于,人耳的话,人耳是无法分辨这10,000个小时听起来和那1小时没什么区别,所以最后可能会制造出这个原始数据很少的,在一个小得多的空间子集合成的训练数据,但自己没意识到。

这里有人工合成数据的另一个例子,假设在研发无人驾驶汽车,可能希望检测出这样的车,然后用这样的框包住它。很多人都讨论过的一个思路是,为什么不用计算机合成图像来模拟成千上万的车辆呢?事实上,这里有几张车辆照片(下图后两张图片),其实是用计算机合成的,想这个合成是相当逼真的,想通过这样合成图片,可以训练出一个相当不错的计算机视觉系统来检测车子。

不幸的是,比如这是所有车的集合,如果只合成这些车中很小的子集,对于人眼来说也许这样合成图像没什么问题,但的学习算法可能会对合成的这一个小子集过拟合。特别是很多人都独立提出了一个想法,一旦找到一个电脑游戏,里面车辆渲染的画面很逼真,那么就可以截图,得到数量巨大的汽车图片数据集。事实证明,如果仔细观察一个视频游戏,如果这个游戏只有20辆独立的车,那么这游戏看起来还行。因为是在游戏里开车,只看到这20辆车,这个模拟看起来相当逼真。但现实世界里车辆的设计可不只20种,如果用着20量独特的车合成的照片去训练系统,那么的神经网络很可能对这20辆车过拟合,但人类很难分辨出来。即使这些图像看起来很逼真,可能真的只用了所有可能出现的车辆的很小的子集。

所以,总而言之,如果认为存在数据不匹配问题,建议做错误分析,或者看看训练集,或者看看开发集,试图找出,试图了解这两个数据分布到底有什么不同,然后看看是否有办法收集更多看起来像开发集的数据作训练。

谈到其中一种办法是人工数据合成,人工数据合成确实有效。在语音识别中。已经看到人工数据合成显著提升了已经非常好的语音识别系统的表现,所以这是可行的。但当使用人工数据合成时,一定要谨慎,要记住有可能从所有可能性的空间只选了很小一部分去模拟数据。

机器学习策略篇:详解处理数据不匹配问题(Addressing data mismatch)的更多相关文章

  1. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  2. Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)【转】

    转自:https://blog.csdn.net/radianceblau/article/details/74722395 版权声明:本文为博主原创文章,未经博主允许不得转载.如本文对您有帮助,欢迎 ...

  3. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  4. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  5. 十图详解tensorflow数据读取机制(附代码)转知乎

    十图详解tensorflow数据读取机制(附代码) - 何之源的文章 - 知乎 https://zhuanlan.zhihu.com/p/27238630

  6. 百度大脑UNIT3.0详解之数据生产工具DataKit

    在智能对话项目搭建的过程中,高效筛选.处理对话日志并将其转化为新的训练数据,是对话系统效果持续提升的重要环节,也是当前开发者面临的难题之一.为此百度大脑UNIT推出学习反馈闭环机制,提供数据获取.辅助 ...

  7. 不看就亏了:DELL EqualLogic PS6100详解及数据恢办法

    DELL EqualLogic PS6100采用虚拟ISCSI SAN阵列,为远程或分支办公室.部门和中小企业存储部署带来企业级功能.智能化.自动化和可靠性,支持VMware.Solaris.Linu ...

  8. 详解Tensorflow数据读取有三种方式(next_batch)

    转自:https://blog.csdn.net/lujiandong1/article/details/53376802 Tensorflow数据读取有三种方式: Preloaded data: 预 ...

  9. Canal:同步mysql增量数据工具,一篇详解核心知识点

    老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...

  10. 详解APM数据采样与端到端

    高驰涛 云智慧首席架构师 据云智慧统计,APM从客户端采集的性能数据可能占到业务数据的50%,而企业要做到从Request到Response整个链路中涉及到的所有数据的准确采集,并进行有效串接,进而实 ...

随机推荐

  1. 在 JS 中使用 canvas 给图片添加文字水印

    实现说明: 1.先通过 new Image() 载入图片: 2.图片加载成功后使用 drawImage() 将图片绘制到画布上: 3.最后使用 fillText() 函数绘制水印. 下面展示了详细用法 ...

  2. 高效运维_AIRIOT智慧电力运维解决方案

    可再生能源的引入带来了能源生产的去中心化和分散化趋势,同时也带来了能源输出的波动性和不确定性.电力运维因此需要更加灵活.智能的解决方案,以适应可再生能源的集成,确保电力系统的稳定运行,传统的电力运维管 ...

  3. PasteSpider之appsettings.json中的Serilog的配置,分流不同日志层级的信息!

    在实际使用Serilog中,我们通常会有不一样的需求,常见的比如 1.按照等级,高级哪个等级的才记录 2.记录文件每个多大,超过的划分到下一个文件中 3.不同等级的记录到不同的位置中 4.按照不一样的 ...

  4. ChatGPT-4o模型功能介绍

    1.概述 OpenAI 持续突破人工智能的边界,推出了其最新模型 ChatGPT-4o,作为 ChatGPT-4 的继承者,该模型有望带来显著的提升和创新功能.本文将深入解析 ChatGPT-4 与 ...

  5. vue-cli3 项目路由 history 模式部署到 nginx 服务器

    1.项目修改vue.config.js增加 publicPath: '/' 2.nginx配置 location / {#访问前端页面 root /data/dist;#vue项目存放路径 index ...

  6. LlamaFS自组织文件管理器

    LlamaFS是一个自组织文件管理器.它可以基于文件内容和修改时间等属性自动重命名和组织您的文件.它能让你不把时间花在对文件的复制.粘贴.重命名.拷贝.排序等简单操作上.有幸在Github上看到Lla ...

  7. 一文搞懂 MySQL 日志

    前言 MySQL 的日志记录了运行的各种信息,是 MySQL 事务.性能.数据容灾.异常排查等的基础.本文将介绍 MySQL 一些关键日志的作用和原理. MySQL InnoDB 引擎重要的三个日志: ...

  8. wordpress 折腾记

    今天我看到一篇个人博客,我想建个人网站的心又动了. 虽说博客园已经很符合我的预期了,但我还是一直很想做一个个人网站做一些个性化的东西,今天试试用用wordpress搭建一个wordpress网站 介绍 ...

  9. python-一种字符串排序方式

    最近工作中,需要使用python实现一种排序方式,简要说明如下: 1.排序方式 假设有一个序列,数据为:['n1', 'n2', 'n10', 'n11', 'n21', 'n3', 'n13', ' ...

  10. C#.Net筑基-String字符串超全总结 [深度好文]

    字符串是日常编码中最常用的引用类型了,可能没有之一,加上字符串的不可变性.驻留性,很容易产生性能问题,因此必须全面了解一下. 01.字符与字符编码 1.1.字符Char 字符 char 表示为 Uni ...