Rethinking Few-Shot Image Classification: a Good Embedding Is All You Need(ECCV)
Abstract
目前针对元学习的研究主要集中在设计一个元学习算法,尝试从少量样本中获得样本的元知识,从而将元知识泛化应用到新的任务中。小样本学习是元学习中广泛应用的重要基准(benchmarks)之一。在本文中,作者发现一个性能好的embedding model要比复杂的元学习算法更加高效。所以文章从如何获得较优性能的Embedding Model角度出发,一方面通过优化embedding model的训练过程,另一方面引入知识蒸馏(Knowledge distillation)思想,通过多次迭代进一步优化Embedding Model的特征提取能力。文章在现有主流FSL的数据集中,均取得SOTA的效果。
Introduction
- 使用元学习的思想进行小样本学习是目前常用的方法,针对小样本分类任务,最新的研究提出的一个问题:是元学习算法本身还是学习到的表征负责快速适应测试任务?
- 《Rapid learning or feature reuse? towards understanding the effectiveness of maml》指出特征重用是快速适应的主要因素。
- 基于微调的方法取得的效果只比基于元学习方法效果差一点,基于微调的方法利用的就是测试数据集的信息。
- 主要贡献:提出一种简单有效的小样本学习的基线方法,同时利用自蒸馏的方法提升了基线方法的效果。
Method
问题定义
一个元训练任务集被定义为 T = { D i t r a i n , D i t e s t } i = 1 I \Tau = \{D_i^{train},D_i^{test}\}_{i=1}^{I} T={Ditrain,Ditest}i=1I,二元组 ( D i t r a i n , D i t e s t ) (D_i^{train},D_i^{test}) (Ditrain,Ditest) 描述了一个任务的训练集和一个测试集,每个集合包含少量样本。,训练样本 D t r a i n = { ( x t , y t ) } t = 1 T D^{train} = \{(x_t,y_t)\}_{t=1}^{T} Dtrain={(xt,yt)}t=1T 和测试样本 D t e s t = { ( x q , y q ) } q = 1 Q D^{test} = \{(x_q,y_q)\}_{q=1}^{Q} Dtest={(xq,yq)}q=1Q 从同一个分布中抽取。
一个基础学习器
A
A
A ,定义为
y
∗
=
f
θ
(
x
∗
)
,
(
∗
d
e
n
o
t
e
s
t
o
r
q
)
y_* = f_\theta(x_*),(*\ \ denotes \ t \ or \ q)
y∗=fθ(x∗),(∗ denotes t or q) ,在
D
t
r
a
i
n
D^{train}
Dtrain上进行训练并且在
D
t
e
s
t
D^{test}
Dtest上进行预测,由于
x
∗
x_*
x∗的高维度特征,基础学习器
A
A
A 受高方差的影响较大。因此,训练样本和测试样本会通过一个嵌入模型
Φ
∗
=
f
ϕ
(
x
∗
)
\Phi_* = f_{\phi}(x_*)
Φ∗=fϕ(x∗) 映射到一个特征空间中。假定训练基础学习器的时,嵌入模型是固定的,那么基础训练器可以定位为如下形式(
L
L
L 为损失函数,
R
R
R 为正则项):
元学习算法的目标是学习一个好的嵌入模型,从而最小化基础学习器在任务分布上的平均测试误差(
θ
=
A
(
D
t
r
a
i
n
;
ϕ
)
\theta = A(D^{train}; \phi)
θ=A(Dtrain;ϕ))。
一旦元训练结束,模型的性能通过一个元测试集
S
=
{
(
D
j
t
r
a
i
n
,
D
j
t
e
s
t
)
}
j
=
1
J
S = \{(D_j^{train},D_j^{test})\}_{j=1}^{J}
S={(Djtrain,Djtest)}j=1J 进行评估。
基线方法
元训练的目的是学一个可以泛化到其他新任务上的可迁移嵌入模型 f ϕ f_{\phi} fϕ ,本文提出一个生成强大嵌入的预训练模型。
- 元训练阶段,将元训练集中的任务合并成为单个任务 D n e w D^{new} Dnew :
D
i
t
r
a
i
n
D_i^{train}
Ditrain 是来自
T
\Tau
T 的任务,于是嵌入模型目标定义为如下形式(
L
c
e
L^{ce}
Lce 为交叉熵函数):
具体过程如下图所示:
- 元测试阶段,如下图所示
对于一个从元测试集抽取的任务 ( D j t r a i n , D j t e s t ) (D_j^{train},D_j^{test}) (Djtrain,Djtest),我们在 D j t r a i n D_j^{train} Djtrain 上训练一个基础学习器,基础学习器被实例化为多元逻辑回归器(线性模型)。它的参数 θ = { W , b } \theta = \{W, b\} θ={W,b} 包含一个权重参数和一个归纳偏置:
本文也比较了其他基础学习的效果,比如利用欧式距离或余弦距离的最近邻分类器。我们模型关键的不同点为:元测试阶段嵌入模型的参数是来自元训练阶段的。在元测试阶段,每个任务的基础训练器参数都是会重新初始化的。
自蒸馏方法
知识蒸馏是一种将嵌入在模型集合中的知识转移到单个模型,或者从较大的教师模型转移到较小的学生模型的方法。本文没有直接使用嵌入进行测试,而是将嵌入模型中的知识提炼成具有相同架构的新模型。在训练得到一个嵌入模型后,作者进一步对模型 ϕ \phi ϕ 进行自蒸馏,生成新的嵌入模型 ϕ ′ \phi^{'} ϕ′ (最小化新模型的交叉熵损失以及预测和软目标预测之间的KL散度。):
将Born-again的策略应用于知识蒸馏,序列化生成多代,当前模型由前一代模型知识迁移生成:
Experiments
在四个小样本图像识别的数据集(mninImageNet, tiered-ImageNet, CIFAR-FS, FC100)上进行了测试:
自蒸馏方法的测试
Thoughts
这篇文章进一步的重新思考了小样本分类的问题本质,提出了训练一个性能好的embedding model起到非常关键的作用。所以将每个task中原本的train数据部分整合成一个大的数据集,再用这个新的数据集去训练Embedding Model,使得这个Embedding Modell具有一般分类任务的特征提取性能。接着利用提取的特征为每个task拟合不同的线性分类器。和fine-turn方法不同的,文章并没有利用新的样本重新调整Embedding Model的参数,而是让其保持不变,而是针对各任务的不同对象,拟合不同的线性分类器。所以如何提取出样本中广泛的、基础的,并能拟合更具代表性的特征,是小样本学习的关键。也就是如图人类在面对没有见过的物体时,会利用已有的知识来描绘这个物体,所以只需少量的样本,人类就能很快能区分这个物体。因此相比其他元学习的算法,这篇文章用更大的数据训练Embedding Model,得到的特征更具代表性。
进一步,根据知识蒸馏思想,作者也提出了对Embedding Model进行自蒸馏迭代,使得Embedding Model学到的特征更加的凝练。实验结果也证明加入自蒸馏后模型性能有了较大的提升。