跳转至

Big Transfer

介绍

深度学习的强大性能来源于大量任务相关的数据和计算,这些按任务的要求使得新任务非常昂贵。迁移学习提供了一个解决方案,任务特定的数据和计算被预训练阶段取代。在大型通用数据集上对网络进行一次训练,然后将其权重用于初始化后续任务,这些任务可以用更少的数据点和更少的计算来解决。

本文回顾一个简单的范例–在大型的有监督源数据集上进行预训练,然后再目标任务上微调权重。本文回顾了多篇相关工作,并提出一个菜谱,这个菜谱使用极少的花招而又在许多任务上达到了杰出的性能。这个菜谱被称作Big Transfer(BiT)。

本文所提出的BiT泛化性能很强,在下游任务上仅需要很少的训练即可达到令人满意的性能。此外,BiT在新的任务上也不需要繁重的超参数调节。本文提出了一个启发式的方法来设置超参数。

本文在三个数据集上训练了三个不同规模的网络,ImageNet ILSVRC-2012:BiT-S、ImageNet-21k:BiT-M、JFT-300M:BiT-L,并在ImageNet ILSVRC-2012、CIFAR-10/100、Oxford-IIIT Pet、Oxford Flowers-102和VTAB-1k上测试了结果。

Big Transfer

构建一个高效的神经网络所需要的部分有很多,本文从预训练和微调的角度分别讨论了重要的组成部分。

上游预训练

第一个部分是尺度。大规模数据集通常需要大规模神经网络来实现收益,反之亦然。

第二个部分是组归一化(Group Normalization, GN)和权重标准化(Weight Standardization, WS)。批归一化(BN)在视觉模型中被广泛使用。然而,本文发现BN并不适合BiT。这主要有两个原因:1. BN表现较差或者导致进程间通信;2. BN需要更新运行统计信息,因此不适宜于迁移学习。此前的工作表明GN在与WS结合时在小批次训练上的性能更好。本文进一步展示GN和WS在大批尺寸上仍然有效,并且对迁移学习有着显著影响。

下游微调

本文提出了一个便宜的微调流程。这个流程适用于许多不同的下游任务,而且不需要针对性的超参数搜索。本文使用了一个启发式规则,叫做BiT-HyperRule来选择对微调最重要的超参数作为一个人物的固有图像分辨率和数据量的简单函数。本文发现,对每个任务设置以下超参数非常重要:训练计划长度、分辨率以及是否适用MixUp正则化。

数据处理使用以下标准数据预处理:我们首先缩放图片到一个方形,从中裁取一个小的区域,然后执行水平翻转。在某些任务中,这些数据增强可能会破坏标签的语义,如方向和坐标预测。此时这些数据增强可能不适用。

由于训练时图片会经历一个额外的裁剪,这使得训练图片相对测试图片更小。这种偏差可能会影响到模型性能。一个方法是在测试时对图片进行放大,本文则选用了另一个方案,增加一个步骤以将训练好的模型微调到测试分辨率。

本文发现MixUp对于BiT的预训练来说没有用处,但他在迁移时有时有效。这可能是由于预训练数据集较大而导致的。有趣的是,MixUp对于中等规模的数据集最有效,而非小样本迁移。

在下游迁移时,我们不使用下列的任何正则化:权重衰减到0、权重衰减到初始参数或者dropout。尽管网络非常大,网络的性能在没有这些技巧和相关超参数时仍然非常好,即使在迁移到非常小的数据集时也是。我们设置一个恰当的计划长度,即在更大的数据集上训练更久可以提供足够的正则化。

实验

上游预训练

本文使用了一个普通的ResNet-v2结构,其中所有的BN层被替换为GN层,并且每一个卷积层都使用了WS。训练使用\(4096\)等效批尺寸。除非特别提到,优化器为SGD,初始学习率为\(0.03\),动量为\(0.9\)。图像经过裁剪、水平翻转和缩放的预处理。BiT-S和BiT-M各训练90个周期,学习率在30、60和80时以\(10\)作为系数衰减。BiT-L被训练40个周期,学习率在10、23、30、37衰减。学习率有\(5000\)步的预热阶段,使用线性策略,每步乘以\(\frac{批尺寸}{256}\)。需要特别注意的是,预训练阶段有\(0.0001\)的权值衰减,而迁移阶段没有权值衰减。

下游微调

对于所有任务,本文使用SGD,初始学习率为\(0.003\),动量\(0.9\),批尺寸\(512\)。本文将所有小于\(96 \times 96\)的图像缩放到\(160 \times 160\),然后通过随机裁剪得到\(128 \times 128\)的图像;对越较大的图片,他们首先被缩放到\(448 \times 448\),随机裁剪到\(384 \times 384\)。随机裁剪和随机水平翻转在所有任务上被应用,除非其会破坏标签的语义。

对于计划长度,基于样本数量,本文定义三个规模方案。拥有少于\(20k\)个标签样本的任务,微调\(500\)步;少于\(500k\)个标签样本的任务,微调\(10k\)步;拥有更多有标签样本的任务,微调\(20k\)步。在微调过程中,学习率在训练进度的\(30\%\)\(60\%\)\(90\%\)时以10的系数衰减。最后,对于中任务和大任务,本文使用MixUp,\(\alpha = 1\)