few-shot learning

昨天开会的时候,偶然听到了学长们正在研究一个叫小样本,当时就记下来了,开完会之后,看了几篇博客,发现这里还是有很多可以学习的地方,所以还是专门写一篇博客。

Background

深度学习已经广泛应用于各个领域,解决各类问题,达到了很高的准确率,但是深度学习是一种 Data Hungary 的技术,即深度学习需要大量的标注样本才能发挥作用。
但是现实是,很多问题都没有标注数据,或者标注成本非常大,那么当标注数据量比较少时,怎么学习出好的特征,若是直接学习的话,必定就要泛化这些少的类别,若是直接训练会因为数据少、代价高、周期长而无法获得收益。那么为了提高解决问题,就提出了小样本学习(Few-shot Learning)。

Definition

对于人来说,是很容易就能通过及少量的样本就能识别一个新物体,那么如何让机器学习模型也能在学习了一定类别的大量数据后,对于新的类别,只需要少量的样本就能快速学习,这就是 Few-shot Learning 要解决的问题。
这里要先说到 Meta Learning 元学习,也叫做 Learning to Learn,已经成为继 Reinforcement Learning 增强学习之后又一个重要的研究分支,关键的就是在没有大量数据的情况下,让机器模型自己去学会学习,在 meta training 阶段将数据集分解为不同的 meta task,去学习类别变化的情况下模型的泛化能力,在 meta testing 阶段,面对全新的类别,不需要变动已有的模型,就可以完成分类,这里就不展开说了,而小样本学习就是元学习在监督学习领域的应用。
形式化来说,小样本的训练集中包含了很多的类别,每个类别中有多个样本。在训练阶段,会在训练集中随机抽取 C 个类别,每个类别 K 个样本(总共 CK 个数据),构建一个 meta-task,作为模型的支撑集(support set)输入;再从这 C 个类中剩余的数据中抽取一批(batch)样本作为模型的预测对象(batch set)。即要求模型从 C*K 个数据中学会如何区分这 C 个类别,这样的任务被称为 C-way K-shot 问题。

而在图像领域,小样本模型大致可分为:Model Based,Metric Based 和 Optimization Based。

Model Based

因为训练集少,所以模型的设计需要相应的快速更新参数(我的理解是有些时候模型收敛缓慢,所以需要快速成型的网络来适应这种训练资源,正如元学习一样,其快速权重的机制,让它具有快速泛化的能力,在训练过程中产生的梯度被用来作为快速权重的生成),直接建立输入x和预测值P的映射函数。
Santoro 等人提出使用记忆增强的方法来解决小样本任务,基于记忆的神经网络通过权重更新来调节 bias,并且通过学习将表达快速缓存到记忆中来调节输出。
然而如果只是利用RNN的内部记忆单元无法扩展到需要对大量新信息进行编码的新任务上(RNN主要还是对时序信息,序列信息的储存吧,对于有新信息,新类别输入的情况,没有合适的结构来适应),因此,需要让存储在记忆中的表达既要稳定又要是元素粒度访问的(就是说当需要时就能可靠地访问,并且可选择性地访问相关的信息)。
所以有些文章引入了神经网络图灵机(NTMs),因为它能通过外部储存(external memory)进行短时记忆,并能通过缓慢权值更新来进行长时记忆,它可以学习将表达存入记忆的策略,并如何用这些表达来进行预测。

Metric Based

如果在小样本学习的任务中去训练普通的基于交叉熵的神经网络分类器,那么几乎肯定是会过拟合,因为神经网络分类器中有数以万计的参数需要优化,相反,很多非参数化的方法(最近邻、K-近邻、Kmeans)是不需要优化参数的,因此可以在元学习的框架下,构造一种可以端到端训练的 少样本分类器,通过对样本间距离分布进行建模,使得同类样本靠近,异类样本远离。举几个例子:

对于孪生网络来说,通过有监督的方式训练孪生网络来学习,然后重用网络所提取的特征进行少样本学习。训练时,通过组合的方式构造不同的样本对,输入网络进行训练,在最后一层通过样本对的距离判断他们是否属于同一个类,并产生对应的概率分布。而在预测阶段,孪生网络处理测试样本和支撑集之间每一个样本对,最终预测结果为支撑集上概率最高的类别。

匹配网络(Match Network)不同,它为支撑集和 Batch Set 构建不同的编码器,最终分类器的输出是支撑集样本和 query 之间预测值的加权求和。

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

文章采用在 Bregman 散度下的指数族分布的混合密度估计,文章在训练时采用相对测试时更多的类别数,即训练时每个 episodes 采用 20 个类(20 way),而测试对在 5 个类(5 way)中进行,其效果相对训练时也采用 5 way 的提升了 2.5 个百分点。

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

Optimization Based

Ravi 等人研究了在少量数据下,基于梯度的优化算法失败的原因,即无法直接用于元学习。
首先,这些梯度优化算法包括 momentum, adagrad, adadelta, ADAM 等,无法在几步内完成优化,特别是在非凸的问题上,多种超参的选取无法保证收敛的速度。

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

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

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