Few-Shot Learning

Few-Shot Learning_归一化

与普通的分类学习方法不同,Few-Shot Learning通过小样本Support Set 来判断Query的类别。


Few-Shot Learning_归一化_02

Few-shot learning 是一种Meta Learning。

Meta Learning 就是自主学习。


Few-Shot Learning_特征向量_03


1.Supervised Learning vs. Few-Shot Learning

Few-Shot Learning_数据集_04

Few-Shot Learning_归一化_05

与监督学习相比,Few-Shot Learning 的Query Sample 的类别也是未知的。


Few-Shot Learning_特征向量_06

Support Set 通常是一个二维矩阵的形式。

k-way 表示类别的个数

n-shot 表示每个类样本的个数


Few-Shot Learning_特征向量_07


Few-Shot Learning_归一化_08


Few-Shot Learning_特征向量_09

变化关系如上图所示。

显然类别越多准确率越低,shots 越大,准确率越高。


2.Basic Idea

Few-Shot Learning_归一化_10

从大规模数据集中训练CNN网络,学习相似函数sim。

然后应用sim进行预测,将Query 与 Support Set 依次求sim,取最高得分的类。


Few-Shot Learning_数据集_11


2.1 常见的数据集datasets

Few-Shot Learning_特征向量_12


Few-Shot Learning_数据集_13


Few-Shot Learning_归一化_14

字符集Omniglot。


Few-Shot Learning_数据集_15

图像集Mini-ImageNet


3.Siamese Network

3.1 Learning Pairwise Similarity Scores

Few-Shot Learning_归一化_16

将data分为两类,Positive and Negative Samples。

每个数据都是一个三元组:第一个图片、第二个图片、标签。1表示是同一类,0表示不是同一类。


Few-Shot Learning_数据集_17

构建一个CNN提取图片的特征向量。


Few-Shot Learning_特征向量_18

每次求输入两个图片,通过CNN得到两个特征向量Few-Shot Learning_特征向量_19。然后相减取绝对值Few-Shot Learning_归一化_20,再通过全连接层和激活函数Sigmoid得到值在Few-Shot Learning_归一化_21之间。然后与标签target 计算Loss。使用Loss进行梯度更新全连接层和CNN的参数。

target为0时同理。

Few-Shot Learning_特征向量_22


3.2 Triplet Loss

Few-Shot Learning_特征向量_23

Triplet Loss 是每次选择一个anchor 作为锚点,然后选择同类的另一个作为postive、不同类的一个作为negative。


Few-Shot Learning_特征向量_24

通过CNN 提取特征向量后,分别与Few-Shot Learning_数据集_25

Few-Shot Learning_特征向量_26


Few-Shot Learning_归一化_27

我们的目的是让Few-Shot Learning_数据集_28 更小,Few-Shot Learning_归一化_29 更大。因此考虑设置超参数Few-Shot Learning_特征向量_30

Few-Shot Learning_归一化_31

否则Few-Shot Learning_数据集_32。然后梯度下降更新CNN。


Few-Shot Learning_归一化_33

在于预测的时候,我们计算两个图片的在特征向量空间的距离即可。


3.3 Summary

Few-Shot Learning_归一化_34


CNN用于提取特征向量,对于Query要么使用Sigmoid 近似相似度sim,要么使用distance 比较。


4.Pretraining and Fine Tuning

Few-Shot Learning_数据集_35

cosine similarity 是两个二范数为1的向量的内积。几何意义上看是一个向量在另一个向量上的映射范围是Few-Shot Learning_数据集_36


若模长不为1,可以进行归一化。

Few-Shot Learning_归一化_37


4.1 Softmax Function

Few-Shot Learning_归一化_38


Few-Shot Learning_归一化_39

Softmax 函数常常用于输出概率密度分布,将输入的一组向量进行softmax后得到对应的概率分布。


Few-Shot Learning_数据集_40

Softmax Classifier 的组成由二维向量W和常量b组成。

4.2 Few-Shot Prediction Using Pretrained CNN

Few-Shot Learning_数据集_41


Few-Shot Learning_归一化_42

使用CNN提取特征向量,然后对于Support Set中的每类进行取均值,然后归一化。

Few-Shot Learning_数据集_43

归一化后堆叠为矩阵M。

Few-Shot Learning_特征向量_44

这样Mq 的结果就是cos 相似值,然后进行softmax即可得到概率密度分布。

4.3 Fine-Tuning(微调)

Few-Shot Learning_归一化_45

在使用CNN进行Few-Shot 预测时,softmax 的W和b时固定的。

W就是Support set 中计算堆叠后的M,b=0。


Few-Shot Learning_归一化_46

我们对softmax得到的Few-Shot Learning_归一化_47 和真实标签Few-Shot Learning_特征向量_48


Few-Shot Learning_数据集_49

为了避免过拟合,一般还会加上Regularization。


Few-Shot Learning_归一化_50

实验证明Fine Tuning效果会更好。


4.4 优化Tricks

Few-Shot Learning_归一化_51


Few-Shot Learning_数据集_52

Few-Shot Learning_数据集_53

对所有样例得到的sotamaxFew-Shot Learning_特征向量_54


Few-Shot Learning_归一化_55

Trick3 使用Cosine Similarity 代替Few-Shot Learning_特征向量_56。本质就是将Few-Shot Learning_特征向量_56


4.5 Summary

Few-Shot Learning_归一化_58

大规模数据集预训练CNN,使用CNN提取特征向量。

计算Support Set 每个类别的特征向量均值。

然后比较两两的距离,选择分类。

Few-Shot Learning_特征向量_59

在Pretraining后,还可以通过Fine Tuning优化Softmax 分类器。同时也可以在训练分类器的同时反向传播更新CNN参数。