数据集处理方法之数据增强

提出问题

我们常常会遇到数据不足的情况。比如,你遇到的一个任务,目前只有小几百的数据,然而,你知道目前现在流行的最先进的神经网络都是成千上万的图片数据。一般而言,大的数据集是效果好的保证。那么如何使用小数据集合来训练出我们想要的结果呢?

分析问题

当训练一个机器学习mode时候,我们真正做的就是调参以便它能将输入(比如图片)映射到输出(比如标签)。我们优化目标是追求我们模型损失较低的最佳点,当参数以正确的方式调整时就会发生这种情况。
最领先的神经网络有着数百万的参数!
显然,如果你有很多参数,你需要给你的模型足够比例的样本。同样,你需要的参数的个数与你任务的复杂度成比例。
那么我们如何时小样本来得到足够的参数进行训练呢?
其实,为了获得更多的数据,我们只要对现有的数据集进行微小的改变。比如旋转(flips)、移位(translations)、旋转(rotations)等微小的改变。因为我们的网络在开始时,或者说一些欠训练的神经网络会认为这是不同的图片。
数据集处理方法之数据增强_第1张图片
一个卷积神经网络,如果能够对物体即使它放在不同的地方也能稳健的分类,就被称为具有不变性的属性。更具体的,CNN可以对移位(translation)、视角(viewpoint)、大小(size)、照明(illumination)(或者以上的组合)具有不变性。
这本质上是数据增强的前提。

存在的问题

我们通过对图像的变形,移位等操作来增加数据量的同时,也会产生一些问题。
数据集处理方法之数据增强_第2张图片
如我们在使用上述数据集完成模型训练后使用下图进行测试,结果却显示该车与上车一致,这可能是因为我们的模型在学习的过程中认为方向是一个很重要的特征,要知道:你的神经网络会与你喂给它的数据质量一样好或坏
要解决这个问题,我们可以从沿着水平方向翻转图片以便它们都朝着反方向,**我们不得不减少数据集中不相关的特征**
数据集处理方法之数据增强_第3张图片

引入数据增强

这便引出了数据增强的概念,一种是事先执行所有转换,实质上会增强你的数据集的大小。另一种选项是在送入机器学习之前,在小批量(mini-batch)上执行这些转换。

  1. 第一个选项叫做线下增强(offline augmentation)。这种方法适用于较小的数据集(smaller dataset)。你最终会增加一定的倍数的数据集,这个倍数等于你转换的个数。比如我要翻转我的所有图片,我的数据集相当于乘以2。
  2. 第二种方法叫做线上增强(online augmentation)或在飞行中增强(augmentation on the fly)。这种方法更适用于较大的数据集(larger
    datasets),因为你无法承受爆炸性增加的规模。另外,你会在喂入模型之前进行小批量的转换。一些机器学习框架支持在线增强,可以再gpu上加速。
    常见方法有:
    翻转,旋转,缩放比例,剪切,移位,高斯噪声等等。

你可能感兴趣的:(深度学习,机器学习,人工智能,深度学习)