三、数据集增强

  1. 提高模型泛化能力的一个最直接的方法是采用更多的数据来训练。但是通常在现实任务中,我们拥有的数据量有限。

    解决该问题的一种方法是:创建一些虚拟的数据用于训练。

  2. 数据集增强仅仅用于模型的训练,而不是用于模型的预测。即:不能对测试集、验证集执行数据集增强。

  3. 当比较机器学习算法基准测试的结果时,必须考虑是否采用了数据集增强。

    通常情况下,人工设计的数据集增强方案可以大大减少模型的泛化误差。当两个模型的泛化性能比较时,应该确保这两个模型使用同一套人工设计的数据集增强方案。

  4. 注意数据集增强和预处理的区别:数据集增强会产生更多的输入数据,而数据预处理产生的输入数据数量不变。

3.1 线性变换

  1. 对于某些任务来说,创建虚拟数据非常困难。如:在密度估计任务中,除非预先知道了密度函数,否则无法产生新的虚拟数据。

    对于分类问题来说,创建虚拟数据非常简单。对于一个分类器,它将高维的输入 三、数据集增强 - 图1 映射到类别 三、数据集增强 - 图2 。这意味着这种映射规则是不随坐标系的改变而改变的。因此可以通过线性变换,将训练集中的 三、数据集增强 - 图3 变换为 三、数据集增强 - 图4 从而产生了新的数据 三、数据集增强 - 图5

    对图像分类问题,数据集增强特别有效。数据集增强也可以应用于语音识别任务。

  2. 常见的图片数据集增强方法:

    • 将训练图像沿着每个方向平移几个像素产生新的图像。

    • 对训练图像进行旋转、翻转或者缩放。

    • 对训练图像进行随机裁剪。

      实际上,随机裁剪图像的操作也可以被认为是预处理步骤,而不是数据集增强。

    • 对训练图像进行颜色抖动:调整饱和度、调整亮度、调整对比度、调整锐度。

      • 对比度:图像画面的明暗反差程度。对比度越高,则图片亮的地方更亮,暗的地方越暗。
      • 亮度:图像的明暗程度。亮度越高,则图像整体越亮。
      • 饱和度:图像颜色种类的多少。饱和度越高,则图像的颜色种类越多,图像越鲜艳。
      • 锐度:图像的边缘轮廓的锐利程度。锐度越高,则图像的边缘越清晰。
  3. 在使用线性变换执行数据集增强时需要注意:

    • 某些线性变换会改变正确的类别。

      如:字符识别任务中, b/d以及6/9的图像, 不能执行水平翻转变换和旋转 180 度变换。

    • 某些线性变换难以执行。

      如:平面外的绕轴旋转(类似于翻页)难以通过简单的几何运算在输入图片上实现。

3.2 输入噪声注入

  1. 在神经网络的输入层注入噪声也可以视作数据增强的一种形式。如:在图像识别任务中,对训练图像注入高斯噪声。

    事实上输入噪声注入也可以用于无监督学习,如:降噪自动编码器。

  2. 通常一个训练好的神经网络对噪声鲁棒性较差,改善其噪声鲁棒性的常用方法是:简单地将随机噪声施加到输入上,再进行训练。

    • Poole et al.(2014)表明:当仔细调整噪声的幅度之后,该方法非常高效。

    • 噪声被添加到每层隐单元的输入(而不仅仅是整个网络的输入)也是可行的,这被视为在多个抽象层上进行数据集增强。

      本章后面的dropout正则化策略可以被看作是通过对隐单元的输入乘上噪声。