小样本学习&元学习经典论文整理||持续更新
核心思想
之前我解读过这篇文章(点此查看)结果那只是作者上传到arXiv上的早期版本,与作者最终在ICCV2017上发表的正文相差甚远,早期版本只是介绍了使用SGM进行正则化,提高特征提取网络表征能力的部分,而没有介绍利用生成模型进行数据扩充的过程(怪不得许多文章都把这篇论文划分到数据增强类型的算法,我当时还很奇怪)。首先本文确定了一种新的小样本学习的基准(benchmark),整个学习过程分成两个阶段:表征学习(representation learning)和小样本学习(low-shot learning),如下图所示。
在表征学习阶段,就是使用带有大量训练样本的基础类别数据集
C
b
a
s
e
C_{base}
Cbase训练得到一个好的特征提取网络;然后再小样本学习阶段,就是使用带有少量训练样本的新类别数据集
C
n
o
v
e
l
C_{novel}
Cnovel和
C
b
a
s
e
C_{base}
Cbase一起训练得到一个好的分类器。为了解决小样本学习阶段,新类别数据集样本数量过少的问题,作者首先提出一种数据增强的方法,用于扩充新类别数据集的样本数量。作者的想法是同一类别不同样本之间的差异是能够泛化到其他的类别中的。具体地说,假设类别
a
a
a中有两个样本
z
1
z_1
z1和
z
2
z_2
z2,如果我们可以获取到
z
1
→
z
2
z_1\rightarrow z_2
z1→z2的变化过程,并将其运用到类别
b
b
b的样本
x
x
x上,就可以得到一个新的合成样本
x
^
\hat{x}
x^。基于这一想法,作者就使用一个生成器
G
G
G,将类别
a
a
a中的两个样本对应的特征向量
c
1
a
c_1^a
c1a,
c
2
a
c_2^a
c2a和类别
b
b
b中的样本对应的特征向量
c
1
b
c_1^b
c1b,级联起来后输入到
G
G
G中得到对应的合成样本
c
^
2
b
=
G
(
[
c
1
a
,
c
2
a
,
c
1
b
]
)
\hat{c}_2^b=G([c_1^a,c_2^a,c_1^b])
c^2b=G([c1a,c2a,c1b])(此处与原文略有出入,但过程是一致的)。
此外作者还希望提高特征提取网络的表征能力,思路是利用正则化项来约束小样本学习阶段得到的分类器
V
V
V与表征学习阶段分类器
W
W
W之间的差异。作者认为在对特征提取器和分类器一起训练时,特征提取器可能会较少的编码一些区分度低的特征,因为这些信息最终会被分类器忽视。但在小样本学习阶段,学习器无法从少量的样本中选择出那些对于新样本有用的特征信息,因此通过约束特征激活值的范数(L1,L2或本文提出的加权范数SGM)能够强制学习器只编码那些有用的信息。SGM的介绍参见另一篇博客论文阅读笔记《Low-shot visual object recognition》。
实现过程
网络结构
特征提取器可采用ResNet-10或ResNet-50,生成器采用带有三层全连接层的MLP。
损失函数
训练生成器的损失函数如下
L
=
λ
L
m
s
e
(
c
^
2
b
,
c
2
b
)
+
L
c
l
s
(
W
,
c
^
2
b
,
b
)
L=\lambda L_{mse}(\hat{c}_2^b,c_2^b)+L_{cls}(W,\hat{c}_2^b,b)
L=λLmse(c^2b,c2b)+Lcls(W,c^2b,b)
第一项表示生成的样本
c
^
2
b
\hat{c}_2^b
c^2b与真实样本
,
c
2
b
,c_2^b
,c2b之间的差异,第二项表示对生成的样本进行类别预测得到的分类损失。
训练分类器的损失函数如下
其中
训练策略
在进行数据增强时并不是对所有的样本都进行扩充,而是只对数量少于一个限定值的样本进行扩充,用于学习变化过程的样本从基础类别数据集中进行采样。
创新点
- 提出一种新的小样本学习基准算法:表征学习+小样本学习
- 提出一种数据增强的方法,利用生成器进行样本数据扩充
- 提出一种通过SGM正则化提高学习器表征能力的方法
算法评价
本文也是小样本学习的经典文章之一了,它不仅开创了表征学习(特征提取器)+小样本学习(分类器)这一基准算法,而且还是最早使用ImageNet 1K这一极具挑战性的数据集进行小样本学习研究的。其采用的数据增强和正则化的方法,也成为了后面许多算法的研究基础。
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。