深度学习模型是出了名的数据饥渴。你能喂给它们越多高质量的标记数据,它们的表现就越好。但当你无法收集更多数据时,该怎么办呢?你就得发挥创意了。
多年来,最常用的技术一直是数据增强: 利用现有图像,创建出略有修改的新版本——翻转、旋转、偏移颜色——从而免费扩充你的数据集。
这种方法效果显著。它教会模型哪些特征是真正重要的,哪些只是特定图像的偶然产物。无论猫在画面的左边还是右边,它仍然是猫。这种不变性——即知道哪些变化不会改变标签——是构建鲁棒模型的关键。
然而,这里有一个问题。标准的数据增强方法——随机裁剪、水平翻转和颜色抖动——很大程度上是一种“一刀切”的解决方案,是经过多年实验手动精心调整出来的。对像 CIFAR-10 这样的自然图像数据集有效的方法,可能完全不适用于像 MNIST 这样的手写数字数据集。 (把一个“6”上下颠倒就变成了“9”!) 手动设计增强方法耗时、依赖特定数据集,而且很少能达到最优。
这就引出了一个有趣的问题:** 我们能否让算法为给定的数据集学习出最佳的数据增强策略,而不是依赖人类的直觉?**
谷歌大脑的一组研究人员在他们的论文 《AutoAugment: 从数据中学习增强策略》 中回答了这个问题。他们开发了一种方法,可以自动搜索最优的增强策略,在包括 CIFAR-10、SVHN 和 ImageNet 在内的顶级计算机视觉基准测试中取得了最先进的结果。
在本文中,我们将探讨 AutoAugment 的工作原理,审视它发现的那些出人意料地有效 (有时甚至有些奇怪) 的增强策略,并展望未来,届时机器学习流程的每一个环节都可以实现自动化。
手工设计增强方法的问题
在深入了解 AutoAugment 的解决方案之前,让我们先分析一下为什么手工设计增强方法是一个难题。当手动设计一个增强流程时,你必须决定:
- **我应该使用哪些操作? **(旋转、剪切、颜色偏移、对比度变化……?)
- **我应该按什么顺序应用它们? **(先旋转后剪切与先剪切后旋转的效果是否不同?)
- **我应该以多大的强度应用它们? **(旋转 5° 还是 25°?)
- **我应该以多大的概率应用它们? **(是应该旋转每一张图片,还是只旋转其中的 30%?)
为单个数据集回答这些问题需要繁琐的试错。已经实现了网络架构设计自动化的 AutoML 的兴起表明,我们可以做得更好。如果架构可以被学习,为什么增强策略不行呢?
AutoAugment 的工作原理: 搜索完美策略
AutoAugment 的核心思想是将寻找最佳增强策略的过程构建为一个搜索问题。它有两个主要组成部分: 一个提出候选策略的搜索算法,以及一个定义所有可能性的搜索空间。
整个过程如下图所示,在一个强化学习循环中运行:
- 一个控制器 (一个 RNN) 采样一个增强策略。
- 一个**子模型 **(一个标准的神经网络) 使用该策略增强的数据进行训练。
- 测量子模型的验证准确率——这就是奖励。
- 奖励被反馈给控制器以更新它,使得好的策略在未来更有可能被采样到。
这个循环重复数千次,从而逐步改进策略。
图 1. AutoAugment 的强化学习循环概览。控制器采样一个策略,训练一个子网络,评估其准确率,并使用该奖励来改进未来的策略。
搜索空间: 定义一个增强“策略”
搜索空间的结构非常丰富。一个最终的策略由 25 个子策略组成。在训练期间,对于批次中的每一张图像,都会随机选择其中一个子策略。
一个子策略包含两个按顺序应用的操作 (例如,先旋转后反色) 。每个操作有两个参数:
- 概率 — 它被应用的频率 (0% 到 100%) 。
- 幅度 — 操作的强度 (例如,旋转的角度,被离散化为 10 个级别) 。
可供选择的操作涵盖了 Python 图像库 (PIL) 中的 16 种变换,外加两种高级技术 (Cutout
和 SamplePairing
) :
- 几何变换:
ShearX/Y
,TranslateX/Y
,Rotate
- 颜色变换:
AutoContrast
,Invert
,Equalize
,Solarize
,Posterize
,Contrast
,Color
,Brightness
,Sharpness
- 其他:
Cutout
,SamplePairing
子策略示例:
- 以 90% 的概率应用
ShearX
,幅度为 7 - 接着以 20% 的概率应用
Invert
,幅度为 3
总的搜索空间是巨大的。寻找一个包含两个操作的子策略:
五个子策略:
这需要一个智能的搜索算法。
搜索算法: 由强化学习驱动的控制器
研究人员使用一个 RNN 控制器来探索这个搜索空间。它按顺序预测一个策略的所有组成部分: 所有 5 个子策略中每个位置的操作类型、概率和幅度。
训练使用近端策略优化 (PPO) ——一种策略梯度方法。获得高奖励的策略权重会增加,因此它们被采样的可能性更大;而表现差的策略则变得不太可能被采样。
在大约采样了 15,000 个策略后,收集其中最好的 5 个。它们的子策略被组合成一个包含 25 个子策略的稳健最终策略,用于从头开始训练大型模型。
实验与结果: 它奏效了吗?
AutoAugment 在 CIFAR-10、CIFAR-100、SVHN 和 ImageNet 上进行了测试。
由于在大型数据集上进行全面搜索的成本太高,搜索是在缩减的子集上进行的 (例如,为 CIFAR-10 使用 4,000 张图像) ,然后将学到的策略应用到完整的数据集上。
CIFAR-10 和 CIFAR-100
标准的 CIFAR-10 增强方法包括翻转、填充/裁剪,有时还包括 Cutout
。AutoAugment 是在这些方法之上应用的。
结果非常亮眼。在各种架构上,AutoAugment 都带来了提升,其中 PyramidNet+ShakeDrop 达到了 1.5% 的错误率——击败了之前 2.1% 的最佳记录。
图 2. AutoAugment 在 CIFAR 和 SVHN 上相对于基线和 Cutout 的改进。数值越低越好。
对于 CIFAR-10,学到的策略更偏爱基于颜色的变换 (Equalize
、AutoContrast
、Color
) ,而不是几何变换,并且很少使用 Invert
。
SVHN (街景门牌号)
SVHN 图像与 CIFAR-10 差异很大。AutoAugment 为 SVHN 学到的策略主要由几何操作 (ShearX/Y
、Rotate
) 和与颜色无关的 Invert
主导。
这符合直觉——门牌号经常是倾斜或旋转的;它们的颜色并不重要。
图 3. 一个成功的 SVHN 策略,具有强烈的几何增强和反色操作。
这带来了 1.0% 的 SOTA 错误率。
ImageNet: 终极基准测试
在缩减版的 ImageNet (120 个类别,6,000 张图像) 上,学到的策略侧重于颜色变换,并频繁使用 Rotate
。
图 4. 一个在缩减版 ImageNet 上表现优异的策略,重点在于颜色变换和适量旋转操作。
当应用到完整的 ImageNet 时,它将 ResNet-50 的 Top-1 准确率提升了 +1.3%,并将 AmoebaNet-C 推向了创纪录的 83.5% Top-1 准确率。
图 5. AutoAugment 与 Inception 风格预处理的对比。在多个强大架构上均有提升。
可迁移性: 策略的迁移能力
运行搜索的成本很高。那么,学到的策略可以迁移吗?团队将在 ImageNet 上学到的策略不做任何修改地应用到五个较小的细粒度视觉分类数据集 (例如 Stanford Cars、Oxford Flowers) 。
结果非常出色: 在每个数据集上的错误率都下降了。在 Stanford Cars 数据集上,AutoAugment 达到了 5.2% 的错误率——低于之前使用预训练 ImageNet 权重的最佳结果。
图 6. AutoAugment-transfer 结果: 直接将 ImageNet 策略应用到其他数据集上带来了显著提升。
这表明,在 ImageNet 上学到的策略捕捉到了对自然图像普遍有用的增强方法。从业者可以直接采用它来获得免费的性能提升。
消融实验: 搜索真的重要吗?
随机的增强方法能否表现得同样出色?团队测试了:
- 随机策略: 随机采样策略比基线有所提升,但比 AutoAugment 差 (CIFAR-10 错误率为 3.0% vs. 2.6%) 。
- 随机参数: 将学到的策略中的概率/幅度随机化会降低性能,这表明这些参数是经过有意义的调整的。
更多的子策略通常能提升性能,但在 20–40 个子策略左右趋于平稳。
图 7. 子策略数量的影响: 多样性在一定程度上提高了验证准确率。
结论: 自动化数据增强
AutoAugment 是 AutoML 领域的一大飞跃,使增强设计成为一个可学习、可优化的过程。
关键要点:
- 自动化行之有效: 学到的增强策略优于人工设计的策略。
- 针对特定数据集的策略: AutoAugment 能发现为每个数据集量身定制的增强方法。
- 可迁移性: 从大型、多样化的数据集中学到的策略可以提升在其他数据集上的性能。
- 数据至关重要: 数据处理与模型架构同等关键。
通过将数据增强变成一个可学习的组件,AutoAugment 创造了新的纪录,并为自动化更多机器学习流程打开了大门。这是迈向能够学习如何学习的模型的激动人心的一步。