三、数据集增强
提高模型泛化能力的一个最直接的方法是采用更多的数据来训练。但是通常在现实任务中,我们拥有的数据量有限。
解决该问题的一种方法是:创建一些虚拟的数据用于训练。
数据集增强仅仅用于模型的训练,而不是用于模型的预测。即:不能对测试集、验证集执行数据集增强。
当比较机器学习算法基准测试的结果时,必须考虑是否采用了数据集增强。
通常情况下,人工设计的数据集增强方案可以大大减少模型的泛化误差。当两个模型的泛化性能比较时,应该确保这两个模型使用同一套人工设计的数据集增强方案。
注意数据集增强和预处理的区别:数据集增强会产生更多的输入数据,而数据预处理产生的输入数据数量不变。
3.1 线性变换
对于某些任务来说,创建虚拟数据非常困难。如:在密度估计任务中,除非预先知道了密度函数,否则无法产生新的虚拟数据。
对于分类问题来说,创建虚拟数据非常简单。对于一个分类器,它将高维的输入 映射到类别 。这意味着这种映射规则是不随坐标系的改变而改变的。因此可以通过线性变换,将训练集中的 变换为 从而产生了新的数据 。
对图像分类问题,数据集增强特别有效。数据集增强也可以应用于语音识别任务。
常见的图片数据集增强方法:
将训练图像沿着每个方向平移几个像素产生新的图像。
对训练图像进行旋转、翻转或者缩放。
对训练图像进行随机裁剪。
实际上,随机裁剪图像的操作也可以被认为是预处理步骤,而不是数据集增强。
对训练图像进行颜色抖动:调整饱和度、调整亮度、调整对比度、调整锐度。
- 对比度:图像画面的明暗反差程度。对比度越高,则图片亮的地方更亮,暗的地方越暗。
- 亮度:图像的明暗程度。亮度越高,则图像整体越亮。
- 饱和度:图像颜色种类的多少。饱和度越高,则图像的颜色种类越多,图像越鲜艳。
- 锐度:图像的边缘轮廓的锐利程度。锐度越高,则图像的边缘越清晰。
在使用线性变换执行数据集增强时需要注意:
某些线性变换会改变正确的类别。
如:字符识别任务中,
b/d
以及6/9
的图像, 不能执行水平翻转变换和旋转 180 度变换。某些线性变换难以执行。
如:平面外的绕轴旋转(类似于翻页)难以通过简单的几何运算在输入图片上实现。
3.2 输入噪声注入
在神经网络的输入层注入噪声也可以视作数据增强的一种形式。如:在图像识别任务中,对训练图像注入高斯噪声。
事实上输入噪声注入也可以用于无监督学习,如:降噪自动编码器。
通常一个训练好的神经网络对噪声鲁棒性较差,改善其噪声鲁棒性的常用方法是:简单地将随机噪声施加到输入上,再进行训练。
Poole et al.(2014)
表明:当仔细调整噪声的幅度之后,该方法非常高效。噪声被添加到每层隐单元的输入(而不仅仅是整个网络的输入)也是可行的,这被视为在多个抽象层上进行数据集增强。
本章后面的
dropout
正则化策略可以被看作是通过对隐单元的输入乘上噪声。