Fast AutoAugment阅读笔记

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 \(\tau\) 都是由\(N_\tau\)的policy 组成,可以表示为

image

每个policy都包含其应用的概率\(p\)以及对应的幅度\(\lambda\). 作者说他最终搜到的policy \(\mathcal{T}\) 是由\(N_\mathcal{T}\)个subpolicy组成,以及在数据集\(D\)上的应用\(\mathcal{T}\)中的每一个subpolicy \(\tau \in \mathcal{T}\)得到一系列增强之后的图片记为

\[\mathcal{T}(D) = \cup_{\tau \in \mathcal{T}}\{(\tau(x), y):(x, y)\in D\} \]

作者说他的搜索空间和之前的算法是类似的,只不过作者的概率\(p\)和幅度\(\lambda\)是在\([0, 1]\)区间的连续值,这种比离散的搜索具有更多的可能性。

搜索策略

作者将对augmentation policy的搜索定义为对一个pair的train dataset上的稠密匹配。假设 \(\mathcal{D}\)是一个 \(\mathcal{X}\times\mathcal{Y}\)可能的分布,以及数据集\(D\)从该分布中采样。对于一个给定的分类模型\(\mathcal{M}(\cdot|\theta):\mathcal{X}\rarr\mathcal{Y}\)其参数为\(\theta\), 则模型\(\mathcal{M}(\cdot|\theta)\)在数据集\(D\)上的期望精度和期望loss可以分别表示为\(\mathcal{R}(\theta|D)\)\(\mathcal{L}(\theta|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}\),作者定义以下目标函数来得到一系列学习到的增强策略

\[\mathcal{T}_* = \arg \max _{\mathcal{T}} \mathcal{R(\theta^*|\mathcal{T}(D_\mathcal{A}))} \]

其中模型参数\(\theta^*\)在数据集\(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}\)上,不使用任何数据增强策略来训练模型的参数\(\theta\)(from scratch)。

和之前的方法相反,作者的方法不一定将给定的网络简化为子模型(child models)或proxy任务。

得到训练参数之后,对每一个step\(1 \leq t\leq T\), 作者探索了\(B\)个候选的policies \(\mathcal{B}=\{\mathcal{T}_1, ..., \mathcal{T}_B\}\)。探索\(B\)个候选的policy是通过bayes优化来获得,具体的步骤如下:从搜索空间\(\mathcal{S}\)中重复的采样一系列的sub-policies,然后构建一个policy \(\mathcal{T}=\{\tau_1, ..., \tau_{N_\tau}\}\),然后来调节对应的应用概率\(\{p_1, ..., p_{N_{\tau}}\}\)和幅度\(\{\lambda_1, ..., \lambda_{N_\tau}\}\)来使得期望的loss \(\mathcal{L}(\theta|\cdot)\)在增强之后的数据集上\(\mathcal{T}(D_\mathcal{A})\)最小。

上述方法作者如果并没有训练模型的参数的情况下,好像确实是和固定权重来搜索ISP的参数是比较像的。

值得注意的是,在expoloration-and-exploitation的过程中,作者提出的方法并不再从头训练模型的参数,所以提出的方法是快于AutoAugment的。

之后对于bayes优化之后的\(\mathcal{B}\)个policies,作者选取了top-N个,将其merge到最终的增强集合之中。搜索完毕之后,作者从头开始训练网络的参数\(\theta\),并且对于所有的训练数据都采用搜索之后的策略。

整体算法如下

image

通过贝叶斯优化来探索策略(policy exploration)

作者使用了如下的期望改善评价标准(Expected Improvement(EI) criterion)

\[EI(\mathcal{T}) = \mathbb{E}[\min (\mathcal{L}(\theta|\mathcal{T}(D_\mathcal{A}))-\mathcal{L}^*, 0)] \]

并且作者说这个算法已经在tree structured parzen(TPE)中进行实现,并且可以使用HyperOpt这个库。

实验部分

作者说他follow AA的算法设置,比如每个sub-policy包含两个operation,每个policy包含5个subpolicy这样,以及搜索空间包含16个operation。不过从作者设定的算法来看,最后会有一个policy池(集合并集),实验的时候会从里面选,如下图作者做的选取的sub-policy的数量对实验结果的影响如下图

image

如下是和其他方法的对比

image

image

posted on 2021-05-26 14:06  YongjieShi  阅读(549)  评论(0编辑  收藏  举报

导航