A survey on Few-shot Learning (小样本学习)
机器学习已经成功地在数据密集型任务上得以应用,但通常却不能够处理数据很少的情况。最近,小样本学习(Few-shot Learning,FSL)被提出用于解决这个问题。在先验知识的基础上,FSL可以有效的涵盖一个只有极少监督信息数量样本的新任务。本文,我们将对小样本学习FSL进行一个系统的梳理。首先给出FSL一个形式化的定义,其次根据相关机器学习的问题进行分类,同时指出一个核心的关键问题即小样本学习不能依赖于传统的经验风险最小化的优化目标。基于如何将先验知识辅助解决小样本问题,本文从数据(Data)、模型(Model) 和 算法(Algorithm) 三个方面进行分析:
(1)数据:使用先验知识增强监督信息;
(2)模型:使用先验知识降低假设空间;
(3)算法:使用先验知识来更改对给定假设空间中最佳假设的搜索。
本文所使用的标记符号如下表:
标记 | 名称 |
给定的某一个学习任务 | |
训练集的个数 | |
数据集,分别对应训练集和测试集 | |
训练集 | |
真实样本的联合概率分布 | |
FSL模型学习到的 到 | |
模型训练的参数 | |
假设空间 |
,损失函数记作 , 预测结果为 , 其中
1、FSL形式化定义
小样本学习属于机器学习的范畴内,在机器学习中,通常定义为给定一组经验及对应的标签,通过计算机程序实现从经验到标签的映射关系。机器学习则是提高某一项指标,试图提升模型学习的效果。 例如在图谱分类任务中,给定一个训练和测试集合,我们设计一个模型,企图让模型学习到图像到标签对应的映射关系,并以准确率为评价指标。再例如,近些年来比较火的AlphaGo,通过自学习的方法与真人进行了多大3000多万次挑战交互后,才真正在胜率上超越人类。
经典的机器学习方法,通常需要大量的训练数据,正如前面所说的,这在某些应用上是无法做到的。因此我们需要引入一种小样本学习的方法。小样本学习的定义为:
以及对应的标签 , 小样本学习是指给定经验数据非常少的 的情况下,让模型学习其到 的映射
小样本学习包含如下几种类型:
(1)Few-shot Classification (小样本分类):这是一个有监督的问题。给定小样本数据 来学习一个分类器 。通常小样本的分类定义为 -way -shot 分类,即指训练集包含 个类,每个类包含 个样本,因此训练集只有 个;
(2)Few-shot Regression(小样本回归):这依然属于有监督的问题,输入数据为相互独立的变量 , 输出的是连续的数值 , 目标则是学习一个回归函数 ;
(3)Few-shot Reinforcement(小样本强化学习) 强化学习输入弱监督类任务,其建立在少量的经验数据(通常称为轨迹trajectory)的基础上学习一个最优的策略(policy)。关于强化学习的概念,可参考强化学习(一):概述 。
小样本的几个经典的场景:
(1)像人类一样去学习(Learn Like Human):我们更希望我们学习的模型能够更好的像人类一样在给非常少的样本的前提下,能够很好的识别和分类。例如幼儿只需要看几张猫的图片后,就可以在许多动物中找到所有猫的图片,但现有的机器学习模型却需要大量的图片才能取得较高的效果。另外,我们也希望计算机能够像人类一样做知识的“迁移”,就想人类一样,在学习一样新的知识是,通常不是从零开始,而是根据先验知识 (Prior Knowledge)来进行学习。而现如今的机器学习,不论什么任务都是从头开始学习。因此如像人类一样利用先验知识,则可以在非常少的样本条件下获得很好的效果。
(2)处理稀少的样例(rare case):在一些无法获取大量数据的场景下,例如医疗中的病毒发现、自动驾驶中的事故预测等,而小样本学习则可以利用先验知识来辅助完成这些稀少样本的学习和预测;
(3)减少数据收集工作量和计算成本:这一场景并非是在数据获取难才使用的场景,通常有一些任务可以获得大量的数据,但数据获取的成本很高,或者数据运算占用的数据资源和时间成本高,则可以通过对数据削减后使用FSL来学习。
因此,在这些场景下,我们可以利用的通常是先验知识,而先验知识通常可以从预训练的模型、或相似的其他标签的数据、或通过数据增强的方法等。在数理统计学中,最能够想到的便是以贝叶斯学派的贝叶斯估计,通常目标预测的是一个后验概率 , 但可以通过贝叶斯公式引入先验 :
贝叶斯估计通常是一种在含有先验知识下的估计,相比频率学派的极大似然估计,其不同点在于贝叶斯估计是经验+先验的结合,而极大似然估计则完全以经验为准。例如在抛硬币实验中,根据历史经验,正面朝上的先验知识是0.5,而如果硬币质地不均匀,则可能正面朝上的概率更大或更低,则会受到经验数据的影响。
中只有一个样本时,FSL则为单样本学习(One-shot Learning),如果一个样本都没有,则称为零样本学习(Zero-shot Learning)。特别说明的是,如果一个任务是零样本学习,则只能通过其他任务的信息进行迁移。
2、FSL相关研究问题
FSL通常不是独立存在的,我们在解决小样本训练的问题时,通常会采用一些现有的工具,我们列出一些相关的研究问题:
(1)弱监督学习(Weakly Supervision Learning):弱监督通常指在给定的经验 中,并非所有的数据都含有标签信息,或存在大量的噪声。例如在远程监督关系抽取任务中,通过启发式的数据标注虽然带来丰富的标签,但绝大多数是噪声。这就导致了弱监督学习中,只有少部分的样本包含有效的监督信息。
通常弱监督分为半监督学习和主动学习。半监督学习(Semi Supervision Learning) 则是指给定的经验数据中,只有一小部分包含监督信息,而另一部分则是无标注的数据;主动学习(Active Learning) 则是指显式地从无标注的数据中选择(query)一部分数据,并让专家进行标注,以渐渐扩充数据的方法。
小结:如果一个小样本学习(FSL)中所给的先验知识是无标签(unlabeled)的数据时,此时的小样本学习即为弱监督学习任务。
(2)非均衡学习(Imbalance Learning):非均衡问题通常指的是不同标签类对应的经验数据不平衡。这一类在现实生活中十分常见。例如癌症检测,通常给定的数据集中,只有数量极少的样本标签为阳性,而其他大多数的样本均为阴性。因此可行的方案是,我们可以将样本数量富余的标签作为一种先验,来辅助预测那些数量少的标签。非均衡在某些场景下还可以称为长尾问题,例如在远程监督关系抽取任务上,有先关工作通过分层注意力机制来缓解长尾关系的预测,他们的做法则是将data-rich的关系标签数据迁移到data-poor的关系预测上,这便是解决非均衡的具体体现。
小结:如果一个小样本学习任务(FSL),先验知识是取自样本数量多的标签(或标签之间相关性更高的),则属于非均衡学习。
(3)迁移学习(Transfer Learning):迁移学习是最能够直观想到的方法,因为其是显式的从其他任务或领域上的数据直接迁移到小样本的任务上。在自然语言处理任务中,则通常采用预训练的语言模型作为先验知识,迁移到许多上层任务上,例如文本分类、机器翻译、阅读理解等;
小结:如果一个小样本学习任务(FSL),先验知识是取自其他任务或领域的数据,或通过预训练的方法获得,则属于迁移学习。
(4)元学习(Meta-Learning):元学习是另一种利用先验知识来学习的任务,是一种教会计算机学习的方法,即利用以往的知识经验来指导新任务的学习,具有学会学习的能力。元学习在许多任务中成功应用。例如学习优化问题、推荐冷启动问题等。
小结:如果一个小样本学习任务(FSL),先验知识是用于“教会”模型在一个具体的任务上如何进行学习,则属于元学习。
3、FSL目标问题
在《统计学习方法》中我们知道传统的机器学习的三种优化目标是:期望风险最小化、经验风险最小化和结构风险最小化。期望风险最小化是一种理想状态,但我们通常无法知道一个任务的期望值,所以只能通过采样方法获得一系列的经验数据(即训练集),则目标为经验风险最小化。如果考虑到模型的复杂度以及过拟合问题,则称为结构风险最小化。我们以经验风险最小化为例,损失函数通常为:
一般经验风险最小化可以分解为两个期望的求和:
其中前一项表示通过大量数据学习的最优的经验与理想状态下的最优 差的期望,记做 ;后一项则表示在有限的经验数据条件下学习与大量数据经验学习的差,记做 。因此,通常如果想要降低后一项,可以使用大量的样本,此时则会逼近大量经验数据条件下两者的差。然而,在FSL中, 样本数
可知,当样本数量多时(左图),则可以有效地减少 。而当样本数量不足时,
因此解决这个问题,我们必须引入先验知识。那么先验知识如何应用到小样本学习中去呢?根据相关工作,我们从数据、模型和算法三个方面引入先验:
(1)数据:如上图(a),可以通过显式地引入额外的数据做数据增强。在搜索空间中进行搜索时,可以通过额外的数据来辅助完成优化问题。基于此,可以使用经验风险最小化;
(2)模型:如上图(b),通过使用先验知识来降低搜索空间,使得优化的维度和空间得以降低。灰色部分即是被缩减的部分,而胜于白色的区域则是更小的搜索空间;通常模型可以使用预训练的模型;
(3)算法:如上图(c),这一类则是引入先验知识来优化搜索策略的算法,即使用先验知识来寻找一个最优的搜索策略。
通过一个树状图对三种先验知识的引入进行小结:
4、基于数据(Data)的小样本学习方法
是一种有效的方法,基于充分的训练集,可以得到相应可靠的学习模型。传统的数据增强方法是根据数据特性进行一些预处理和变换。例如对于图像类任务,为了扩充图像数量,可以通过图像转置、裁剪、旋转、投影等操作,通过人工和规则来生成相似的图像。然而这种方法通常需要较高的时间和资源消耗,且很难应用到所有类型的数据,因此人工的对数据进行扩充不是鲜明之举。
因此我们根据先前的工作,总结了三种比较常用的数据扩增方法,包括:
- 训练数据变换(Transforming Samples from ):通过一些变换将原始训练集转换为先验知识,并用于扩增,这一类即是上一段所描述的传统的方法;
- 弱监督或无监督数据(Transforming Samples from Weakly Labeled or Unlabeled Data Set):引入其他弱监督或无监督的数据集做数据增强;
- 相似数据集(Transforming Samples from Similar Data Set):从数据分布和性质角度来看,将相似的数据拿来做扩增。
下面分别做简单的描述:
4.1、训练数据变换(Transforming Samples from )
均通过一系列的变换转变为新的数据,而所使用的变换程序则包含先验知识。另外,有相关方法使用自编码器(Auto-encoder)来根据相似的标签生成对应的数据。另外也有人为每一个原始数据
4.2、弱监督或无监督数据(Transforming Samples from Weakly Labeled or Unlabeled Data Set)
。例如,在用监视摄像机拍摄的照片中,有人,汽车和道路,但没有一个被标记。 另一个例子是长篇视频。 它包含说话者的一系列手势,但是没有一个被明确注释。 由于此类数据集包含样本的较大变化,因此将其增加到 有助于描绘更清晰的样本分布情况 。 此外,由于不需要人工来标记,因此收集这样的数据集更加容易。 但是,尽管收集成本很低,其主要问题是如何选择带有目标标签的样本。先前的方法一种是使用支持向量机(SVM)为每一个带有标签的原始训练集 进行训练,并为那些弱监督数据进行预测,并将预测正确的加入到
4.3、相似数据集(Transforming Samples from Similar Data Set)
上述三种数据增强的方法,如何选择取决于具体的应用和数据的情况。如果说某一类任务包含大量的无标注或半监督的数据,而如果对其全部进行人工标注将会消耗大量精力的,可以使用第二种方法,即通过一些工具启发式地标注,或使用算法来预测未知的标签,以扩增数据集;如果无标注的数据很难获取,则可以选择相似的数据转换为目标任务下的数据;如果前面两个都不满足,则只能从原始的数据进行一些变换操作了。但事实上,上述的三种方法均涉及到对数据的一些生成和变换,通常并不使用于所有领域或类型的数据,现阶段基于数据增强的FSL比较适用于图像类数据,而对于文本、语音等基于语法的序列模式数据则比较困难。
5、基于模型(Model)的小样本学习方法
学习策略 | 先验知识 | 如何缩减 |
多任务学习(Multi-Task Learning) | 先验知识来源于其他任务 以及对应的数据 | 参数共享或绑定 |
嵌入学习(Embedding Learning) | 根据其他任务学习得到的Embedding信息 | 将数据映射到低维度连续空间,保存语义信息 |
记忆信息(External Memory) | 通过Embedding保存(记忆)其他任务交互得到的语义信息 | 使用Key-Value进行保存 |
生成模型 | 由其他任务 | 限制分布的形式 |
5.1、多任务学习(Multi-task Learning)
及对应的数据同时参与训练,通过多任务学习可以任务本身及任务之间的信息交互和共享。假设给定 个任务,分别为 。每个任务 对应数据集 。我们将小样本任务作为目标任务(Target Task),其他任务作为资源任务(Source Tasks),因此多任务学习目标是通过某一个任务 在对应数据 进行学习,并得到对应的参数 ,因此可以当前任务的参数可以对其他任务产生一定的约束。参数的约束可分为两种类型:参数共享以及参数绑定
- 参数共享(Parameter Sharing):参数共享方法主要是在训练模型时采用共享参数的方法。如下图所示。总共有三个任务,其中最左侧的是小样本任务(目标任务),而其他两个任务则提供先验知识。通过task-specific层来独立训练对应的任务,而shared层来共享所有任务的参数。因此在训练目标任务时,通过共享参数可以实现先验知识对目标任务的假设空间的限制。另外还可以这么理解,因为此时在对目标任务进行学习时,还需要对其他任务进行学习,因此还可以认为先验知识的任务相当于约束条件,类似于正则化一样,因此可以缩小假设空间。
- 参数绑定(Parameter Tying):参数绑定方法是指在训练多个任务的时候,将其他任务作为一种正则化约束条件。例如在训练一个图像分类任务时,当训练小样本任务(目标任务)时,其他先验任务的参数则作为一个正则项,起到一种惩罚作用,如下图所示:
5.2、嵌入学习(Embedding Learning)
用于将测试集 映射到低维度空间 ;(2)函数 用于将测试集 映射到低维度空间 ;(3)相似度函数 用于评估 和
和
- Task-specific:指只用具体某一个任务的信息来训练embedding。例如当任务 训练小样本训练集
- Task-invariant:指在一个通用的大规模数据集上进行预训练,并形成embedding后,在目标任务上进行训练。这一类是比较常用的。如下图所示:
通常是一种孪生网络的架构,小样本的训练集和测试集分别使用两个不同的函数映射到相同维度的embedding后,使用相似度量函数进行预测。训练集上则是训练部分,测试集则是测试部分,用于对未知的样本进行预测。当未知的测试样本与训练集中的某个样本非常相似时,则预测为训练样本对应的类。另一方面,小样本学习更加看重的是泛化能力,即在 个类中,只训练 个类,而训练的目标函数则是尽可能提高预测剩余
解决这一类的方法主要有MatchNet、PrototypeNet等。主要思路都是围绕学习一个映射函数和相似度函数,然后在测试集上寻找最相关的训练样本,并预测为对应的标签。
- Hybrid:指混合前两种方法,先使用task-invariant方法训练包含先验知识的embedding,然后在具体的任务上,将训练集作为输入,并进行训练,使得含有先验知识的模型
先通过task-invariant方法学习得到的先验知识,然后根据具体任务学习得到函数
5.3、记忆信息(External Memory)
,其中 表示记忆单元的个数,每个记忆单元表示为 , 其包含key-value键值对 。因此在训练之后,即可保存这些记忆单元,每个记忆的键可以是向量,值则可以是对应的标签或回归值等。在测试阶段,只需要一个相似度函数
- Refining Representation:将训练集依次保存到记忆单元中,因此在测试阶段时,可以更好地表示测试样本。相关方法均考虑当记忆单元已满时,如何设定策略进行替换先前的记忆信息。包括MANN、Lifelong Memory等;
- Refine Parameter:考虑使用记忆单元存储参数。在训练集上训练一个映射函数 时,可以通过记忆单元保存这些参数,然后在测试阶段,根据记忆信息对预测函数
5.4、生成模型(Generative Modeling)
在生成模型中,通过先验知识来生成更加丰富的信息时生成式方法。通常包含两种方法:
- 可分解成分(Decomposable Components):一些样本虽然很少,但它们可能包含相似的成分,例如人脸识别中,每个人都会包含相似的五官等信息,因此可以使用生成模型来捕捉不同可分解成分之间的交互性;
- 组队共享先验(Groupwise Shared Prior):相似的任务之间会有相似的概率分布和先验信息,因此也可以用于小样本学习中。例如对于一个三类分类任务(类1、类2和类3),每个类可能存在相似性,如果类1和类2样本数量较多,而类3样本数量少,因此可以实现类别之间的信息共享,借助类1和类2的先验知识,以及其与类3的相关性预测类3的样本。另外,也可以不按照类标进行划分,而通过其他划分规则,例如对含有猫、狗、汽车三个类进行分类时,很明显前两类属于动物,后一类属于非动物,因此可以显式地先进行划分;或者通过数据固有的特性进行分层划分。划分后的数据在同一组内可以共享相同或相似的先验信息,从而辅助预测小样本类。
- 推断网络(Inference Networks):推断网络是一种根据数据分布情况而推断其最优参数的方法,最经典的即是基于贝叶斯公式的贝叶斯推断网络,其根据先验知识(即已知的数据)基础上寻找最优的参数使得后验概率达到最大。基于推断网络的有自编码器(VAE)、对抗网络(GAN)等,其可以根据已有的数据基础上生成更多更丰富的新的数据。
下面总结一下基于模型(model-based)的小样本学习方法。通过对模型的改造,来将先验知识引入到小样本任务中,从而在语义层面上降低了搜索空间。基于模型的小样本学习主要有四大类:
(1)如果先验知识来源于多个任务,则可以使用多任务学习框架。小样本任务(目标任务)作为优化的目标,而其他任务则作为类似正则化项起到对目标的约束作用,从而在语义层面上降低搜索空间大小;
(2)如果存在大规模的数据集,其包含充分的多种类别的样本时,可以使用基于嵌入的方法,通过学习一个低维度连续空间的向量,从而降低向量空间大小,降低搜索空间大小;
(3)如果可以使用记忆单元,则可以基于此训练一个简单的分类器,给定一个测试样本从记忆中选择最相似的记忆作为预测结果。但这一种方法需要考虑如何保留和遗忘过去的记忆,同时可能会遭受内存消耗的问题;
(4)如果可以使用生成模型,则可以从其他数据集中学习先验,并基于自编码、对抗网络等模型生成多样化的数据,以扩充原始数据。当然,生成模型通常难以训练,因此需要取决于具体任务的情况;
未完待续…
参考文献:Generalizing from a Few Examples: A Survey on Few-Shot Learning