数据增强(data augmentation)

数据增强(data augmentation)

数据增强主要用来防止过拟合,用于dataset较小的时候。
之前对神经网络有过了解的人都知道,虽然一个两层网络在理论上可以拟合所有的分布,但是并不容易学习得到。因此在实际中,我们通常会增加神经网络的深度和广度,从而让神经网络的学习能力增强,便于拟合训练数据的分布情况。在卷积神经网络中,有人实验得到,深度比广度更重要。

然而随着神经网络的加深,需要学习的参数也会随之增加,这样就会更容易导致过拟合,当数据集较小的时候,过多的参数会拟合数据集的所有特点,而非数据之间的共性。那什么是过拟合呢,之前的博客有提到,指的就是神经网络可以高度拟合训练数据的分布情况,但是对于测试数据来说准确率很低,缺乏泛化能力。

因此在这种情况下,为了防止过拟合现象,数据增强应运而生。当然除了数据增强,还有正则项/dropout等方式可以防止过拟合。那接下来讨论下常见的数据增强方法。

1)随机旋转
随机旋转一般情况下是对输入图像随机旋转[0,360)
2)随机裁剪
随机裁剪是对输入图像随机切割掉一部分
3)色彩抖动
色彩抖动指的是在颜色空间如RGB中,每个通道随机抖动一定的程度。在实际的使用中,该方法不常用,在很多场景下反而会使实验结果变差
4)高斯噪声
是指在图像中随机加入少量的噪声。该方法对防止过拟合比较有效,这会让神经网络不能拟合输入图像的所有特征
5)水平翻转
6)竖直翻转

随机裁剪/随机旋转/水平反转/竖直反转都是为了增加图像的多样性。并且在某些算法中,如faster RCNN中,自带了图像的翻转。

另外一个有意思的事情,在实验中我们发现,一个小数据集通过数据增强方法后,loss和accuracy反而都增加了。这可能对于初学者来说比较困惑,因为同样的网络结构可以拟合一个较大的数据集,却不能拟合一个小的数据集。有人给出了解释说,因为经过了数据增强后,dataset更容易学习了,所以虽然迭代次数一致,但是大的数据集更容易学习到收敛,小的数据集学的要慢一些。如果增加迭代次数,两者都将达到一个很高的拟合程度。还有人说,这是因为加入了正则项的原因,导致小的数据集不能过拟合了。无论怎样,这都是一个有趣的现象。

在训练时,我们还发现,当batchsize不变时,经过了数据增强后的数据集容易造成更大的波动。这主要是因为,如果数据增强是把1张图片变成5张,batchsize都为5,那么在validation的时候,小数据集每个batchsize的5张图片都不同,因此全部错误的概率很低,但是经过了数据增强后的数据集,有很大可能5张图片来自于同一张或同两张原始图片,因此可能要对都对,要错都错,这也就是为什么会波动很大的原因。因此,或许我们可以对经过数据增强后的数据集训练的batchsize也增大同样的倍数。

猜你喜欢

转载自blog.csdn.net/lanmengyiyu/article/details/79658545