链接:https://arxiv.org/abs/2009.04960
代码:https://github.com/zhangbq-research/Prototype_Completion_for_FSL
目录
摘要
- 问题:基于预训练(pre-training)的方法在少样本学习中,存在微调(fine-tuning)性能改进有限的问题;
- 分析:在Base Classes 中已经形成了一个紧凑的簇,再进行微调已经没有非常大的效果,反而会导致过拟合;在Novel Classes中,如果此时它的方差较大,给定的样本就会远离中心(如下图所示);
- 提出:原型补全模型。
主要贡献
- 解释了为什么预训练中微调性能有限以及说明找到一个典型地原型网络更为关键;
- 提出了一种基于元学习的原型补全框架;
- 在三个真实世界的数据集上进行了全面的实验。实验结果表明,该方法在分类精度方面比目前的先进技术高出2% ~ 9%。
方法
定义
N-Way K-Shot 问题包含以下内容:
- 训练集(traning set,support set):由少量标记样本组成
S = { ( x i , y i ) } i = 0 ( N ∗ K ) , N:集合S中类的个数,K:每类中样本的个数 S=\{(x_i,y_i)\}^{(N*K)}_{i=0} , \text{ \quad N:集合S中类的个数,K:每类中样本的个数} S={(xi,yi)}i=0(N∗K), N:集合S中类的个数,K:每类中样本的个数 - 测试集 (test set,query set):包含未标记样本
Q = { ( x i . y i ) } i = 0 M , M:集合Q中样本个数 Q=\{(x_i.y_i)\}^M_{i=0}, \text{\quad M:集合Q中样本个数} Q={(xi.yi)}i=0M,M:集合Q中样本个数 - Base集(auxiliary data set):由大量标记样本组成
D = { ( x i , y i ) } i = 0 B , B:集合D中样本的个数 D=\{(x_i,y_i)\}_{i=0}^B,\text{\quad B:集合D中样本的个数} D={(xi,yi)}i=0B,B:集合D中样本的个数 - 集合S和集合Q中的样本都是来自新类
- 集合D中的样本来自基类
- 新类和基类没有交集
整体框架
1.Pre-Traning
用基类训练一个CNN分类器,然后将最后一个softmax分类层去掉,得到一个特征提取器: f θ f ( ) f_{\theta f} () fθf()。
2.Learning to Complete Prototypes
2.1目的
解决不完整原型中丢失的属性。
2.2步骤
-
第一步:用WordNet为所有类构建原语知识(就是每个类都有相应的属性特征),具体表示如下:
A = { a i } i = 0 F , A:类的原始属性的集合,F:属性的个数 A=\{a_i\}_{i=0}^F, \text{\quad A:类的原始属性的集合,F:属性的个数} A={ai}i=0F,A:类的原始属性的集合,F:属性的个数
R R R:属性和类之间的关联矩阵,若 R k a i = 1 R_{k ai}=1 Rkai=1说明k类中找得到属性 a i a_i ai,若 R k a i = 0 R_{k ai}=0 Rkai=0则相反
所有类和属性间的semantic embeddings用Glove来实现:
H = { h k } k = 0 ∣ C b a s e ∣ + ∣ C n o v e l ∣ − 1 ∪ { h a i } i = 0 F H=\{h_k\}_{k=0}^{|C_{base}|+|C_{novel}|-1}\cup\{h_{a_i}\}_{i=0}^F H={hk}k=0∣Cbase∣+∣Cnovel∣−1∪{hai}i=0F -
第二步:将base集中的属性特征迁移到novel集中,所以这里要表示出属性的特征(文章中举的例子是:从袋鼠和马中学习到了长脸这个特征,那么如果你没见过斑马,你也可以通过袋鼠和马类中学习到的特征进行辨认斑马):
原来的原型表示:基类k中所有样本特征的平均值来计算:
p k r e a l = 1 ∣ D b a s e k ∣ ∑ ( x , y ) ∈ D b a s e k f θ f ( x ) p_k^{real}=\frac {1}{|D_{base}^k|}\sum_{(x,y)\in D_{base}^k} f_{\theta f}(x) pkreal=∣Dbasek∣1∑(x,y)∈Dbasekfθf(x)
对于属性 a i a_i ai,找到所有基类样本中有属性 a i a_i ai的样本,形成集合 D b a s e a i D_{base}^{a_i} Dbaseai,计算它的均值和协方差:
μ a i = 1 ∣ D b a s e a i ∣ ∑ ( x , y ) ∈ D b a s e a i f θ f ( x ) \mu_{a_i}=\frac {1}{|D_{base}^{a_i}|}\sum_{(x,y)\in D_{base}^{a_i} }f_{\theta f}(x) μai=∣Dbaseai∣1∑(x,y)∈Dbaseaifθf(x)σ a i = 1 ∣ D b a s e a i ∣ ∑ ( x , y ) ∈ D b a s e a i ( f θ f ( x ) − μ a i ) 2 \sigma_{a_i}=\sqrt {\frac {1}{|D_{base}^{a_i}|}\sum_{(x,y)\in D_{base}^{a_i} }(f_{\theta f}(x)-\mu_{a_i}})^2 σai=∣Dbaseai∣1∑(x,y)∈Dbaseai(fθf(x)−μai)2
同时,样本中的属性特征 z a i z_{a_i} zai符合 : z a i ∽ N ( μ a i , d i a g ( σ a i 2 ) ) z_{a_i} \backsim N(\mu_{a_i},diag(\sigma^2_{a_i})) zai∽N(μai,diag(σai2))
- 第三步:训练元学习器
f
θ
c
(
)
f_{\theta_c}()
fθc()
随机从基类中选取一个k类,k类中有K个样本 作为训练集S,然后对训练集中的样本特征均值获得不完整的原型 p k p_k pk;
输入: p k , R , H , Z , 这 里 Z = { z a i } i = 0 F , 特 征 的 集 合 p_k,R,H,Z,这里Z=\{z_{a_i}\}_{i=0}^F,特征的集合 pk,R,H,Z,这里Z={zai}i=0F,特征的集合
目标: p k p_k pk的目标值是 p k r e a l p_k^{real} pkreal
用MSE计算损失,来训练元学习器:如下:
3.Meta-Training
从base集中抽取数据,用episodic的方法联合微调
f
θ
f
(
)
f_{\theta f}()
fθf()和
f
θ
c
(
)
f_{\theta c}()
fθc()。目标是对
S
S
S,以
Q
Q
Q为目标进行极大似然估计。根据
S
S
S,矩阵
R
R
R,
H
H
H,
Z
Z
Z和参数
θ
=
{
θ
f
,
θ
c
}
\theta=\{\theta_f,\theta_c\}
θ={θf,θc}来预预测图片
x
x
x所属的类别
y
y
y。
对于每一个episode,先算出原始的
p
k
p_k
pk
p
k
=
1
∣
S
k
∣
∑
x
∈
S
k
f
θ
f
(
x
)
p_k=\frac{1}{|S_k|}\sum_{x\in {S_k}}f_{\theta f}(x)
pk=∣Sk∣1∑x∈Skfθf(x)
然后用元学习器(ProtoComNet)获得
p
^
k
\hat{p}_k
p^k
p
^
k
=
f
θ
c
(
p
k
,
R
,
H
,
Z
)
\hat{p}_k=f_{\theta c}(p_k,R,H,Z)
p^k=fθc(pk,R,H,Z)
为了更好的应用到未标记的样本,用高斯原型融合策略,获得
p
^
y
′
\hat{p}_y^{'}
p^y′,计算出Q集合中x是k类的概率:
这里,
d
(
)
是
两
个
向
量
间
的
余
弦
相
似
度
,
γ
是
一
个
尺
度
参
数
d()是两个向量间的余弦相似度,\gamma 是一个尺度参数
d()是两个向量间的余弦相似度,γ是一个尺度参数。
4.Meta-Test
与训练过程一样。
原型补全网络
4.1 The Encoder
目的: 提取出属性特征以及预测的prototype的低维表示
表示:
z
a
i
∽
N
(
μ
a
i
,
d
i
a
g
(
σ
a
i
2
)
)
,
z
a
i
′
=
g
θ
e
(
z
a
i
)
z_{a_i} \backsim N(\mu_{a_i},diag(\sigma^2_{a_i})), z^{'}_{a_i}=g_{\theta_e}(z_{a_i})
zai∽N(μai,diag(σai2)),zai′=gθe(zai)
z
k
=
p
k
,
z
k
′
=
g
θ
e
(
z
k
)
z_k=p_k, z^{'}_k=g_{\theta_e}(z_k)
zk=pk,zk′=gθe(zk)
这里,
g
θ
e
g_{\theta_e}
gθe表示编码器,
p
k
p_k
pk用
z
k
z_k
zk表示
4.2 The Aggregator
目的:不同的属性特征有不同的权重。比如说鼻子对于大象和老虎,鼻子对与大象的权重肯定大于老虎,所以这部分主要计算类和属性间的注意力权重。
α
k
a
i
=
R
k
a
i
g
θ
a
(
p
k
∣
∣
h
k
∣
∣
h
a
i
)
,
g
k
=
∑
a
i
α
k
a
i
z
a
i
′
+
z
k
′
\alpha_{ka_i}=R_{ka_i}g_{\theta_a}(p_k||h_k||h_{a_i}), g_k=\sum_{a_i}\alpha_{ka_i}z^{'}_{a_i}+z^{'}_k
αkai=Rkaigθa(pk∣∣hk∣∣hai),gk=ai∑αkaizai′+zk′
这里,
h
k
h_k
hk是整个类的语义embedding,
h
a
i
h_{a_i}
hai是属性特征,||表连接。
4.3 The Decoder
最后,对decoder为每一个类解码出完整的原型 p ^ k = g θ d ( g k ) {\hat p}_k=g_{\theta_d}(g_k) p^k=gθd(gk)。
原型融合策略
Why?
为什么要融合原型?一是基于均值的原型( p k p_k pk)中,由于新类中标签样本的缺失和不完整性导致均值偏差;二是基于补全的原型( p ^ k {\hat p}_k p^k)中,存在原始知识的噪声以及基类和新类的之间的差异,从而导致有偏差。因此对这两进行融合。
How?
如何融合?贝叶斯估计。
假设:估计的原型符合多变量高斯分布(MGD)
基于这样的假设:基于均值的原型和基于补全的原型可以作为MGD的一个样本
p
k
∽
N
(
μ
k
,
d
i
a
g
(
σ
k
2
)
)
p_k \backsim N(\mu_k,diag(\sigma_k^2))
pk∽N(μk,diag(σk2))
p
^
k
∽
N
(
μ
^
k
,
d
i
a
g
(
σ
^
)
k
2
)
{\hat p}_k \backsim N(\hat{\mu}_k,diag(\hat{\sigma})_k^2)
p^k∽N(μ^k,diag(σ^)k2)
将基于补全的原型分布看作为先验分布,并将基于均值的原型分布看作为观察到的少量标记样本的条件似然。
计算后验多变量高斯分布:
将这个后验多变量高斯分布的均值作为解决少变量任务的原型。
这里有四个未知变量,
μ
k
,
σ
k
,
μ
k
′
,
σ
k
′
\mu_k, \sigma_k, \mu^{'}_k, \sigma^{'}_k
μk,σk,μk′,σk′,如何估计这四个未知变量?利用未标记样本分别将
p
k
p_k
pk和
p
^
k
\hat{p}_k
p^k作为最后的原型(prototype),分别计算相应的参数。具体实现思路是:先用softma预测出某个样本属于类别的概率(这里以
p
k
p_k
pk为例):
然后再分别计算出相应的均值和协方差:
学习内容
原型网络,编码解码聚合器,CNN,WordNet,Golve
参考地址
文章主要用于自己整理思路,主要参考地址如下,里面有更加详细的说明和思路:
-https://zhuanlan.zhihu.com/p/423307748
-https://zhuanlan.zhihu.com/p/408084595
-https://zhuanlan.zhihu.com/p/374969253