作者 | 封扬帆 编辑 | 李仲深
今天给大家介绍新加坡国立大学的Qianru Sun等人在2019年CVPR(计算机视觉顶会)上发表的文章“Meta-Transfer Learning for Few-ShotLearning”。本文对MAML(Model-Agnostic Meta-Learning)进行了一些改进,提出了meta-transfer learning(MTL)(可以整合迁移学习和元学习的优点)仅用少量数据就能快速适应新的task。
一、摘要
元学习(meta-learning)是目前广泛使用的处理小样本学习问题的方法,它的目的是在学习不同任务的过程中积累经验,从而使得模型能够快速适应新任务。比如在MAML(Model-Agnostic Meta- Learning)中,通过搜寻最优初始化状态,使得base-learner能够快速适应新任务。但是这一类元学习方法具有两个缺点:
1. 需要大量相似的任务以进行元训练(meta-training),成本花费很大;
2. 每个任务通常由较低复杂度的base-learner进行建模,以避免过拟合,这会导致模型不能使用更深更强的结构。比如在MAML中,使用的是shallow CNN,只有4个卷积层。
本文提出了一种新的元学习方法,称为meta-transferlearning(MTL),当仅使用少量带有标记的数据时,它可以帮助深度神经网络快速收敛,并且降低过拟合发生的概率。本文还提出了一种新的学习策略,称为hard task(HT)meta-batch,以往的meta-batch包含的是一些随机任务,而HT meta-batch根据之前在训练时出现的具有较低验证准确度的失败任务,对hardtask进行重新采样。
二、研究背景
深度学习系统在标记数据足够时时有很好的性能,但对减少所需的数据集的需求越来越多。为此,已经定义了few-shot学习任务。few-shot学习方法可以大致分为两类:数据扩充和基于任务的元学习。数据扩充是增加可用数据量的经典技术,因此对few-shot学习也很有用。然而,当在少量数据上训练时,模型通常表现不佳。另一种方法是合并来自多个任务的数据,但是由于任务之间的数据差异,这种方法无效。与数据扩充方法相反,元学习是一种任务级学习方法。元学习旨在从学习多个任务中积累经验,而基础学习侧重于对单个任务的数据分布进行建模。这方面的最新代表,即模型不可知元学习(MAML),学习搜索最佳初始化状态,以快速适应新任务。它与任务无关的特性使得它可以推广到few-shot监督学习和无监督强化学习。然而,这种方法有两个主要的局限性,限制了它们的有效性:I)这些方法通常需要大量类似的元训练任务;ii)每个任务通常由低复杂度的基础学习者(例如浅层神经网络)建模,以避免模型过拟合,因此不能使用更深和更强大的体系结构。本文的贡献如下:1.提出MTL方法,使用经过大规模数据集预训练得到的DNN权值,来处理小样本学习任务;2.提出HT meta-batch学习策略,迫使MTL通过hard task进行学习;3.在两个小样本学习benchmark上进行实验并取得优异的结果。
三、模型与方法
图1 MTL方法三阶段
如图1所示,本文的方法共包含3个阶段:
a)在大规模数据集上训练一个DNN,并固定较低层级的卷积层作为特征提取器(Feature Extractor);
b)在MTL阶段,学习特征提取器神经元的SS参数(scaling和shifting),确保能够快速适应小样本任务。除此之外还采用了HT meta-batch学习策略,以提升整体的学习;
c)meta-test阶段
3.1 DNN的训练
这一阶段类似于目标识别中的预训练阶段,这里是在小样本学习benchmark的现成数据集上进行预训练。对于一个确切的小样本数据集,将会融合所有类的数据D DD以进行预训练。比如在miniImageNet中,D DD的训练集中共有64个类,每个类包含600个样本,那么将利用所有这些数据进行预训练,得到一个64-class分类器。
首先随机初始化一个特征提取器Θ 和分类器θ ,通过梯度下降对它们进行优化:
其中L 是交叉熵损失:
这一阶段主要通过学习得到一个特征提取器Θ,在后续的meta-training和meta-test阶段,Θ将会被冻结,而这一阶段得到的分类器θ将会被去掉。
3.2 Meta-Transfer Learning
MTL通过HT meta-batch训练来对元操作(meta operation)SS进行优化,将SS操作分别定义为
,给定任务
是训练数据,使用
的损失来优化当前的base-learner(分类器)θ ′,也就是对θ 进行更新:
与式(1)不同的是,这里并没有更新Θ。注意这里的θ与式(1)中的θ是不同的,在式(1)中θ处理的是某个数据集中的所有类,而这里的θ只关注少量的几个类,从而在小样本设置的情况下进行分类。θ′是一个临时的分类器,它只关注当前的任务。
由1进行初始化,
由0进行初始化,然后,用
的损失对它们进行优化,
是测试数据:
然后用与式(4)中相同的学习率γ 对θ 进行更新:
然后说一下如何将ΦS{1,2}应用到Θ 的神经元上。给定Θ,它的第l 层包含K 个神经元,也就是K 个参数对儿,定义为{(Wi,k,bi,k)},分别表示权值和偏差。假设输入是X ,那么将{ΦS{1,2}}应用到(W,b)上就是:
下图说明了分别通过SS和FT进行更新的不同之处:
图2 (a)通过FT(fine-tuning)进行更新,它对Θ中的所有W 和b都进行更新,并且参数的数量很多,图中绿色的都是需要学习的参数;(b)通过SS进行更新
图中是3×3的卷积核,在SS操作后,卷积核通过ΦS1、进行缩放,然后将卷积后的特征图平移ΦS2,它可以使Θ中的参数保持不变,并且参数数量变为原来的{9}92(仅限3×3的卷积核)。
3.3 HT meta-batch
在以往的元训练中,meta-batch包含的是随机采样的任务,也就是说任务的难度也是随机的。本文在元训练中有意挑选出每个任务中的失败案例(failure case),并将其数据重新组合为难度较大任务,迫使meta-learner"在困难中成长"。
每个任务T都包含T(tr)和Tte,分别用于base-leaning和test,base-learner由T(tr)的损失进行优化(在多个epoch中进行迭代),然后SS由T(te)的参数进行优化(只进行一次)。对T(te),可以得到其中M个类的识别精度,然后根据最低的精度Accm判断当前任务中最困难的类class-m (failure class)。在从当前的meta-batch {T1−k}的所有k个任务中获得所有failure class之后,从这些数据中重新采样任务。也就是说,假设p(T∣{m})是任务分布,那么采样hardertask )Ttask∈p(T∣{m}),采样的具体细节如下:
· 在每个任务中,通过对class-level的识别精度进行排序,选出最困难的类class-m ;
· 在选出{m}之后,要么直接使用当前任务T 中class-m中的样本作为Ttask,或者根据class-m 的类标签采样属于同一类的新样本作为Ttask。实验证明第二种方法更好。
3.4 算法
图3 算法描述
Algorithm 1总结了DNN的训练和MTL这两个阶段,其中的failure class由Algorithm 2返回。Algorithm 2说明了在单个任务上的学习过程,包括episode training和episode test
四、实验与实验结果
4.1 数据集和实现细节
作者在两个benchmarks上进行了实验,miniImageNet 和 Fewshot-CIFAR100数据集。
miniImageNet有100个类别,每个类别有600个样本,这100个类别被划分为:64,16,20类,分别用于meta-trianing, meta-validation和meta-test阶段。
Fewshot-CFAR100包括100个类别,每个类别有600个样本,每个样本的尺寸是32 × 32 。这100个类别属于20个超类。超类的划分为12: 4 : 4 ,分别用于训练,验证和测试。
特征提取器Θ使用的是ResNet-12,它包括4个残差块,每个残差块包含3个3 × 3 的卷积层,以及1个2 × 2 的最大池化层。
4.2.1 实验结果-minilmageNet
4.2.2 实验结果-FC100
表1表2展示了各个方法在miniImageNet和FC100数据集上的实验结果。可以看到MTL SS Hard taskmeta-batch方法取得了最好的实验结果。
五、结论
本文在MAML的基础上,使用了一个较深的预训练DNN模型,为了更好地发挥DNN的效果,在固定DNN每层参数不变的情况下,为每层的权值和偏差分别设置了可学习的scaling和shifting,这样可以降低参数数量,避免过拟合。除此之外,为了增强模型的泛化能力和鲁棒性,本文使用HT meta-batch学习策略。
代码
https://github.com/y2l/meta-transfer-learning-tensorflow
参考文献
Meta-Transfer Learning for Few-Shot Learning 作者:Qianru Sun, Yaoyao Liu, Tat-Seng Chua, Bernt Schiele
https://arxiv.org/pdf/1812.02391.pdf