小样本综述

A curated list of articles and codes related to small data challenge come to few-shot learning.

Posted by Yean on September 30, 2021

小样本综述

对于“小样本”这个词的定义不同的文章中定义不同,比如齐国君的综述1中就将小样本定义为一个更宽泛的场景,即在标记数据少甚至无标记数据场景下所做的研究工作都归为在解决小样本问题。而发表于ACM的一篇综述2则将小样本和few-shot划等号。本文主要借鉴的是齐国君综述的划分方法,也方便大体定位Few-Shot在深度学习领域的位置。

一、引言

深度学习方法在很多任务中表现好,多数情况是因为依赖于大量的标记数据,从而将模型训练到接近人的表现。然而在许多任务中,收集大量标注数据是非常困难的,因此催生了很多不使用标注数据来获得鲁棒模型的研究工作,主要包括以下两个大的思路方向:

  • 无标注数据:无标注数据通常来说获取容易且数量较多,这些无标注数据的分布对于一个新的学习任务来说可以起到一定的指引作用。无标注数据主要用在无监督半监督方法中,至于具体采用哪种方法取决于那些额外的标注数据对于模型训练是否有明显的提升。无标注数据帮助模型形成不同任务之间的域间隙(domain gap),这是无监督和半监督中域适应方法(domain adaption)这一大类方法的核心思路。
  • 辅助任务:可以将小数据任务作为一个辅助任务的边缘信息。也就是说有一个目标任务之后,找到一个相关的、类似的任务来辅助目标任务的训练。其中包括zero-shot learning(无监督,无标注数据)和few-shot learning(半监督,少量的标记数据)。

image-20210930110321454

1.1 Domain adaptation

在无监督和半监督领域都有应用到Domain adaptation的方法。

  • domain可以理解为场景,比如飞机采集的数据,和卫星采集的数据,就可能为两个domain。在飞机domain训练表现良好的模型,直接换到卫星domain里表现就可能不好。
  • 特征空间可以理解为评测体系,好比我要区分人和树,那么特征空间里的特征只需要包括是否有五官、是否有四肢之类简单的特征就足够区分。如果要区分人和人,仅凭五官和是否有四肢这些简单特征显然就不足以区分,也就是说在区分人和树那个特征空间中,不能完成人和人的分类任务
  • domain和特征空间:从上边对domain和特征空间的解释可以分析出,不同的domain会有与其相适应的特征空间,而如果目标任务或者数据来自于不同的domain,就需要domain adaption方法,将source domain和target domain的数据映射到同一个特征空间,于是在特征空间中对source domain训练的目标函数,就可以迁移到target domain上,提高target domain上的准确率。

人类能够轻易的适应新的domain并识别熟悉的目标,但是检测模型在更换domain之后,会有明显的准确率下降。一些之前的专注于域迁移的深度神经网络模型主要是无监督域迁移方法(UDA),并且需要大量的目标域数据以及耗费大量时间,然而UDA和其他的无监督方法一样,只能处理简单的分类任务,对于目标检测等等需要精确的位置信息以及高分辨率信息的复杂任务,无法满足需求。

而监督域迁移方法(SDA)基于论文3的研究,有限的目标样本仍然可以在很大程度上反映目标域的特征,比如照片、天气状况、外观等等。然而,仅使用少量目标数据样本来学习域不变表示非常具有挑战性,并且检测器需要细粒度的高分辨率特征来进行可靠的定位和分类。

1.2 无监督方法

无监督方法主要是通过寻求学习到对于数据足够泛化的表示(representation),来完成各种深度学习任务。比如VAE

img

image-20210927170737918

这种纯粹基于数据的方法,目前只能处理比较简单的任务,同时应用面比较窄对环境要求苛刻,主要停留在科研阶段。

与纯无监督的方法相比,zero-shot learning 通常通过词嵌入(word embedding)和视觉属性探讨概念之间的语义相关性,并使用它们将知识从源转移到目标概念。 鉴于一个新的样本,ZSL可以将其分配给看不见的概念(concept),其语义嵌入最接近样本的表示。 ZSL是无监督的,因为ZSL没有使用待识别类的标记样本训练模型。

ZSL就是希望我们的模型能够对其从没见过的类别进行分类,让机器具有推理能力,实现真正的智能。其中零次(Zero-shot)是指对于要分类的类别对象,一次也不学习。

假设我们的模型已经能够识别马,老虎和熊猫了,现在需要该模型也识别斑马,那么我们需要告诉模型,怎样的对象才是斑马,但是并不能直接让模型看见斑马。所以模型需要知道的信息是马的样本、老虎的样本、熊猫的样本和样本的标签,以及关于前三种动物和斑马的描述。这样的过程就是语义嵌入或者词嵌入。

img

1.3 半监督方法

半监督方法同时使用未标记和有标记的样本来训练模型。 该想法在于,无标注的数据提供了数据通常情况下在特征空间的分布信息,并且可以通过探索该分布来训练强大的模型。 例如,鲁棒模型应该在随机变换(如平移、旋转、甚至随机扰动)下进行稳定和平滑的预测。在这个基础上加入一些监督信息对模型进行校正,从而实现更好的效果。

Few-Shot learning(FSL)就是半监督方法中比较热门的一个方向。

自监督预训练

自监督预训练通常使用无标记的source data来预训练一个网络,使其能够被迁移到一个在target dataset监督训练过程中。自监督预训练在标记数据成本很高的情景下非常有用,比如医疗和卫星数据中。

自监督预训练通常需要在一个大的数据集中花费大量的训练时间,比如SimCLR就在ImageNet上训练了3200个epoch。同时instance contrastive learning对于数据增强策略的选择也是比较敏感的,需要许多的实验来选择最优的数据增强策略4

预训练策略也可以分为两种:

  1. generalist pretraining:由于特定domain的数据集并不总是可以获取到的,所以作为替代方案,许多实验者会使用在一个很大型的通用的类似于ImageNet这种数据集上预训练模型。
  2. specialist pretraining:在特定的数据集上进行预训练,通常会有更加明显的迁移结果提升5

image-20211130171955181

Instance Contrastive Learning

通过判定增强过的图片是否来源于同一个原图像来训练网络,比如有名的Kaiming提出的MoCo6

Hierarchical Pretraining

image-20211130210106954

HPT7方法将Generalist Pretraining和Specialist Pretraining方法结合,在使用大的通用数据集预训练之后,再在与目标数据相似的数据集上按顺序进行预训练,从而在利用现有通用模型的同时提高specialist pretraining的性能。

二、Few-shot Learning

2.1 问题定义

人类非常擅长通过极少量的样本识别一个新物体,比如小孩子只需要书中的一些图片就可以认识什么是“斑马”,什么是“犀牛”。在人类的快速学习能力的启发下,研究人员希望机器学习模型在学习了一定类别的大量数据后,对于新的类别,只需要少量的样本就能快速学习,这就是 Few-shot Learning 要解决的问题。

Few-shot Learning 是 Meta Learning 在监督学习领域的应用。

Meta Learning,又称为 learning to learn,在 meta training 阶段将数据集分解为不同的 meta task,去学习类别变化的情况下模型的泛化能力,在 meta testing 阶段,面对全新的类别,不需要变动已有的模型,就可以完成分类。

形式化来说,few-shot 的训练集中包含了很多的类别,每个类别中有多个样本。在训练阶段,会在训练集中随机抽取 C 个类别,每个类别 K 个样本(总共 CK 个数据),构建一个 meta-task,作为模型的支撑集(support set)输入;再从这 C 个类中剩余的数据中抽取一批(batch)样本作为模型的预测对象(batch set)。即要求模型从 C*K 个数据中学会如何区分这 C 个类别,这样的任务被称为 C-way K-shot 问题。

训练过程中,每次训练(episode)都会采样得到不同 meta-task,所以总体来看,训练包含了不同的类别组合,这种机制使得模型学会不同 meta-task 中的共性部分,比如如何提取重要特征及比较样本相似等,忘掉 meta-task 中 task 相关部分。通过这种学习机制学到的模型,在面对新的未见过的 meta-task 时,也能较好地进行分类。

image-20210930002807562

下图展示的是一个 3-way 2-shot 的示例,可以看到 meta training 阶段构建了一系列 meta-task 来让模型学习如何根据 support set 预测 batch set 中的样本的标签;meta testing 阶段的输入数据的形式与训练阶段一致(3-way 2-shot),但是会在全新的类别上构建 support set 和 batch。

img

Few-shot Learning(FSL)和Zero-shot Learning(ZSL)类似的一点在于,它同样将不同的concept,共享嵌入的特征表示(embedding representation)。不同的是,FSL可以从收集的基础concept开始训练元模型,之后可以用新添加的样本(也就是few-shot中的“few”)来更新模型参数。

2.2 few-shot处理分类问题

早期的 Few-shot Learning 算法研究多集中在图像领域,如下图所示,Few-shot Learning 模型大致可分为三类:Mode Based,Metric Based 和 Optimization Based。

image-20210930010905121

其中 Model Based 方法旨在通过模型结构的设计快速在少量样本上更新参数,直接建立输入 x 和预测值 P 的映射函数;Metric Based 方法通过度量 batch 集中的样本和 support 集中样本的距离,借助最近邻的思想完成分类;Optimization Based 方法认为普通的梯度下降方法难以在 few-shot 场景下拟合,因此通过调整优化方法来完成小样本分类的任务。

基于模型的方法

Meta Network 8 的快速泛化能力源自其“快速权重”的机制,在训练过程中产生的梯度被用来作为快速权重的生成。模型包含一个 meta learner 和一个 base learner,meta learner 用于学习 meta task 之间的泛化信息,并使用 memory 机制保存这种信息,base learner 用于快速适应新的 task,并和 meta learner 交互产生预测输出。

image-20211012092343023

基于距离度量学习(metric learning)的方法

如果模型能够准确衡量两个图像的相似性(距离),那么它同样也能区分没有见过的无标注图像的距离。

如果在 Few-shot Learning 的任务中去训练普通的基于 cross-entropy 的神经网络分类器,那么几乎肯定是会过拟合,因为神经网络分类器中有数以万计的参数需要优化。

相反,很多非参数化的方法(最近邻、K-近邻、Kmeans)是不需要优化参数的,因此可以在 meta-learning 的框架下构造一种可以端到端训练的 few-shot 分类器。该方法是对样本间距离分布进行建模,使得同类样本靠近,异类样本远离。实现方法通常为,在训练过程中以距离或度量为条件对少数标记实例进行预测。常用的距离度量包括consine距离、欧氏距离、卷积网络相似模型、ridge regression、图神经网络。

孪生网络(Siamese Network)9通过有监督的方式训练孪生网络来学习,然后重用网络所提取的特征进行 one/few-shot 学习。

image-20210930011448668

具体的网络是一个双路的神经网络,训练时,通过组合的方式构造不同的成对样本,输入网络进行训练,在最上层通过样本对的距离判断他们是否属于同一个类,并产生对应的概率分布。在预测阶段,孪生网络处理测试样本和支撑集之间每一个样本对,最终预测结果为支撑集上概率最高的类别。

原型网络(Prototype Network)10 基于这样的想法:每个类别都存在一个原型表达,该类的原型是 support set 在 embedding 空间中的均值。然后,分类问题变成在 embedding 空间中的最近邻。

如图 6 所示,c1、c2、c3 分别是三个类别的均值中心(称 Prototype),将测试样本 x 进行 embedding 后,与这 3 个中心进行距离计算,从而获得 x 的类别。

img

前面介绍的几个网络结构在最终的距离度量上都使用了固定的度量方式,如 cosine,欧式距离等,这种模型结构下所有的学习过程都发生在样本的 embedding 阶段。

Relation Network 11 认为度量方式也是网络中非常重要的一环,需要对其进行建模,所以该网络不满足单一且固定的距离度量方式,而是训练一个网络来学习(例如 CNN)距离的度量方式,在 loss 方面也有所改变,考虑到 relation network 更多的关注 relation score,更像一种回归,而非 0/1 分类,所以使用了 MSE 取代了 cross-entropy。

img

Optimization Based方法

Ravi 等人 12 研究了在少量数据下,基于梯度的优化算法失败的原因,即无法直接用于 meta learning。

首先,这些梯度优化算法包括 momentum, adagrad, adadelta, ADAM 等,无法在几步内完成优化,特别是在非凸的问题上,多种超参的选取无法保证收敛的速度。

其次,不同任务分别随机初始化会影响任务收敛到好的解上。虽然 finetune 这种迁移学习能缓解这个问题,但当新数据相对原始数据偏差比较大时,迁移学习的性能会大大下降。我们需要一个系统的学习通用初始化,使得训练从一个好的点开始,它和迁移学习不同的是,它能保证该初始化能让 finetune 从一个好的点开始。

文章学习的是一个模型参数的更新函数或更新规则。它不是在多轮的 episodes 学习一个单模型,而是在每个 episode 学习特定的模型。

具体地,学习基于梯度下降的参数更新算法,采用 LSTM 表达 meta learner,用其状态表达目标分类器的参数的更新,最终学会如何在新的分类任务上,对分类器网络(learner)进行初始化和参数更新。这个优化算法同时考虑一个任务的短时知识和跨多个任务的长时知识。

文章设定目标为通过少量的迭代步骤捕获优化算法的泛化能力,由此 meta learner 可以训练让 learner 在每个任务上收敛到一个好的解。另外,通过捕获所有任务之前共享的基础知识,进而更好地初始化 learner。

以训练 miniImage 数据集为例,训练过程中,从训练集(64 个类,每类 600 个样本)中随机采样 5 个类,每个类 5 个样本,构成支撑集,去学习 learner;然后从训练集的样本(采出的 5 个类,每类剩下的样本)中采样构成 Batch 集,集合中每类有 15 个样本,用来获得 learner 的 loss,去学习 meta leaner。

测试时的流程一样,从测试集(16 个类,每类 600 个样本)中随机采样 5 个类,每个类 5 个样本,构成支撑集 Support Set,去学习 learner;然后从测试集剩余的样本(采出的 5 个类,每类剩下的样本)中采样构成 Batch 集,集合中每类有 15 个样本,用来获得 learner 的参数,进而得到预测的类别概率。这两个过程分别如图 8 中虚线左侧和右侧。

meta learner 的目标是在各种不同的学习任务上学出一个模型,使得可以仅用少量的样本就能解决一些新的学习任务。这种任务的挑战是模型需要结合之前的经验和当前新任务的少量样本信息,并避免在新数据上过拟合。

Finn 13 提出的方法使得可以在小量样本上,用少量的迭代步骤就可以获得较好的泛化性能,而且模型是容易 fine-tine 的。而且这个方法无需关心模型的形式,也不需要为 meta learning 增加新的参数,直接用梯度下降来训练 learner。

文章的核心思想是学习模型的初始化参数使得在一步或几步迭代后在新任务上的精度最大化。它学的不是模型参数的更新函数或是规则,它不局限于参数的规模和模型架构(比如用 RNN 或 siamese)。它本质上也是学习一个好的特征使得可以适合很多任务(包括分类、回归、增强学习),并通过 fine-tune 来获得好的效果。

文章提出的方法,可以学习任意标准模型的参数,并让该模型能快速适配。他们认为,一些中间表达更加适合迁移,比如神经网络的内部特征。因此面向泛化性的表达是有益的。因为我们会基于梯度下降策略在新的任务上进行 finetune,所以目标是学习这样一个模型,它能对新的任务从之前任务上快速地进行梯度下降,而不会过拟合。事实上,是要找到一些对任务变化敏感的参数,使得当改变梯度方向,小的参数改动也会产生较大的 loss。

few-shot的baseline范式

image-20210928210624033

image-20210928211031655

2.3 few-shot目标检测

现代卷积神经网络 (CNN) 的发展在一般目标检测 方面取得了巨大进步。 深度卷积网络检测模型需要大量带注释的训练数据才能使其性能饱和 。在小样本学习场景中,深度卷积网络检测模型会遭受更严重的过拟合,而且小样本检测和一般目标检测之间的差距大于小样本图像分类中的相应差距 。 如下表所示:

image-20210929202219640

image-20210929202722692

Few-shot Adaptive Faster R-CNN

近两年few-shot应用到目标检测任务中的工作有2019年的Few-shot Adaptive Faster R-CNN3,这篇工作主要创新点是设计了一个特征匹配机制以及强正则化。使用faster-rcnn作为backbone,结合了Domain adaption方法,并且由于结合了监督信息,相较于UDA方法动辄数万步的训练,论文中的Domain adaption方法只需要数百步的回传,提升了计算速度。所提出的SMFR方法使模型能够避免从少数目标数据样本中过度拟合,使得模型训练更稳定。

image-20210930000248180

这是论文里的3way-8shot的结果表:

image-20210930000946192

Frustratingly Simple Few-Shot Object Detection

这篇文章同样利用了faster-rcnn作为backbone。采用的是分类中之前常见的先用base数据集训练模型,然后固定一部分参数再fine-tune的方法。

训练分为两步,第一步先在数据集的基础类上训练整个物体探测器,例如Faster R-CNN,然后第二步将少量的新类和基础类组成一个迷你数据集训练模型,这时候只需微调探测器的最后一个层,冻结模型的其他参数。 在微调阶段,提出了一种实例级特征归一化方法来优化检测框的分类。

image-20210930002231052

论文中表示他们的方法相比其他的基于meta- learning的方法提升了2~20个百分点:

image-20210930002857265

FSCE: Few-Shot Object Detection via Contrastive Proposal Encoding

这是2021年CVPR发表的最新的方法,主要是基于Frustratingly Simple Few-Shot Object Detection这篇论文方法以及思路的延续和改进。在这项工作中观察并解决了基于微调(fine-tune)的方法的本质弱点——不断将新实例错误标记为易混淆的类别,并将小样本检测性能提高到新的SOTA。

这篇文章发现在few-shot应用到目标检测时,模型其实能够相对比较好的区分新类和背景,影响准确率的往往是相似类之间的误分类问题。

image-20211012095429300

设计了一个CPE loss,借鉴了对抗学习的思想,能够使得特征空间里不同类之间的分布离得更远,其实也是一种度量学习类的方法:

image-20210930003323908

这是第一个在few-shot目标检测 AP50中实现大于50%准确率的方法

image-20210930005143076

参考文献

[^]: [^]:

  1. Small Data Challenges in Big Data Era: A Survey of Recent Progress on Unsupervised and Semi-Supervised Methods 

  2. Generalizing from a Few Examples: A Survey on Few-shot Learning 

  3. Few-shot Adaptive Faster R-CNN  2

  4. Selfaugment: Automatic augmentation policies for self-supervised learning. 

  5. In-domain representation learning for remote sensing 

  6. Momentum Contrast for Unsupervised Visual Representation Learning 

  7. Self-Supervised Pretraining Improves Self-Supervised Pretraining 

  8. Munkhdalai, Tsendsuren, and Hong Yu. “Meta networks.” Proceedings of the 34th International Conference on Machine Learning-Volume 70. JMLR. org, 2017. 

  9. Siamese neural networks for one-shot image recognition 

  10. Snell, Jake, Kevin Swersky, and Richard Zemel. “Prototypical networks for few-shot learning.” Advances in Neural Information Processing Systems. 2017. 

  11. Sung, Flood, et al. “Learning to compare: Relation network for few-shot learning.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018. 

  12. Ravi, Sachin, and Hugo Larochelle. “Optimization as a model for few-shot learning.” (2016). 

  13. Finn, Chelsea, Pieter Abbeel, and Sergey Levine. “Model-agnostic meta-learning for fast adaptation of deep networks.” Proceedings of the 34th International Conference on Machine Learning-Volume 70. JMLR. org, 2017.