前言
近年来深度学习模型在视觉任务上取得了巨大的成功,但这种成功有一部分原因来自于庞大的标记数据以及大量的计算资源,这使得这些模型在处理几乎没有标记数据的新类时显得非常乏力。对于我们人类来说,在识别物体时,仅需少量的图像,或者甚至不需要图像而仅仅根据对物体的描述,就能根据以往的知识来识别物体。这是由于我们人类有先验知识,我们会利用自己的先验知识进行学习。如何让模型能够实现这种快速学习呢?元学习(meta learning)就是一种方法,也即学会学习。
本文就是利用对比来实现元学习,通过学习一个可转移的深度度量来比较图像之间的关系,即小样本学习;或者比较图像与类描述之间的关系,即零样本学习。现有的小样本学习方法通常将训练分解为一个辅助的元学习阶段,在该阶段中,以良好的初始条件、embedding或优化策略来学习可转移的知识,也就是先验知识。但是这些方法要么需要复杂的inference机制,要么需要复杂的RNN结构,要么通过优化策略进行微调来进行小样本学习,总之就是很复杂就对了,而本文提出的方法很简洁,也很灵活。
具体来说就是,提出了一个具有两个分支的Relation Network(RN),它通过比较query图像与每个新类中的少量样本图像之间的关系,来进行小样本学习:
- 首先,嵌入模块(embedding model)为query和training图像生成各自的embedding;
- 然后,通过一个关系模块(relation model)对这些embedding进行比较,判断它们的类别是否匹配。
RN的训练同样采用了episode策略,嵌入模块和关系模块都是端到端的元学习,注意RN中是一种可学习的非线性比较器,也就是一种可学习的非线性度量,这与MatchingNet和PrototypicalNet不同,MatchingNet中使用的是余弦距离,PrototypicalNet中是固定的线性度量,即平方欧氏距离。本文的RL比其它的方法更简单,因为没有使用RNN;也比其它的方法更快,因为没有微调。而且RL也可以直接泛化到零样本学习中,即在关系模型中比较query图像的embedding与类描述的embedding即可。
实现方法
1. 数据处理
对于小样本学习任务,有三种数据集:训练集,支持集和测试集。支持集和测试集共享同一个标签空间,而训练集有自己的标签空间,并且不和另外两种数据集共享。如果支持集中有 C C C个类,每个类有 K K K个带标签的样本,那么就可以称为 C C C-way K K K-shot。
虽然只用支持集原则上也可以训练出一个分类器,以将标签 y ^ \hat y y^分类给测试集中的样本 x ^ \hat x x^,但由于支持集中缺少带标签的样本,由此训练出的分类器的性能并不能让人满意。因此就要在训练集上进行元学习,以提取出先验知识,从而可以更好的在支持集上进行小样本学习,进一步更好的对测试集进行分类。
一种有效利用训练集的方法就是通过基于episode的训练来模拟小样本学习。在每次迭代中,一个episode是指,从训练集中随机选出 C C C个类别,每个类中选择 K K K个带标签的样本作为一个样本集(sample set) S = { ( x i , y i ) } i = 1 m S=\lbrace (x_i,y_i) \rbrace ^m_{i=1} S={ (xi,yi)}i=1m