数据增强之mixup论文笔记

                                                数据增强之mixup论文笔记

一、前言

深度学习一直以来存在计算量大(落地困难)和模型过拟合的问题。为了解决过拟合问题,从模型本身和数据这两个方面着手,提出了很多有效的方法。

数据增强(Data Argumentation)则是从数据层面解决过拟合,提高模型的泛化性(generalization),通用的数据增强方法有:随机裁切、翻转(左右上下)、颜色抖动(color jitter)、噪声(高斯噪声)、旋转、 平移、缩放、仿射变换和PCA jitter等等。

比较简单地理解是数据增强首先增大了训练集规模,进一步增加了训练样本的多样性(模拟真实场景中样本可能的状态),由于数据增强是对训练样本的各种有章法的变换,这就使得模型能够学到数据更加本质的特征,增强模型对样本细微变换的适应性(减弱对变化的敏感性)。

二、mixup数据增强

论文《mixup:BEYOND EMPIRICAL RISK MINIMIZATION》则提出了一种简单明快的数据增强方法mixup,论文中试验也非常清晰地证明其有效性。

1)贡献(创新点):mixup采用对不同类别之间进行建模的方式实现数据增强,而通用数据增强方法则是针对同一类做变换。思路非常简单:

 

从训练样本中随机抽取两个样本进行简单的随机加权求和,同时样本的标签也对应加权求和,然后预测结果与加权求和之后的标签求损失,在反向求导更新参数。

代码实现也比较简单:

这是论文中给出的代码,比较好理解。但是最后官方给出实现上还是有一些变动,输入网络的训练样本mixup操作的代码:

Github:https://github.com/hongyi-zhang/mixup

并不是同时取出两个batch,而是取一个batch,并将该batch中的样本ID顺序打乱(shuffle),然后再进行加权求和。而最后损失函数则是输出的预测值对这两组标签分别求损失,然后用之前样本所有的权重加权求和,反向求导更新参数。流程如下:

论文也给出了解释:单个Dataloader与两个是等效的,论文的试验也证明了这一点。

注意到这个权重是怎么来的呢?作者假设权重符合Beta分布,Beta分布是概率的概率分布,Beta分布有两个参数  ,  代码默认设置为1.0,并且设置  , 由于Beta分布的期望为  ,如果 ,则期望为0.5。在作者多组实验中,无论如何设置 的值,期望始终为0.5。可不可以这样理解:权重在每个batch都会随机产生,在整个训练过程中会有N个batch,权重在N次中期望近似为0.5。 Beta分布函数 图像如下,

2)试验效果距离

分类效果看起来非常显著啊,之前通用数据增强一起混用可能也就提升一点,这个一个打十个;作者也在生成模型GAN上做了实验,同样也有不俗的表现。

3)作者知乎答疑:

https://www.zhihu.com/question/67472285/answer/256651581

三、总结

   采用了mixup数据增强之后,可以看到至始至终参与模型训练的样本是真实样本线性插值的得到的,而并非直接是像经验风险最小化(Empirical Risk Minimization , ERM))训练中的真实样本。

论文《DATA AUGMENTATION BY PAIRING SAMPLES FOR IMAGES CLASSIFICATION》(https://arxiv.org/abs/1801.02929v2)。

和mixup有相同的思路(异曲同工),只是实现上个人感觉更加偏trick一些,该论文对训练集中成对图像像素相加求平均操作,损失函数和标签不变

训练过程中:

1)首先仅仅用普通的数据增强(如随机裁剪和左右镜像)训练(无SamplePairing data augmentation)。

2)在没有SamplePairing情况下训练1个epoch或100个epoch之后,开启SamplePairing,即对成对样本求均值。

3)间歇性开启与关闭SamplePairing,直到训练稳定以后关闭SamplePairing,用普通数据增强进行funtune训练,微调模型。

 

论文《Bag of Freebies for Training Object Detection Neural Networks》中奖mixup应用在目标检测算法上,同样效果也很好。

  

猜你喜欢

转载自blog.csdn.net/ouyangfushu/article/details/87866579