自动化数据增强方法综述笔记

今天整理了近期读过的几篇自动化数据增强论文,把思路和实验结果记录下来。

AutoAugment:用强化学习搜索增强策略

论文:AutoAugment: Learning Augmentation Policies from Data

这篇工作的核心思路是用 RNN 做策略控制器,配合强化学习来优化数据增强的采样概率。具体流程是:控制器采样出一组数据增强策略,用这组策略训练子模型,再把子模型在验证集上得到的 accuracy 作为 reward 反馈给控制器,不断迭代搜索。可以说是典型的 RNN 大力出奇迹的路子。

AutoAugment 框架:RNN 控制器采样增强策略 S,训练子网络得到验证集精度 R,再用 R 通过策略梯度更新控制器,循环迭代
图 1:AutoAugment 的搜索框架。RNN 控制器采样出增强策略 S(操作类型、概率、强度),用固定架构的子网络训练到收敛得到验证精度 R,再以 R 为 reward 通过策略梯度更新控制器,使其逐步生成更优策略。
DatasetGPU hoursBest published resultsOur results
CIFAR-1050002.11.5
CIFAR-100012.210.7
SVHN10001.31.0
Stanford Cars05.95.2
ImageNet150003.93.5

实验结果方面,ImageNet 上报的是 top-5 精度,其他数据集用的是 top-1,对比时要注意区分。

RandAugment:大幅压缩搜索空间

论文:RandAugment: Practical automated data augmentation with a reduced search space

AutoAugment 搜索代价太高,这篇工作的做法更直接:不再搜索每种变换的具体概率,而是只用两个全局超参数——增强操作的个数 N 和变换强度 M,然后在候选变换集合里随机选取 N 种依次应用。搜索空间一下子从数量级上缩小了很多。

transforms = [
    'Identity', 'AutoContrast', 'Equalize',
    'Rotate', 'Solarize', 'Color', 'Posterize',
    'Contrast', 'Brightness', 'Sharpness',
    'ShearX', 'ShearY', 'TranslateX', 'TranslateY']


def randaugment(N, M):
    """Generate a set of distortions.

    Args:
      N: Number of augmentation transformations to
          apply sequentially.
      M: Magnitude for all the transformations.
    """

    sampled_ops = np.random.choice(transforms, N)
    return [(op, M) for op in sampled_ops]

从实验结果看,Random Augmentation 最终也能收敛到很好的精度,与 AutoAugment 的差距相当小,而计算成本低得多。

MethodSearch spaceCIFAR-10 PyramidNetSVHN WRNImageNet ResNetImageNet E. Net-B7
Baseline097.398.576.384.0
AA103210^{32}98.598.977.684.4
Fast AA103210^{32}98.398.877.6-
PBA106110^{61}98.598.9--
RA (ours)10210^{2}98.599.077.685.0
Dataset / ModelBaselinePBAFast AAAARA
CIFAR-10 · Wide-ResNet-28-294.9--95.995.8
CIFAR-10 · Wide-ResNet-28-1096.197.497.397.497.3
CIFAR-10 · Shake-Shake97.198.098.098.098.0
CIFAR-10 · PyramidNet97.398.598.398.598.5
CIFAR-100 · Wide-ResNet-28-275.4--78.578.3
CIFAR-100 · Wide-ResNet-28-1081.283.382.782.983.3
SVHN (core set) · Wide-ResNet-28-296.7--98.098.3
SVHN (core set) · Wide-ResNet-28-1096.9--98.198.3
SVHN · Wide-ResNet-28-298.2--98.798.7
SVHN · Wide-ResNet-28-1098.598.998.898.999.0

Fast AutoAugment:策略合并加速搜索

论文:Fast AutoAugment

这篇的思路是:先搜索出 N 组各自效果不错的数据增强子策略,然后把它们直接合并(merge)成一个大策略集合用于训练。相比 AutoAugment 的端到端强化学习搜索,搜索效率有明显提升。

Algorithm 1: Fast AutoAugment
Input: (θ, D_train, K, T, B, N)

1: Split D_train into K-fold data D_train^(k) = {(D_M^(k), D_A^(k))}   // stratified shuffling
2: for k ∈ {1, ..., K} do
3:     T*^(k) ← ∅,  (D_M, D_A) ← (D_M^(k), D_A^(k))                    // initialize
4:     Train θ on D_M
5:     for t ∈ {0, ..., T-1} do
6:         B ← BayesOptim(T, L(θ | T(D_A)), B)                        // explore-and-exploit
7:         T_t ← Select top-N policies in B
8:         T*^(k) ← T*^(k) ∪ T_t                                      // merge augmentation policies
9: return T* = ⋃_k T*^(k)

小结

三篇工作的脉络比较清晰:AutoAugment 证明了自动搜索增强策略的可行性,但搜索代价极高;Fast AutoAugment 在搜索效率上做了改进,用合并多组候选策略的方式降低开销;RandAugment 则走了另一条路,直接把搜索空间压到极简,用随机抽取加两个超参数的方式,在实用性和最终精度之间取得了不错的平衡。今天还顺带整理了模型压缩的实验结果,并尝试修改 ResNet-18 来适配 Apollon 数据集,具体结果后续再记。