【CVPR2019】SpotTune: Transfer Learning through Adaptive Fine-tuning
论文链接:SpotTune: Transfer Learning through Adaptive Fine-tuning
一. Introduction
使用深度学习模型时,微调(fine-tune)是应用最普遍的迁移学习方法。它具体指先在源任务上获得预训练模型,然后在目标任务上进一步训练它,从而,可以减少对目标标签数据需求的同时,提升模型的性能。
常用的微调方式有以下两种:第一个是使用目标数据集优化预训练模型中的所有参数,它的一大缺陷是,当目标数据集小且预训练网络的参数过大时,可能会产生过拟合;第二个是依据目标任务中训练集有限以及初始层学到的低级特征可以在多个任务间共享这一经验,选择微调深度网络的最后几层的参数,冻结前面其他层的参数,但是由于需要手动选择初始冻结层数,这不利于提升优化效率。并且,像ResNet这种由多个浅层网络集成的模型,初始层学到的低级特征可以共享这一前提不再适用,所以仅是微调模型的最后几层并不一定是最优的选择。
目前的方法也均是采用全局微调的策略,即,对目标任务中的所有样本采取(在某些网络层)freeze参数或者是fine-tune参数的决定。这就相当于假设该决定对整个目标数据分布是最优的,但是,现实往往并非如此。
例如,目标任务中的某些类与源任务之间的相似性较高,这些类的样本可能倾向于finetune较少的预训练参数,与之相反的样本则希望能finetune更多的预训练参数,以达最好的准确率。
所以,理想的情况是,为目标任务中的每一样本,在每一层,都制定一个该finetune还是该freeze参数的决策。
就如图1所示,上面的是在源任务上得到预训练模型,下面,在目标任务中,有两个猫的训练样本,第一个猫样本在前两块选择冻结参数,也就是保留预训练模型原有的参数,后两块做了微调,而第二个猫样本在第一三块选择了微调,在二四块选择冻结参数。而这样的选择对他们来说是达到了最优的微调策略。
本文提出了一种方法SpotTune。它可以学习依赖输入(input-dependent)的微调策略,大体指从一个轻量级神经网络的输出所构成的离散分布中采样,来为每一个样本决定在哪一层该fine-tune,哪一层该freeze。
由于策略函数是离散的,不可微,所以,采用了Gumbel Softmax 采样方法来训练策略网络。
在测试期间,策略网络就可以决定来自上一层的特征(feature)该进入原预训练的网络层,还是需做微调的网络层。
本文贡献:
•提出了一个依赖输入的微调方法,能为每个目标样本自动决定在哪些层fine-tune。
•还提出了上述方法的一个global变体,即,约束所有样本在相同的k层做fine-tune,其中,这k个层可以分布于网络中的任意部分。该变体可以使最终模型有较少的参数。
•通过大量实验证明,本文提出的方法在14个数据集中有12个超过了标准fine-tune方法,并且,在Visual Decathlon Challenge(10个用于多域学习算法性能测试的基准数据集),相比其他先进的方法,取得了最高的score。
二. Proposed Approach
本文提出的方法能应用于不同的神经网络架构,但是由于ResNet相当于是多个较浅的层组合而成,使它对残差块之间的交换具有弹性,也就是,交换残差块对网络性能影响不大。该性质更合乎本文提出的方法。所以,接下来的实验,均是基于