讨论数据增强(data augmentation)的有效性
FesianXu 20210216 at Baidu intern

前言

在知乎上遇到了一个问题并且进行了简单的回答,如何证明数据增强(Data Augmentation)有效性? 这个问题其实蛮有意思的,以此为展开简要记录下在图像领域常用的一些数据增强方法。本文参考了论文[1]。 如有谬误请联系指出,本文遵守 CC 4.0 BY-SA 版权协议,转载请联系作者并注明出处,谢谢

∇\nabla∇ 联系方式:

e-mail: FesianXu@gmail.com

github: https://github.com/FesianXu

知乎专栏: 计算机视觉/计算机图形理论与应用

微信公众号


学习模型并非只是模型

在知乎问题[2]中,提问者提出问题:

数据增强后模型识别准确率的提高可不可能只是因为同一图片增强前后具有相似性而导致的?模型的泛化能力是否有了实质上的提高?

笔者在该问题下给出了回答,提问者会产生这类型疑问的原因在于,他认为学习模型只是一个模型,而数据,损失函数以及学习策略都是独立的,这种概念上的隔离使得读者很容易误认为,数据的归数据,模型的归模型。然而,没有免费午餐定理(No free lunch theorem)告诉我们,没有一种模型是足够强大到可以在所有数据上表现都符合要求的。笔者在之前的博文《 数据,模型,算法共同决定深度学习模型效果 》[3]中曾经提到,我们应该把一个学习模型分解为三大部分:

  1. 数据,也就是DtrainD_{train}Dtrain​。
  2. 模型,其决定了假设空间H\mathcal{H}H。
  3. 算法,如何在指定的假设空间H\mathcal{H}H中去搜索最佳假设以拟合DtrainD_{train}Dtrain​。

其中的算法部分又包括了:损失函数和参数更新策略(比如Adam,SGD)等。这三大部分不可以分割开来讨论,在离开了具体数据的情况下,单独讨论模型的泛化性能是没有意义的。在实践中,我们的设计模型的方法论通常是将假设空间设计的足够大,正如《自私的基因》的作者查理德道金斯所说的,“当搜索空间足够大时,有效的搜索就与真正的创造并无二致了”,这句话与博尔赫斯的《巴别图书馆》以及中国古话“文章本天成,妙手偶得之”都具有异曲同工之妙,无非是强调如何在足够大的搜索空间中搜索得到一个足够好的解。 然而,现实世界的数据总是缺乏的,经常不足以支撑起在整个假设空间中搜索得到一个较优解的需求。为了解决这种问题,我们通常需要引入各种各样的先验知识,或从数据着手,或从模型设计着手,或从损失函数,参数更新策略着手,去足够大的假设空间的前提下,减少搜索空间,或者尽量避开那些明显不是解的点。引入先验的方向,如果分摊到数据,模型,算法上,分别有以下三种思路:

  1. 数据。在这类型方法中,我们利用先验知识去对DtrainD_{train}Dtrain​进行数据增广(data augment),从数据量III提高到I~\widetilde{I}I,通常I~>>I\widetilde{I} >> II>>I。随后标准的机器学习算法就可以在已经增广过后的数据集上进行。因此,我们可以得到更为精确的假设hI~h_{\widetilde{I}}hI​。如Fig 1.1 (a)所示。
  2. 模型。这类型方法通过先验知识去约束了假设空间 H\mathcal{H}H 的复杂度,得到了各位窄小的假设空间H~\widetilde{\mathcal{H}}H。如Fig 1.1 (b) 所示。灰色区域已经通过先验知识给排除掉了,因此模型不会考虑往这些方向进行更新,因此,往往需要更少的数据就可以达到更为可靠的经验风险假设。
  3. 算法。这类型的方法考虑使用先验知识,指导如何对θ\thetaθ进行搜索。先验知识可以通过提供一个好的参数初始化,或者指导参数的更新步,进而影响参数搜索策略。对于后者来说,其导致的搜索更新步由先验知识和经验风险最小项共同决定。

Fig 1.1 学习模型由数据,模型和算法三大部分组成,通过对这三部分添加先验,可以减少搜索空间,加快搜索速度和提高搜索结果。

本文着重讨论的是对数据的先验引入,因此讨论数据增广的一些形式:

  1. 从训练集中进行数据增强,这个是我们一般认知中的数据增强,比如像素抖动,平移,crop,旋转,镜像等等。
  2. 从弱标注或者无标注数据中进行数据增强,这种方法可以用于对模型进行预训练。
  3. 从相似的数据集中进行数据增强,这种方法用于Few-shot learning和Transfer learning等。

图像的数据增强操作很多,大致类型如Fig 1.2所示,在本文我们主要介绍最常用的基础图像操作(Basic Image Manipulations)相关的方法。在介绍数据增强前,我们要知道对于整个任务来说,数据增强首先应该是“安全”的,也就是说在数据增强前后图像的标签应该是得以保留的,举个例子,在ImageNet上对图片进行旋转和镜像翻转就是标签安全的,这个不会改变图片类别(比如猫VS狗);而在MNIST上进行旋转就有可能会改变图片的类别,比如6和9。在进行数据增强前,一定要确保你的操作是label preserve的。

Fig 1.2 图像相关的数据增强方式。

Reference

[1]. Shorten, Connor, and Taghi M. Khoshgoftaar. “A survey on image data augmentation for deep learning.” Journal of Big Data 6.1 (2019): 1-48.

[2]. https://www.zhihu.com/question/444425866/answer/1732551386

[3]. https://blog.csdn.net/LoseInVain/article/details/105644994

讨论数据增强(data augmentation)的有效性相关推荐

  1. tf torch keras 数据增强 data augmentation

    数据增强 data augmentation 2017年11月14日 22:19:27 阅读数:7964

  2. Dataset之DA:数据增强(Data Augmentation)的简介、方法、案例应用之详细攻略

    Dataset之DA:数据增强(Data Augmentation)的简介.方法.案例应用之详细攻略 目录 DA的简介 DA的方法 DA的案例应用 DA的简介 数据集增强主要是为了减少网络的过拟合现象 ...

  3. 吴恩达神经网络和深度学习-学习笔记-38-使用开源的方案+迁移学习+数据增强data augmentation

    使用别人的开源成果 想要用现成的网络,最好在网络上找到开源的实现,这要比从头开始实现快得多. 比如:直接在Google上搜索resnets github,找到合适的后点击下载会得到URL,然后在cmd ...

  4. 数据增强 data augmentation

    有人称为数据扩充,不过更多按原意翻译为:数据增强(补充:数据增广更准确) 数据增强的方法种类 一些常见方法,如裁剪/缩放/彩色变换/翻转等,可参考:https://www.cnblogs.com/zh ...

  5. 【方法】数据增强(Data Augmentation)

    在训练过程中,网络优化是一方面,数据集的优化又是另一方面.数据集会存在各类样本不均匀的情况,也就是各类样本的数量不一样,有的甚至差别很大.为了让模型具有更强的鲁棒性,采用Data Augmentati ...

  6. 深度学习图像数据增强data augmentation

    本文转自:http://www.cnblogs.com/gongxijun/p/6117588.html 在图像的深度学习中,为了丰富图像训练集,更好的提取图像特征,泛化模型(防止模型过拟合),一般都 ...

  7. 使用 imgaug 对图像进行数据增强 Data Augmentation

    所谓数据增强,就正如 imgaug 库对自己的介绍: This python library helps you with augmenting images for your machine lea ...

  8. 【深度学习】数据扩充 (Data Augmentation)

    Introduction 数据扩充(data augmentation),又名 数据增强 / 数据增广. 其本质即: 缺少海量数据时,为了保证模型的有效训练,一分钱掰成两半花. 数据扩充方法包括: 简 ...

  9. NLP:数据增强/Data Argumentation【词汇替换、随机Mask、回译、添加噪声】

    数据增强技术在计算机视觉中应用的比较广泛,但是在 NLP 中却很少能得到有效的应用.本质原因在于图像中的一些数据增强方法,比如将图像旋转几度或将其色度转换为灰度,在增强数据的同时并不会改变图像本身的含 ...

最新文章

  1. php mysql insert数组_PHP – MySQL编写的INSERT数组语句
  2. 强化深度学习把医疗AI推向新的高潮
  3. 用户交互php源码,phpWebSite ,容许个人和群组用户很容易地维护一个交互式社区驱动的站点.phpWebSite...
  4. BOOST_VMD_ASSERT_IS_TUPLE宏相关的测试程序
  5. fatal: unable to access ‘https://github.com/***.git/‘: OpenSSL SSL_read: Connection was reset, errno
  6. Core IO学习心得
  7. ES6之路第十三篇:Iterator和for...of循环
  8. php 计划任务 不执行,CentOS 系统下 Laravel 计划任务 PHP artisan schedule:run 不执行,应该如何处理?...
  9. 【HDU - 6231】K-th Number(二分,思维)
  10. WPF系列 自定控件
  11. 织梦重置mysql数据库密码忘记_织梦cms管理员密码忘记了怎么重置找回?
  12. 【Hive】解析字符串(类似array嵌套map结构)
  13. arcgis engine设置数据源路径_不用ArcGIS做前期分析,你是不是想被辞!
  14. 【机器学习】无监督学习:PCA和聚类
  15. oem13c安装参考
  16. dbfs和dbm的换算_dB 、dBm、dBuv的概念及换算
  17. 七日杀 服务器不显示,七日杀进服务器不显示画面 | 手游网游页游攻略大全
  18. python语句中print(type(1j))_Python语句 print(type(1J))的输出结果是:________
  19. 【Win7系统中怎么在我的电脑里面找回摄像头设置】
  20. 猫叫狗叫java_狗叫猫叫动物叫声手机版|狗叫猫叫动物叫声安卓版下载 v1.1 - 跑跑车安卓网...

热门文章

  1. 初探:使用Jest进行React单元测试
  2. java中的枚举是什么?枚举怎么使用?
  3. 原型设计工具Axure RP9下载、中文语言操作说明(赠授权码)
  4. mouseover,mouseout,mouseenter,mouseleave,hover
  5. Ip地址基础--全篇无废话
  6. Windos 前后端项目的部署
  7. 学生鲜花网页设计作品静态HTML网页模板源码 大学生鲜花商城网站制作 简单鲜花网站网页设计成品
  8. Linus Torvalds称讨厌被人崇拜
  9. Idea无法自动补全代码,ctrl+Alt+v无法使用解决方法
  10. Fiddler证书安装(查看HTTPS)