小样本学习&元学习经典论文整理||持续更新
核心思想
本文提出一种基于度量学习的小样本学习算法。与其他算法将训练集分成基础类别和新类别,进行两个阶段的训练方式不同,本文将包含大量样本的基础类别和包含少量样本的新类别合在一起进行训练,得到每个类别的表征(原型)称之为全局类别表征(Global Class Representations,GCR)。然后对于每个Episode中的支持集样本得到对应的Episode类别表征(Episode Class Representations,ECR),利用一个称之为登记模块(Registration Module)的组件,从全局类别表征中选择出与当前Episode类别表征最相近的
n
n
n个类别表征(
n
n
n表示支持集中包含的类别数目)。最后根据查询集样本与
n
n
n个类别表征之间的欧氏距离实现分类预测。算法的实现方法如下图所示
如图所示,支持集中既包含基础类别,又包含新类别样本,但二者样本数量极不平衡,新类别仅包含少量样本。为了解决这一问题,作者提出了两个解决方法:样本合成与Episode采样。样本合成就是一个数据增强的过程,他也分成两个步骤:第一个步骤就是对样本图像进行随机裁剪、随机翻转和《Low-Shot Learning from Imaginary Data》中设计的数据集扩充方法;第二阶段是在类别
c
j
c_j
cj扩展得到的
k
t
k_t
kt个样本中再抽样得到
k
r
k_r
kr个样本,利用特征提取网络得到每个样本对应的特征向量
f
i
f_i
fi,然后在[0,1]中随机采样
k
r
k_r
kr个值
v
i
v_i
vi作为权重,对
f
i
f_i
fi进行加权求和得到类别
c
j
c_j
cj中的新样本
r
c
j
r_{c_j}
rcj,计算过程如下
Episode采样就是先从所有的类别(基础类别+新类别)中选择出
n
t
r
a
i
n
n_{train}
ntrain个类别
C
t
r
a
i
n
C_{train}
Ctrain,然后对于
C
t
r
a
i
n
C_{train}
Ctrain中的每个类别再选择出
n
s
n_s
ns个样本作为支持集,选出
n
q
n_q
nq个样本作为查询集。因为对于新类别其样本数量可能不够,所以要先按照前面介绍的样本合成方法,先把样本数量扩充到
n
s
+
n
q
n_s+n_q
ns+nq个再进行划分。
划分好支持集和查询集后,对每个支持集中的样本计算Episode类别表征(ECR),ECR的计算方法也有两种,对于基础类别,直接计算样本特征向量的平均值(和PN一样)作为ECR;对于新类别,将样本合成中得到的新样本
r
c
j
r_{c_j}
rcj作为ECR。然后将ECR和全局类别表征GCR一起输入到登记模块(Registration Module)中。等等!全局类别表征GCR是从哪来的?全局类别表征的初始值是所有类别的样本对应特征向量的平均值,而后会随着训练进行更新。假设基础类别+新类别一共有100种,那么就应该有对应的100个GCR。登记模块利用ECR和每个GCR之间的相似性,从GCR中选出
n
t
r
a
i
n
n_{train}
ntrain个(与ECR的数量相同)类别表征
ξ
i
\xi_i
ξi用于分类预测,
ξ
i
\xi_i
ξi的计算方法如下
其中
r
c
i
r_{c_i}
rci表示类别
c
i
c_i
ci对应的ECR,
g
c
j
g_{c_j}
gcj表示类别
c
j
c_j
cj对应的GCR,
θ
,
ϕ
\theta ,\phi
θ,ϕ分别表示ECR和GCR的嵌入式函数,二者结构相同都是一个带有ReLU和BN的全连接层。选择出当前支持集对应的全局类别表征
ξ
\xi
ξ后,就能够对查询集种的样本
x
k
x_k
xk进行类别预测了,先计算样本
x
k
x_k
xk对应的特征值
F
(
x
k
)
F(x_k)
F(xk)与每个类别表征
ξ
i
\xi_i
ξi之间的欧式距离,然后在选择出最近邻。
实现过程
网络结构
特征提取网络采用4-Conv结构。
损失函数
损失函数包含两个部分登记损失和分类损失,计算过程如下
其中
训练策略
整个训练过程如下
值得注意的是特征提取网络
F
F
F要在基础类别上进行一个预训练作为初始化,GCR的初始化也是利用初始化后的
F
F
F对所有样本计算特征向量,再对每个类别取平均值得到的。
算法推广
本算法可以直接推广到广义小样本学习中,即测试集中既包含新类别样本也包含基础类别样本。
创新点
- 提出了全局类别表征的概念,利用注册模块从中选取对应的类别表征进行分类预测
- 设计了一种样本合成的方法,用于解决样本数量不平衡的问题
算法评价
本文最重要的改进应该就是消除了基础类别和新类别之间的差别,训练集中既包含基础类别样本,又包含新类别样本。但如果直接把新类别样本添加到训练集中,在采用普通的训练方式(如PN),则会由于新类别样本太少,而模型会忽视这部分样本。因此作者提出的样本合成和利用ECR从GCR中选择类别表征等一系列操作,都是为了消除样本数量的不平衡问题。另一方面本文并不是属于直推学习类型的,因为直推学习是指在训练阶段,把不带有标签的测试图片也加入到训练集中,和本文的方法还是存在很大差别的。
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。