Prototype Completion with Primitive Knowledge for Few-Shot Learning——CVPR2021

链接: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(NK), 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=0Cbase+Cnovel1{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=Dbasek1(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=Dbaseai1(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=Dbaseai1(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})) zaiN(μ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,ZZ={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=Sk1xSkfθ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}) zaiN(μ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(pkhkhai),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)) pkN(μ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^kN(μ^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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值