Large-Scale Few-Shot Learning: Knowledge Transfer With Class Hierarchy 论文笔记

前言

在大规模小样本学习(large-scale FSL)中,有这样一个baseline:使用所有的源类(source class)训练一个feature embedding模型,然后用这个模型提取出目标类(target class)中样本的特征,以进行最近邻分类。从下图可以看出,仅使用简单的最近邻(NN)方法得到的结果,甚至能与目前最先进的FSL模型相匹配:
在这里插入图片描述
这就说明了一个问题:在SGM、PPA和LSD这些FSL模型中的知识迁移基本上都是通过feature embedding模型提取的可转移特征(transferable feature)实现的。也就是说,只有当这些可转移特征能够更好的表示目标类的样本时,大规模小样本学习的性能才会变得更好。

由此,本文提出了一种新的FSL模型,如下图所示,通过让源类和目标类共享一个类层次结构(class hierarchy)来学习更具有可转移性的feature embedding模型。主要思想是:将源类和目标类之间的语义关系作为先验知识,进而学习feature embedding模型以实现对目标类样本的识别。
在这里插入图片描述

这种语义关系被编码为类似于树的类层次结构,这样的一个树能够覆盖所有现存的目标类别。源类和目标类在树中都是作为叶子节点,在语义上相似的类被分组,然后每个簇在上一层形成一个父节点(即超类节点)。

为了利用类层次结构中的先验知识,本文还提出了层次预测网络(hierarchy prediction network),它可以将类层次结构编码到分类过程中:

  • 在训练时,源类的样本被送入一个CNN中,后跟层次预测网络。由于源类和目标类肯定会存在一些共同的超类,因此这个层次预测网络就能学习到一些可转移特征用于FSL;
  • 在测试时,从目标类中采样两种样本:few-shot样本和test样本,需要从这两种样本中提取出视觉特征,然后使用few-shot样本的视觉特征作为参考,使用最近邻方法来识别test样本。

模型设计

首先来定义大规模FSL问题。设SsourceS_{source}表示源类集,StargetS_{target}表示目标类集,这两个类集是不重叠的,即SsourceStarget=ϕS_{source} \bigcap S_{target}=\phi。然后从SsourceS_{source}中采样训练集DsourceD_{source},从StargetS_{target}中采样few-shot样本集DtargetD_{target}和测试集DtestD_{test}DsourceD_{source}中每个类都有充足的带标记的样本,而DtargetD_{target}中每个类只有少量带标记的样本。那么大规模FSL的目标就是在DtestD_{test}上获得好的分类结果。

本文的大规模FSL方法包括两个阶段:

  1. 学习可转移的视觉特征;
  2. 识别DtestD_{test}中的样本标签。

1. 特征学习

本文提出了一种可转移特征学习模型,在这个模型中,首先构建树状类层次结构,以编码源类和目标类之间的语义关系;然后利用层次预测网络将类层次结构中的先验知识整合起来,从而为大规模FSL学习可转移的视觉特征。使用DsourceD_{source}和语义关系来训练这个模型。

类层次结构

首先来说一下类层次结构的这个树是怎么构建的,

  • 首先,将每个源类和目标类的类名表示为词向量(word vector),它们都作为树的叶子节点,构成类层次结构中最底部的类层;
  • 从叶子节点开始,将lower layer中的词向量进行聚类,得到upper layer中的节点,将每个聚类中心作为upper layer中的父节点(即超类节点),该父节点的词向量是通过对其子类的词向量做平均得到的。同一层的超类节点构成了一个超类层。

这样就可以得到类层次结构的一个树,共包含nn个超类层和一个类层,设l1l_1表示类层,li(i=2,...,n+1)l_i(i=2,...,n+1)表示nn个超类层。如下图所示:
在这里插入图片描述

层次预测网络

在获得类层次结构之后,接下来就是如何利用它了,也就是本文提出的模型,这个模型是通过使用层次预测网络扩展CNN得到的,如下图所示:
在这里插入图片描述
层次预测网络(图中的紫色框)预测的是超类的标签,预测过程可分为两步:

  1. 首先在不同的类/超类层上预测标签。在这一步中,在CNN的顶上添加n+1n+1个不共享的全连接(FC)网络,其中包括softmax层,给定一个目标样本,每个FC网络在相应的层上预测类/超类的概率分布;
  2. 然后将类/超类层的层次结构编码为超类标签预测。也就是说,通过将第一步中获得的当前层和较低层的预测结果组合起来,来推断每层的超类标签。在这一步中,通过使用nn个不共享的FC网络来进行编码,每个FC网络推断出相应层的超类标签。具体来说就是,对于最底部的超类层(l2l_2层)对应的FC网络来说,将第一步中后两层(l1l_1l2l_2)的输出作为该FC的输入,FC的输出就是l2l_2的最终预测结果:
    在这里插入图片描述
    其中pl1p_{l_1}表示第一步中l1l_1的FC的输出,也就是类层的预测结果;pl2p_{l_2}表示第一步中l2l_2的FC的输出,也就是最底部的超类层的预测结果。Fl22F^2_{l_2}是第二步中l2l_2的FC操作;最后的输出pl2^\hat{p_{l_2}}表示l2l_2上对所有可能超类标签的预测分布。

那么,也可以得到出li(i=3,...,n+1)l_i(i=3,...,n+1)层的FC输出的预测结果:
在这里插入图片描述
Fli1F^1_{l_i}Fli2F^2_{l_i}分别表示lil_i在第一步和第二步中的FC网络,plip_{l_i}是第一步的输出,pli^\hat{p_{l_i}}是第二步的输出。

给定输入图像xx,损失函数为:
在这里插入图片描述

2. 标签推理

一旦通过训练得到了特征学习模型,那么接下来就可以利用这个模型提取DtargetD_{target}DtestD_{test}中图像样本的特征。利用这些视觉特征,就可以直接使用最近邻方法推断DtestD_{test}中样本的标签。具体来说就是,计算DtargetD_{target}中每类样本的视觉特征的平均,然后给定DtestD_{test}中的某个样本,计算它与每个类平均的余弦距离,距离最小的类标签就作为这个test样本的标签。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章