简单介绍一下我们被 CVPR 2020 录用的一个小样本学习的工作《Boosting Few-Shot Learning With Adaptive Margin Loss》(代码稍后放出),论文地址如下:
1、背景
近年来,在深度网络的帮助下,计算机已经在图像识别上取得了超越人类的效果。然而,深度神经网络参数量巨大,因此需要大量有标签的数据来训练。现实世界中,有很多场景没有这么多的标注数据,获取标注数据的成本也非常大,例如在医疗领域、安全领域、终端用户手动标注等。相比之下,借助于之前丰富的知识积累,人类只需看一次就能轻松识别出新的类别。受到人类这种利用少量样本即可识别新类能力的启发,人们开始研究小样本学习问题:在没有大量训练数据的条件下,如何让深度神经网络也能够像人类一样,把过往的经验迁移到新的类别上。
在小样本学习问题中,我们假设有一组基类,以及一组新类。每个基类具有足够的训练样本,而每个新类只有少量标记样本。 小样本学习的目的是通过从基类转移知识来学习识别具有少量标注样本的新类别。常见的 setting 有如下两种:
- 标准小样本:给定一个大规模的训练集作为基类(base class),可以类比于人类的知识积累,对于从未见过的新类(novel class,与基类不重叠),借助每类少数几个训练样本,需要准确识别新类的测试样本。
- 广义小样本:相比与小样本学习,广义小样本学习中测试样本不仅包含新类,还可以包含基类,因此更具挑战性。
基于度量学习的元学习方法在小样本学习上表现出了很好的性能,它通过学习一个好的特征表示,使得在特征空间中,同类样本聚集,异类样本分开。这样,只需简单通过和各类样本的距离比较,就能预测一个新类样本所属的类别。
![](https://pic1.zhimg.com/80/v2-68e3389ad5f2b3ff16319a6be34edd50_1440w.jpg)
2、回顾——基于度量学习的元学习方法
元学习(meta-learning)是一种处理小样本学习的常用框架,它包含 meta-training 和 meta-testing 两个阶段。在 meta-training 阶段,模型按照一个个 episode 来训练:在每个 episode 中,首先构造一个 task(从整个 base class 数据集中抽取一些样本来组成一个小训练集和小测试集) ,然后用它来更新模型。在 meta-testing 阶段,我们用学到的模型来预测 novel class 中的样本。近年来,基于度量学习(metric learning)的元学习方法变得很流行,它假设存在这样一个 embedding space,每个类别的样本聚类在一个代表点(class representation)周围,而这些类代表点当作每个类的参考点来预测测试样本的标签(比如距离测试点最近的 class representation 所对应的类别作为测试样本的标签)。【可以参看 Prototypical Network 和Global Class Representation 两个文章】
损失函数
3、自适应边际损失(Adaptive Margin Loss)
![](https://pic1.zhimg.com/80/v2-860dadc45e09ea952e0e501f0ac5c57c_1440w.jpg)
3.1 类别相关的边际损失(CRAML)
3.2 任务相关的边际损失(TRAML)
到目前为止,我们都只考虑边际与任务无关。如果每次只考虑一个 meta-training task 中涉及的类别,那么可以更加精细地生成适合的边际。通过将一个 meta-training task 中的每个类与该 meta-training task 中其他类一一比对,我们可以衡量一个 task 内“相对的”语义相似度,从而生成适合这个 task 的边际。
![](https://pic1.zhimg.com/80/v2-20ee167148507fddd28dfacb5121739c_1440w.jpg)
![](https://image.jiqizhixin.com/uploads/editor/b3d08bd4-eec8-4a52-a2ab-bedf065417cf/1591067422018.png)
3.3 扩展到广义小样本学习
广义小样本学习中,测试数据既有来自新类也有来自基类,因此比标准小样本学习更加挑战。我们的自适应边际设计得非常灵活,用它训练得到的 embedding 和度量模块可以直接用来预测测试样本的标签。
4、实验验证
4.1 标准小样本学习
我们在 mini-ImageNet 上进行验证,选取了 AM3 和 Prototypical Network 作为 backbone。可以看到, TRAML 的引入显著提高了两个 backbone 的分类精度,这说明我们的设计可以有效增强基于度量学习的元学习方法。同时,AM3 + TRAML 超越了 state-of-the-art 的结果。
![](https://pic4.zhimg.com/80/v2-4a152e72750787d6a32b874bc66f79b7_1440w.jpg)
4.2 广义小样本学习
我们在 ImageNet 2012 上进行验证,选取了 Dynamic FSL 作为 backbone。我们首先加入 TRAML 在基类上训练 embedding 模块,然后用训练得到的 embedding 模块来提取所有训练样本的特征。后续 Dynamic FSL 中用到的 weight generator 采用刚刚计算出的特征作为输入。最后,我们把训练 weight generator 的原始分类损失函数替换为 TRAML 来进行训练。可以看到,TRAML 的引入在新类和全类上的性能都超越了 baseline,同时对于不同的 shot 数也都一致地好。
![](https://pic3.zhimg.com/80/v2-640094463b2e8c9a096b109f035cbe3e_1440w.jpg)
4.3 Ablation Study
我们以 AM3 为 backbone,分别测试了原始分类损失,NAML,CRAML 和 TRAML 的性能。
![](https://pic2.zhimg.com/80/v2-02fe44017807c5b551ae9860fa6f8d0d_1440w.jpg)
5、总结
本文从 CV 和 NLP 多模态的视角切入,通过考虑类别的语义信息来提升小样本学习的性能。本文提出在类别之间加入自适应的边际距离来提升基于度量学习的元学习性能,其中的边际距离是通过类别之间的语义相似度自动生成的。直观上,语义上越相似的类别之间越难区分,设定的边际距离也越大。大量的实验表明,本文的方法在标准小样本分类和广义小样本分类任务上都显著超越了现有的方法。