本人:刚开始读研的小菜鸡~~ 目前方向是基于小样本学习(FSL)的detection,欢迎方向类似的道友一起讨论鸭 ~带带我QQ1149062028
摘要
在基于迁移的小样本学习中利用特征分布
过去,优秀的backbone和有效的后处理,使得基于transfer的方法达到了最强的性能。基于这一思路,本文提出了一种新的基于transfer的方法,在两点做了改进:
- 对特征向量预处理,使其接近高斯分布
- 利用一种optimal-transport 启发式算法,进行预处理
1.Intro
基于迁移结构(也叫backbone结构):通常训练的域与实际的域并不相同。所以,使用backbones提取的特征向量的分布非常复杂。因此,数据分布的强假设 会使得其方法不能很好的利用提取出的特征。所以,从两个方面解决了基于迁移的小样本学习问题。1,就是预处理特征使其拟合高斯。2,利用这个特定分布。(这个思想要归功于一个优秀的、基于最大后验和最优运输的算法)
2. 方法
2.1 问题定义:
Dbase | 包含大量的有标签样本,来自K个类 |
Dnovel | 也叫做task,包含少量的有标签样本(support set),以及一些无标签的样本(query set) 来自w个novel类。 |
注意support和query都属于Dnovel。
目标是预测query set中的无标签样本。
所以,w way,s shot。以及q个无标签的样本。
所以,Dnovel中总共有w(s+q)个样本。ws个有标签,wq个用来分类。
2.2 特征提取
首先,仅使用Dbase来训练神经网络的backbone。本文中,同时使用了两个backbone,即WRN+Resnet和Densenet。训练好的backbones(用fφ表示)具有很好的泛化能力。倒数第二层应用relu,所以特征是非负的。
2.3 特征预处理
以前的工作总是会或明或暗的假设来自同一个类别的特征符合一个特定分布(如正态),却无人验证过。而事实呢,很可能backbone提出的特征分布并不是正态分布。一个简单的例子是,一个novel class由两个base class组成。这种情况下,已经训练好的backbone可以区分novelclass中的两个基类,我们想要将输入分组。(没看懂这个例子说明了啥)
领域中的很多文章讨论了不同的统计方法,如正则化,来更好的拟合,对于一些以证明的分布,它可以表现的很好,然而,如果输入数据的分布未知,可能导致更差。所以提出特征预处理使其更好地拟合典型分布。具体来说,使用了如下的幂变换:
Power transform(PT):
定义v=fφ(x),x∈Dnovel。v是从Dnovel中提取的特征。这里对特征进行了幂变换,他和tukey’s Transformation Ladder很像。
tip:
一个介绍Transformations: Tukey’s Ladder of Powers的视频。
于是,对于向量v,对其的操作如下:
ε是一个极小的正数用于确保x是正数。上面的幂变换有2个作用
- 可以通过调整β来减少分布的skew,(使之变为正态)
- 单位方差投影(就是除以它的模)将特征缩放到同一个尺度下,所以大方差特征也不会占据主导地位。
要知道高斯分布在很多场景都很有用,这样预处理可以将任何数据映射到接近高斯分布的分布。
(具体为什么就能映射成高斯还需了解)
注意到β=1时似乎没变,一般来说,β改变时分布也会改变,例如,如果分布右偏,减少β,而将β减到负值时,这个分布又会左偏。通过实验,发现β=0.5时可以得到期待的结果。用图来表示就是:
2.4 MAP(最大后验估计
预处理后的特征已经接近高斯了,好的class center对预测很有帮助,现在我们讨论怎样估计好class center,尤其当样本有限、并且类内只有一部分样本有标签时。具体说,就是利用每一个类中的样本先验知识。在这个假设下,我们通过最大后验(MAP)(maximum a posteriori probability)来计算centers,这与最小化Wasserstein距离很相似?。因此,我们设计了一个基于Wass距离度量的迭代过程,使用sinkhorn算法,来估计从特征向量初始分布,到其对应的高斯分布平衡采样之间的最优运输。注意,这里我们采用了通常所说的转导方法,即用图模型将有标签样本传播到无标签样本中。
下面,定义表示如下
符号 | 说明 |
---|---|
fS | 有标签样本对应的特征向量的集合 |
fQ | 无标签样本对应的特征向量的集合 |
l(f) | 特征向量对应的label,f∈fS∪fQ |
i | 无标签样本的索引,i∈(0,wq),所以fQ=(fi)i ,(集合的第i个) |
cj | 是class j 的center,这个center可以理解为 j 的特征空间中最中心的那个特征向量 |
我们的算法包括几个步骤,首先,用soft allocation matrix来估计class centers。然后,用新发现的class centers更新allocation matrix,下面详细介绍:
Sinkhorn mapping:
如果我们用最大后验估计来计算每个类的center,假定每个类服从高斯分布,通常需要计算的是:
大写的C表示合理的标签集。可以观察到最后一项对应于Wass的最优运输距离。因此,受到sinkhorn算法的启发,如下定义映射矩阵:
M是一个wq行,w列的矩阵。表示wq个待分类样本属于w个类中的概率。其中Lij表示无标签样本i和class j’s center的欧氏距离。右边的第二项,表示矩阵M的信息量(熵),H(M)=-ΣijMij log(Mij),λ增加可以使熵减小,所以这一项可以让计算更有效率,减少homogeneous。
p是矩阵M每一行的总和,q是每一列的求和。
所以p
表示待分类样本的数量的分布。q
表示每一个类的待分配样本数量的分布。
注意,这里采用的是soft class mapping,就是说1个样本可以同时分到不同的类(如(0.5 0.2 0.3),而非(1 0 0))。为保持高斯分布的一致性,代价函数L由 fi-cl(fi)的欧式距离组成
关于sinkhorn算法
Iterative center estimation:
在这一步,目标是估计更精确的class center。如算法1,将Cj初始化为class j的有标签样本的平均值。然后迭代的估计cj。每一步中,使用sinkhorn map来计算待分类样本的矩阵M。随着有标签样本一起,用分配在class j 的那个soft概率对所有特征向量进行加权平均,从而重新计算cj。
Iterative center estimation:
在这一步,目标是估计更精确的class center。如算法1,将Cj初始化为class j的有标签样本的平均值。然后迭代的估计cj。每一步中,使用sinkhorn map来计算待分类样本的矩阵M。随着有标签样本一起,用分配在class j 的那个soft概率对所有特征向量进行加权平均,从而重新计算cj。
μj是迭代中的Cj。注意有标签样本不参与过程。他的标签并非soft,而是0和1。
所以在公式中,分子左边项是class j中每个样本向量的加权求和,而右边项是class j 对应的support (labeled)向量直接(权重为1)**的求和。分母左边是s个有标签乘上权重1,加上class j每个样本的confidence。(就是class j所有样本向量的求和,除以,class j所有样本的置信)
proportioned center update:
为了避免在算法的早期迭代中偏离,提出使用一个惯性参数(其实就是学习率)。以便慢点更新。
整体算法:
提到了很多次的文章:有机会看看
Simpleshot: Revisiting nearest-neighborclassification for few-shot learning