深度学习的数据增强

计算机视觉中的图像增强,是人为的为视觉不变性(语义不变)引入了先验知识。数据增强也基本上成了提高模型性能的最简单、直接的方法了。而数据增强后的网络性能为什么会变好呢?

学习了某些不变性?

首先增强的样本和原来的样本是由强相关性的裁剪、翻转、旋转、缩放、扭曲等几何变换,还有像素扰动、添加噪声、光照调节、对比度调节、样本加和或插值、分割补丁等,另外还有一些用强化学习做数据增强的,这里就不穷举了)。即我们强制网络学习了某些样本变换方式,而如果这些变换方式使得网络的性能有所提升,那么,可以简单的认为网络在之前并没有学到相关的变换,或者学的并不全面。而如果通过某些简单的操作,提高了最终性能,这说明网络可能并没有我们想象的那种方式去拟合数据,比如简单的平移不变性。即,如果我们通过简单的裁剪、平移提高了模型的性能(显著?),那么,恰恰说明网络可能并没有完全学习到平移不变性。

再者,在一些对抗样本的研究中,CNN对图像中某些稍微的扰动,就可能导致致命的分类错误,这在某种程度上说明了CNN其实是非常敏感的,更别提各种变换了。CNN目前来说对平移不变性支持的最好,也就是CNN的分类结果和样本中的目标物体位置无关。这是假设CNN学习了很好的形状(全局)特征,而一些研究表明,**CNN其实只学习了某些图像的纹理特征,**如果一张图像中包含了足够多的纹理特征的话,其实CNN就不去管形状了,这在某些方面,也可以说是某种平移不变性,而对于真正的包含目标物体的形状的平移不变性,还有待考量。如果CNN真的具有平移不变性(目标位置无关性),或许,CNN就能捕捉某些长距依赖性,而其实CNN的长距依赖性目前对具体任务来说还不够好,但从分类任务来说或许够了。或许可以说,CNN具有某种程度的平移不变性。

学习了某种正则化?

我们知道,数据增强其实是可以带来某种正则化(Regularization)作用的,这样就可以减小模型的结构风险。或者可以说,数据增强能否提高模型的鲁棒性?鲁棒性的另一面就是降低决策对模型参数的敏感度。我们用 condition number(输入的微小变化会输出造成的变化的大小)来定义模型参数的敏感度,那么,好的正则化可以降低 condition number。我们在网络模型中使用的 L2 范数就是通过减少模型参数的差距,而降低了其 condition number,从而达到了正则化的效果。而数据增强是如何提高模型的正则化效果的?数据增强在某方面使得模型更集中地观测那些数据总的普遍模式,而消除了某些和普遍模式无关的数据。

我们也可以思考另一个问题,我们假设网络在多项式时间内可以找到局部极小值点,那么, 我们想知道局部极小值点和样本分布有关系吗? 即不同的样本分布会导致网络学习到不同的极小值点吗?与之相对应的一个问题是:假如用SGD训练网络,不同的采样方式,会导致不同的极小值点吗?或者说网络极小值点具有某种动态性吗?假如一个大的盆地里有很多的极小值点,不同的采样方式(增强方式)会不会导致极小值点的跳动

回答这一系列问题,参考分布式机器学习中的算法或许是个不错的选择。我们假设在分布式机器学习中,大规模的数据集被分散到各个机器上,也就是每个节点之间的数据可能都不一样,我们使用参数服务器集成的方式来训练分布式机器学习模型,通过几轮的SGD迭代,不同节点上的参数被集成到参数服务器上,然后再拷贝到各个节点上继续训练。研究发现,通过分散的数据集和每次集成不同的模型参数,模型的性能是稳步提升的,而非出现严重的抖动!每次从相同的初始点出发,通过不同的数据样本训练,最后再集成回来,网络性能并没有明显的下降!甚至还提高了网络性能!这说明网络对参数的不同范围扰动,或者说样本的划分是具有很好的鲁棒性的。

一个重要的问题

想象一下,我们为什么不把样本复制一遍(数据增强),来训练网络呢?我们可能会回答:数据增强一定是让样本丢掉些什么,然后保留些什么。或许,我们的研究目的可以变成让样本丢掉些什么,保留些什么呢?

在不知道它是怎样学习或者学习什么的情况下,让它多学一点吧,有没有好处不知道,但至少没坏处吧?但可能引入了经验风险,即增强后的数据分布和原样本或测试样本的分布不一致的时候,可能会带来负面影响。例如,我们假设在样本中添加一定的噪声扰动来当作数据增强,考虑一种极端的情况,将噪声调到很大,大到让样本面目全非(丢掉语义),这时候,拿这些样本去训练,可能带来很大的负面影响。当然,这是个极端的例子。我们可以找到另一个例子,即对手写字体识别的样本进行水平翻转,然后用正常的样本来测试,我们可能会发现性能降低了,这是因为增强后的样本分布和测试集里的样本分布差距太大,以致于对模型的学习起到了负面的效果。

这里,我们考虑一个问题,原数据集和增强后的数据集的差距有多大? 因为我们在训练过程中保证一定的几率使用原始数据,这样保证了原数据集是增强后集合的子集,只要训练轮数充足,网络无非是多学了某些样本,这对网络来说并非坏事。如果不是的话,发现那些样本对网络的训练有坏处,或许是件有趣的事情。难学习的样本(hard sample)对分类决策面的决定十分重要,如果将这些样本通过数据增强发掘出来,或许对泛化能力很有帮助。严格来说,增强后的样本和原来的样本有很强的关系。我们希望增强后的数据集是原来整体样本分布的子分布,至少它们的交集中包含原来的数据集,从这方面讲,我们或许稍微扩展了原数据集的样本分布空间,使得网络捕捉到了一些额外的信息。我们把增强后的数据集包含原有数据集的假设称为增强保证性假设,也就是在增强保证性假设下训练的网络一定能够提高泛化能力。

**增强保证性假设:数据增强需要保证变换后的样本和原样本的主要特征保持一致,还要保证增强后的数据分布和原样本的数据分布基本一致。**可以简单的理解为保证增强前后的语义一致性,以保证模型学习到样本中的普遍模式(common pattern)。

我们再考虑另一个问题,我们只是使用了增强的数据来训练模型,并没有用增强后的数据来测试模型。这里我们可以用一个数据增强、非增强,分别在训练和测试时做一个排列组合,一共四种情况。对于训练过程引入的数据增强:

在这里插入图片描述

对号代表使用数据增强,叉号代表不使用
最后两种方式一般不用在网络的模型训练中,但可以测试出数据增强对网络性能带来的增益,以及引入的经验风险(有些数据增强方法产生的图像可能并不出现在现实场景中),当然还可以测试出网络是否真的学会了某种视觉不变性(对比第三种和第四种数据增强方法)。

这里又回到了那个古老的问题:测试集是否能代替真实的样本分布?或者说换一组测试集是否可以得到相同的精度?这里,我们假设是,在实际中这也是可行的。


原文链接https://zhuanlan.zhihu.com/p/84604045
侵权请联系删除!

猜你喜欢

转载自blog.csdn.net/weixin_42535423/article/details/108024743