Fast AutoAugment
作者说他提出一种基于稠密匹配的快速的AA方法。这种方法不需要子模型(child model)的重新训练。这种方法通过最大化匹配augmentated split和另外一个unaugmented split的分布来搜索增强的策略。
在这篇文章中,作者提出的方法学习一种增强策略,并且将augmentated data作为一个训练数据的missing data来改善网络的泛化能力。想要实现这个目的,作者使用了一个efficient density matching algorithm。这种方法对网络的训练和每一个policy的评估,不需要任何的反向传播。
作者提出的方法
作者将之前的方法归为两类,一类是利用GAN啥的直接产生数据,另外一类是利用搜索的算法去搜索预先定义的operation
PBA提出了一种新的based on population based training产生augmentation policy的策略的方法,作者的方法和PBA类似,作者使用了超参优化来寻找一个最优的策略,只不过实际实现的时候用的是Tree-structured parzen estimator(TPE).
搜索空间
和AA类似,每一个subpolicy ( au) 都是由(N_ au)的policy 组成,可以表示为
每个policy都包含其应用的概率(p)以及对应的幅度(lambda). 作者说他最终搜到的policy (mathcal{T}) 是由(N_mathcal{T})个subpolicy组成,以及在数据集(D)上的应用(mathcal{T})中的每一个subpolicy ( au in mathcal{T})得到一系列增强之后的图片记为
作者说他的搜索空间和之前的算法是类似的,只不过作者的概率(p)和幅度(lambda)是在([0, 1])区间的连续值,这种比离散的搜索具有更多的可能性。
搜索策略
作者将对augmentation policy的搜索定义为对一个pair的train dataset上的稠密匹配。假设 (mathcal{D})是一个 (mathcal{X} imesmathcal{Y})可能的分布,以及数据集(D)从该分布中采样。对于一个给定的分类模型(mathcal{M}(cdot| heta):mathcal{X} arrmathcal{Y})其参数为( heta), 则模型(mathcal{M}(cdot| heta))在数据集(D)上的期望精度和期望loss可以分别表示为(mathcal{R}( heta|D))和(mathcal{L}( heta|D))。
对于任意给定的(D_{train})和(D_{valid})的一个pair,我们的目标是通过搜索那些能够使得 (D_{train})的密度和增强之后的(D_{valid})的密度匹配的增强策略
For any given pair of (D_{train}) and (D_{valid}), our goal is to improve the generalization ability by searching the augmentation policies that match the density of (D_{train}) with density of augmented (D_{valid}).
对于上面这句话不是特别理解,不应该是增强之后的(D_{train})和(D_{valid})概率密度匹配?通过阅读后文,其实会比较理解这里的说法,实际上作者将(D_{train})给分为两部分,寻找一个变换使得其和原始未增强的数据更像。
然而,对某一个evaluation,通过对每一个candidate policy来比较这两个分布是不切实际的。
因此,作者通过测量一个数据集在多大程度上遵循了另一个数据集的模式,利用模型在两个数据集上的预测来进行这种评估。
细节上来讲,将(D_{train})分成(D_mathcal{M})和(D_{mathcal{A}}),这两个数据集用来学习模型的参数,以及探索增强的策略(mathcal{T}),作者定义以下目标函数来得到一系列学习到的增强策略
其中模型参数( heta^*)在数据集(D_mathcal{M})上进行训练。在这个目标函数中,从使用相同的参数最大限度的提高两个模型的预测性能的角度出发,(mathcal{T_*})近似的最小化(D_mathcal{M})的密度和(mathcal{T}(D_mathcal{A}))的密度之间的距离。
为了达到上述目标,作者提出了一个高效的增强策略搜索方法。首先作者做了(K)-fold的分层洗牌(K-fold stratified shuffling)来将train dataset分为(D_{train}^{(1)}, ..., D_{train}^{(K)}),其中,(D_{train}^{(k)})由两个数据集组成,(D_{mathcal{M}}^{(k)})和(D_{mathcal{A}}^{(k)})。然后作者在(D_mathcal{M})上,不使用任何数据增强策略来训练模型的参数( heta)(from scratch)。
和之前的方法相反,作者的方法不一定将给定的网络简化为子模型(child models)或proxy任务。
得到训练参数之后,对每一个step(1 leq tleq T), 作者探索了(B)个候选的policies (mathcal{B}={mathcal{T}_1, ..., mathcal{T}_B})。探索(B)个候选的policy是通过bayes优化来获得,具体的步骤如下:从搜索空间(mathcal{S})中重复的采样一系列的sub-policies,然后构建一个policy (mathcal{T}={ au_1, ..., au_{N_ au}}),然后来调节对应的应用概率({p_1, ..., p_{N_{ au}}})和幅度({lambda_1, ..., lambda_{N_ au}})来使得期望的loss (mathcal{L}( heta|cdot))在增强之后的数据集上(mathcal{T}(D_mathcal{A}))最小。
上述方法作者如果并没有训练模型的参数的情况下,好像确实是和固定权重来搜索ISP的参数是比较像的。
值得注意的是,在expoloration-and-exploitation的过程中,作者提出的方法并不再从头训练模型的参数,所以提出的方法是快于AutoAugment的。
之后对于bayes优化之后的(mathcal{B})个policies,作者选取了top-N个,将其merge到最终的增强集合之中。搜索完毕之后,作者从头开始训练网络的参数( heta),并且对于所有的训练数据都采用搜索之后的策略。
整体算法如下
通过贝叶斯优化来探索策略(policy exploration)
作者使用了如下的期望改善评价标准(Expected Improvement(EI) criterion)
并且作者说这个算法已经在tree structured parzen(TPE)中进行实现,并且可以使用HyperOpt这个库。
实验部分
作者说他follow AA的算法设置,比如每个sub-policy包含两个operation,每个policy包含5个subpolicy这样,以及搜索空间包含16个operation。不过从作者设定的算法来看,最后会有一个policy池(集合并集),实验的时候会从里面选,如下图作者做的选取的sub-policy的数量对实验结果的影响如下图
如下是和其他方法的对比