自动化数据增强方法综述笔记
今天整理了近期读过的几篇自动化数据增强论文,把思路和实验结果记录下来。
AutoAugment:用强化学习搜索增强策略
论文:AutoAugment: Learning Augmentation Policies from Data
这篇工作的核心思路是用 RNN 做策略控制器,配合强化学习来优化数据增强的采样概率。具体流程是:控制器采样出一组数据增强策略,用这组策略训练子模型,再把子模型在验证集上得到的 accuracy 作为 reward 反馈给控制器,不断迭代搜索。可以说是典型的 RNN 大力出奇迹的路子。

| Dataset | GPU hours | Best published results | Our results |
|---|---|---|---|
| CIFAR-10 | 5000 | 2.1 | 1.5 |
| CIFAR-100 | 0 | 12.2 | 10.7 |
| SVHN | 1000 | 1.3 | 1.0 |
| Stanford Cars | 0 | 5.9 | 5.2 |
| ImageNet | 15000 | 3.9 | 3.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 的差距相当小,而计算成本低得多。
| Method | Search space | CIFAR-10 PyramidNet | SVHN WRN | ImageNet ResNet | ImageNet E. Net-B7 |
|---|---|---|---|---|---|
| Baseline | 0 | 97.3 | 98.5 | 76.3 | 84.0 |
| AA | 98.5 | 98.9 | 77.6 | 84.4 | |
| Fast AA | 98.3 | 98.8 | 77.6 | - | |
| PBA | 98.5 | 98.9 | - | - | |
| RA (ours) | 98.5 | 99.0 | 77.6 | 85.0 |
| Dataset / Model | Baseline | PBA | Fast AA | AA | RA |
|---|---|---|---|---|---|
| CIFAR-10 · Wide-ResNet-28-2 | 94.9 | - | - | 95.9 | 95.8 |
| CIFAR-10 · Wide-ResNet-28-10 | 96.1 | 97.4 | 97.3 | 97.4 | 97.3 |
| CIFAR-10 · Shake-Shake | 97.1 | 98.0 | 98.0 | 98.0 | 98.0 |
| CIFAR-10 · PyramidNet | 97.3 | 98.5 | 98.3 | 98.5 | 98.5 |
| CIFAR-100 · Wide-ResNet-28-2 | 75.4 | - | - | 78.5 | 78.3 |
| CIFAR-100 · Wide-ResNet-28-10 | 81.2 | 83.3 | 82.7 | 82.9 | 83.3 |
| SVHN (core set) · Wide-ResNet-28-2 | 96.7 | - | - | 98.0 | 98.3 |
| SVHN (core set) · Wide-ResNet-28-10 | 96.9 | - | - | 98.1 | 98.3 |
| SVHN · Wide-ResNet-28-2 | 98.2 | - | - | 98.7 | 98.7 |
| SVHN · Wide-ResNet-28-10 | 98.5 | 98.9 | 98.8 | 98.9 | 99.0 |
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 数据集,具体结果后续再记。