小样本学习&元学习经典论文整理||持续更新
核心思想
本文提出一种基于度量学习的小样本学习算法(AAM),作者认为由于测试集和训练集的样本是来自不同分布的,且测试集的支持集中仅包含少量的样本,因此生成的类别表征是不可靠的。另一方面由于查询样本也存在较大的随机性,可能对应类别的类别表征并不相似,这样就容易导致误分类。作者提出一种注意力自适应模块(Attention Adaptation Module,AAM)用于调整类别表征和查询样本的特征向量,使其与对应类别的类别表征之间的距离更近。
本文思路的重要灵感是来自:两个非零不重合向量的和向量,与两个向量中任意一个向量之间的夹角小于原本两个向量之间的夹角,如下图所示,
θ
2
<
θ
1
\theta_2<\theta_1
θ2<θ1
此外当向量
B
B
B的模逐渐趋近于0时,
θ
2
\theta_2
θ2会逐渐变小,即
A
+
B
→
A
A+B\rightarrow A
A+B→A;但当
B
B
B的模不断增大时,
θ
1
\theta_1
θ1是不变的。当我们使用余弦距离来度量类别表征和查询样本的特征向量之间的相似度时,类别表征和特征向量可以简化为下图的表示方式
图中
c
1
,
c
2
,
c
3
c_1,c_2,c_3
c1,c2,c3表示三种类别表征向量,
q
~
1
,
q
~
2
,
q
~
3
\tilde{q}_1,\tilde{q}_2,\tilde{q}_3
q~1,q~2,q~3表示三个查询样本的特征向量,三个样本都属于类别1,但由于样本的随机性和特征向量的表征偏差使其出现了误分类的情况,如图c,e所示。作者希望通过一个自适应的调整方式,使特征向量与对应类别的类别表征之间的夹角变小,距离变近。作者采用了自注意力机制,首先用两个可学习的线性层得到Q,K
其中
W
Q
W^Q
WQ和
W
K
W^K
WK表示线性层中可学习的参数,
c
1
.
.
.
.
c
M
c_1....c_M
c1....cM表示
M
M
M个类别对应的类别表征,
f
θ
(
x
~
j
)
f_{\theta}(\tilde{x}_j)
fθ(x~j)表示样本
x
~
j
\tilde{x}_j
x~j对应的特征向量。然后构建注意力权重
a
n
,
m
a_{n,m}
an,m
这里的
a
n
,
m
a_{n,m}
an,m可以理解为其表征了向量
n
n
n和
m
m
m的相似程度,两者越相似权重值越大,利用这个权重值对原本的类别表征和特征向量进行调整。
q
~
j
′
\tilde{q}_j'
q~j′表示调整后的特征向量,式中第一项就是原始的特征向量,第二项表示所有类别表征的加权和,权重就是经过线性层映射之后特征向量和类别表征之间的相似度,第三项是经过特征向量自身之间的相似程度加权后的特征向量。
类似的
c
k
′
c_k'
ck′表示调整后的类别表征,第一项表示原始类别表征,第二项表示其他类别表征的加权和,权重是该类别表征与其他类别表征的相似度,第三项是以该类别表征与当前特征向量之间的相似度作为权重的特征向量。假设
k
∗
k^*
k∗表示当前查询样本对应的类别,则
a
n
,
m
a_{n,m}
an,m可能有以下三种情况
- n ≠ M + 1 , m ≠ k ∗ n\neq M+1, m\neq k^* n=M+1,m=k∗, a n , m a_{n,m} an,m表示不属于正确分类的类别表征之间的相似度,如 c 2 , c 3 c_2,c_3 c2,c3之间的相似度,我们希望 a n , n → 1 a_{n,n}\rightarrow1 an,n→1也就是类别表征和自身的相似程度最高, a n , m → 0 , m ≠ n a_{n,m}\rightarrow0, m\neq n an,m→0,m=n类别表征和其他类别表征之间以及特征向量之间的相似度趋向于0,此时 c k ′ → 2 c k c_k'\rightarrow2c_k ck′→2ck;
- n ≠ M + 1 , m = k ∗ n\neq M+1, m= k^* n=M+1,m=k∗, a n , m a_{n,m} an,m表示正确类别表征和其他类别表征之间的相似度,如 c 1 , c 2 c_1,c_2 c1,c2之间的相似度,我们希望 a n , M + 1 → 1 a_{n,M+1}\rightarrow1 an,M+1→1也就是正确类别表征和样本特征向量之间的相似度最高, a n , m → 0 , m ≠ M + 1 a_{n,m}\rightarrow0, m\neq M+1 an,m→0,m=M+1正确类别表征和其他类别表征之间的相似度趋向于0,此时 c k ′ → c k + f θ ( x ~ j ) c_k'\rightarrow c_k+f_{\theta}(\tilde{x}_j) ck′→ck+fθ(x~j)
- n = M + 1 , m = k ∗ n= M+1, m= k^* n=M+1,m=k∗, a n , m a_{n,m} an,m表示正确类别表征和样本特征向量之间的相似度,如 c 1 , q ~ 1 c_1,\tilde{q}_1 c1,q~1之间的相似度,我们希望 a n , k ∗ → 1 a_{n,k^*}\rightarrow1 an,k∗→1也就是样本特征向量和正确类别表征之间的相似度最高, a n , m → 0 , m ≠ k ∗ a_{n,m}\rightarrow0, m\neq k^* an,m→0,m=k∗样本类别特征和其他类别表征之间的相似度趋向于0,此时 q ~ j ′ → f θ ( x ~ j ) + c k \tilde{q}_j'\rightarrow f_{\theta}(\tilde{x}_j)+c_k q~j′→fθ(x~j)+ck
经过调整的类别表征和特征向量就如图 b , d , f b,d,f b,d,f中的 c i ′ c_i' ci′和 q ~ j ′ \tilde{q}'_j q~j′所示,可以看到查询样本的特征向量与正确类别表征之间的距离会明显缩小,这样就降低了误分类的可能性。
实现过程
网络结构
特征提取网络可采用4-Conv, WRN-28-10,ResNet-18等多种结构。
损失函数
损失函数包含两个部分:分类损失和实例损失函数,如下式所示
其中
我们希望对权重
a
n
,
m
a{n,m}
an,m进行监督,对于上文图中介绍的例子而言,我们希望得到的权重矩阵
A
A
A应该如下所示
因为查询样本属于类别1,因此
a
1
,
4
=
a
1
,
4
=
1
a_{1,4}=a_{1,4}=1
a1,4=a1,4=1,且
a
2
,
2
=
a
3
,
3
=
1
a_{2,2}=a_{3,3}=1
a2,2=a3,3=1,其他的都为0。原文中损失函数的表示存在一定的歧义,我认为
I
(
a
n
,
m
=
1
)
I(a_{n,m}=1)
I(an,m=1)应该表示的是目标权重矩阵
A
A
A中
a
n
,
m
=
1
a_{n,m}=1
an,m=1的那些位置,
l
n
(
a
n
,
m
)
ln(a_{n,m})
ln(an,m)则表示计算得到的
a
n
,
m
a_{n,m}
an,m的对数值,该值越大越好,越趋近于1越好。
训练策略
创新点
- 提出了AAM模块,利用自注意力机制,通过自适应的调整类别表征和样本的特征向量,使正确分类向量之间的距离缩小
- 设计了实例损失函数对自注意力得到的权重进行监督
算法评价
本文关注到了基于度量学习的小样本分类算法中的几个关键点,首先在训练集上得到的特征提取网络和类别表征方法(可能使固定算法,也可能是可学习的算法),其对于测试集样本的表征能力是有限的,因为二者来自不同的分布。另一方面查询样本的随机性很大,不一定与支持集中的样本特征相似。因此必须要进行针对每个实例进行自适应的调整,作者是从度量函数的角度出发,利用自注意力机制进行调整,取得了不错的效果。
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。