Reviews On Few Shot Learning

Introduction

Background

随着2012年AlexNet在ImageNet上取得优异的成绩后,这种基于Data-Driven的深度学习逐渐成为现代机器学习最庞大和繁荣的一个分支体系,其实仔细看看,这几年的深度学习,个人感觉基本上都没有很大的进步,都是在做一些修修补补的工作罢了,很多比较成熟的方向已经沦为大厂算力角逐和数据比赛的私人游戏。和19世纪的物理学论断不同,我们深知现在的深度学习和真正的Turing Intelligence还有很大的差距,从感知智能到认知智能,智能科学还有很长一段路要走。

举一个很简单的例子,人类从来不需要那么多的标注数据去学习一些简单的任务,对于人类来说往往可能一次眼见、一张照片足以让人能够进行一些比较基础的判别任务,那么如何能够让计算机脱离目前Data-Driven而转向能够通过少量数据甚至是一个零个数据的训练得到一个较为鲁棒且具有较好泛化能力的模型,这就是Few Shot Learning探索的问题。

Definition

小样本学习是指模型对于给定的任务利用少量的监督信息,获得较好的鲁棒和泛化表现,英文即Few-Shot Learning(后面简写成FSL)。由于小样本学习本身也是机器学习的一种,这里我也仿照Mitchell在1997年给机器学习的广泛定义给Few Shot Learning下一个形式化定义:

给定一个小样本学习任务T,若一个程序基于经验E提供的少量经验,在衡量标准P下获得了性能改善,则我们就说关于T和P,该程序对E进行了小样本学习。

Goal

小样本学习最直接的目标就是希望以最少的计算和数据解决问题。更加形式化的定义就是针对每一个小样本学习任务T,FSL的目标是减少模型的预测值与真实值的差距,即:
m i n θ ∑ ( x ( i ) , y ( i ) ) ∈ D t r a i n l ( h ( x ( i ) ; θ ) , y ( i ) ) \mathop{min}\limits_{\theta}\sum\limits_{(x^{(i)}, y^{(i) })\in D^{train}}l(h(x^{(i)};\theta),y^{(i)}) θmin(x(i),y(i))Dtrainl(h(x(i);θ),y(i))
其中, θ \theta θ是模型的参数, ( x ( i ) , y ( i ) ) (x^{(i)}, y^{(i)}) (x(i),y(i))是监督数据对, l ( ⋅ ) l(·) l()代表损失函数, h ( x ( i ) ; θ ) h(x^{(i)};\theta) h(x(i);θ),是习得模型的预测结果。模型的总体误差由两部分构成由两部分构成:
E ( R ( h I ~ ) ) = E a p p ( H ) + E e s t ( H , I ) = E [ R ( h ∗ ) − o ∗ ] + E [ R ( h I ) − R ( h ∗ ) ] \mathbb{E}(R(\widetilde{h_I}))=\mathcal{E}_{app}(\mathcal{H})+\mathcal{E}_{est}(\mathcal{H},I)=\mathbb{E}[R(h^*)-o^*]+\mathbb{E}[R(h_I)-R(h^*)] E(R(hI ))=Eapp(H)+Eest(H,I)=E[R(h)o]+E[R(hI)R(h)]
其中,一个是 E a p p \mathcal{E}_{app} Eapp表示就是模型的近似误差,这个是传统机器学习里的概念,指的是模型选择带来的问题,如下图所示:模型的假设空间并不能cover到最优解,但是由于不同的模型的假设空间也不同,所以,这里越优秀的模型,其假设空间离理想最优解越近,这就为我们提供了一个优化方向,尽可能地去选择更加适合当前数据的模型,能够一定程度上减少近似误差带来的问题。

在这里插入图片描述

另一个是 E e s t \mathcal{E}_{est} Eest这个是模型的估计误差,估计误差是由于我们要在模型的假设空间中寻求一个最优解,但是现在大多深度学习的模型都采用的是基于梯度下降的方案,这样的优化方法实际上并不是总能达到全局最优解,相反,往往Gradient Descent总是会陷入局部最优解,如上图所示,对于给定的假设空间 H \mathcal{H} H,最理想的情况就是达到全局最优解 h ∗ h_* h,与真实最优解之间还是存在 E a p p \mathcal{E}_{app} Eapp,但是理想很丰满,现实总是很骨感,我们目前采用的大多数凸优化方案也只能达到 h I h_I hI这个局部最优解,这个局部最优解与假设空间里全局最优解之间的差距就是估计误差 E e s t \mathcal{E}_{est} Eest,怎么能使得我们这个局部最优解尽可能的接近全局最优解,这就为我们提供了另外两个优化思路,最直接的思路就是想一个方法,能够去按照给定规则搜索给定假设空间下的全局最优解(当然这个基本上不可能啦,至少目前看来是这样,但是我们可以求他的近似算法,使得近似率无限接近1),第二个思路就是去找一个最好的初始点,因为初始点一定程度上决定了我们能达到的哪一个局部最优,如果对于一个最小化的最优函数,最理想的情况是我们找到的初始点就是整个假设空间下最小的那个局部最优解,那也就是全局最优了(但是实际情况也是不可能了,但是我们也可以找一个近似算法,使得近似率为1)。

你可能会觉得这个明明是经典机器学习的概念,和我小样本学习有什么关系?小样本学习本身就是机器学习的一个分支,实际上要实现真正的小样本学习,那就是要在小样本的空间下,去优化一个传统的机器学习问题,所以我认为回顾这些概念是非常有必要的。同时我们根据上面的分析,一共提出了三种思路:

  • 目前搜索全局最优解的方案就是数据驱动的,那么对于小样本学习来说,那最直接(可能也是最无脑)的方法就是想办法创造数据,这个其实自从AlexNet就开始使用了。
  • 第二我们从优化近似误差的角度去设计更好的模型减小模型的假设空间,但是如何设计更好的模型呢,其实现在各路大神各显神通,什么仿生学啊都来了。
  • 第三就是找一个更好的优化方案,或者参数初始化方案,使得最后的这个值更加接近全局最优

后面我会从这个三个思路对现在的方法进行一些讨论。

Application in CV

FSL在图像上主要是应用在图像分类上,一个原因是因为数据集的原因,另外就是本身这个领域不成熟,工程上的运用就更不成熟了,研究还相对处于初期,其实在CV的几个领域都已经有了应用,不过最少的还是Detection。所以,后面的整个方法论的讨论我也是基于图像分类的。

Methodology

Data

数据增广的方法其实很早就有了,数据增广并没有改变任务的实质,所以是task-invariant的。这里我把目前主要的方法分成三类:
第一类是希望通过对已有的数据进行变换来获得新的数据,通常有两种思路:

  • 第一种是基于传统的手工设计的特征或者变换进行数据增广。这种方案是较为传统的选择,在AlexNet里就用了crop等方法来对ImageNet进行数据增广来避免over fitting,这种方法主要就是依托于传统的一些图像处理的方案,比如对图像进行旋转、剪切、翻转、添加噪声等等来进行图像处理,这种方案比较常规,也比较简单。

  • 第二种思路是利用现在深度学习的方式在数据集上去学习一个变换,然后将这个变换运用到小样本上,这种变换本质上是利用当前小样本的监督信息,使得预训练的模型迁移到新任务上。这种方法也是一种生成式方法,其实就是在大规模训练数据上训练的模型就是一个生成器,该生成器能够捕捉到样本的高维特征,并在少量监督信息的基础上生成大量新类别(训练阶段未见过)的样本。这种方法其实本质上还是没有改变需要大量监督数据的事实,因为在训练生成器的时候要求生成器的训练数据分布和目标样本分布不能有太大偏差,过大的偏差会使得模型的表现非常不好。这一类方法中最典型的GANs和Auto-Encoder。其中2018年的 Δ \Delta Δ-Encoder就是利用这个思路,希望学习到相同类别间的这个 Δ \Delta Δ来合成新的数据。生成式模型的另一个思路是通过在大量样本上建模对图像的局部信息进行建模,然后通过不同part的替换来生成新的样本。

第二类是希望获取外部数据来进行数据增广,这个手段是打比赛刷榜比较常用的方法了,其中外部数据通常指的是同类别的无标注数据或者类似的数据集。前者就是一个比较偷懒的想法了,因为事实上这样的数据本身不好找,而且通常外部无标注数据的质量很多时候堪忧,如果将外部无标注数据直接用于数据增广,的确人力成本很低,但是质量就……采用相似的数据集其实隐含了一个条件就是x的类别相似性可以迁移到y上,但是由于源任务和目标任务的差异性,现有的方法通常也会使用GANs来生成数据,降低样本分布不同带来的影响。

Model

基于模型的方法是现在比较主流的FSL方法之一,目前主流的方法有Multi-Task Learning、Metrics Learning、Meta-Learning三种。

Multi-Task Learning

多任务学习的的想法是因为目前的我们大多数的机器学习都是针对特定领域的单个子任务,比如说视觉的某个组就专门做检测,另一个组就专门做分割,再过分一点就某个组专门去做识别猫,另一个组专门去做识别狗……但是对于人来说,人并不是单单去做一个任务的,人最擅长的就是多个任务一起学习,并举一反三。所以多任务学习的本质就是想把多个相似的任务放在一起学习,通过某种方式将任务学到的知识共享,是什么神经网络学到的知识?那就是参数嘛,所以这里就出现了几种参数共享的方案,如下所示:

  • 第一种:硬参数共享。所有的任务都共享公共的隐层来进行参数共享,这样做最大的问题就是能够避免过拟合,因为本身任务很多,整体学习分配到单个任务的注意力就会变少,换句话说就是当前学到的表达里一定有其他任务的监督信息。 如图所示:

  • 第二种:软参数共享。所有的模型都有自己的参数,但是采用一定的方式让他们的参数之间建立一些联系使得他们之间的参数分布相似,建立什么联系呢,大多数采用的是正则化参数之间的距离。如下图:

  • 第三种:层次参数共享,这是一种比较新的方法,网上的资料太少了(论文还待读)

利用多任务学习来解决小样本学习的本质是希望利用其他任务的监督信息来改善目标任务监督过少的问题,多个任务之间的参数共享也的确能够在一定程度上提高模型的泛化性能。比较有代表性的模型有Shared-Bottom Model,MoE Model,Multi-gate MoE Model等。

Metrics Learning

度量学习是希望通过将样本从原来的输入空间,映射到另一个便于区分的样本空间中,采用一定的度量手段来逐一度量该样本与所有已知类别之间的相似度。其中前面“将样本从原来的输入空间,映射到另一个便于区分的样本空间中”这一部分事实上属于Embedding Learning的范畴,或者说Representation Learning的角度。

这一部分的方法是比较多的,最经典的就是Siamese Network,它通过一组CNN或者LSTM来对输入进行Embedding,然后采用L1或者L2对输入和已知类别中采样的样本进行相似度匹配。Matching Net 也是一个比较经典的方法,它借鉴了记忆网络和NTM的思想构造了含有memory和Attention的网络结构,分别为Support Set和 Batch Set构造decoder,并在训练的过程中使训练集的每个类别的样本保持在较少的体量,以保证和测试阶段的一致性。另外就是原型网络和关系网络,原型网络认为在样本的Embedding空间中每个类别一定是呈类别分布存在的,而且每一个类别都有一个原型表达(原论文中作者采用的所有样本的均值)然后就是采用KNN的思路,对新样本和每一个类别的原型表达求最近邻。Relation Net主要关注的是相似度度量的方法,它采用神经网络的方法对Embedding的相似度进行了度量(论文还没读)。

Metrics Learning实际上是把原来的任务转化成了一个判别问题,甚至可以看成是多个0-1判别问题 ,判别新样本是否属于已知类别。主要的方向就是看有没有更好的Embedding表达,或者寻找一个较好的相似度度量方案。

NTM Based Learning

这种方法不是指的采用神经图灵机,而是借鉴神经图灵机里的额外存储空间来保存学到的信息,它的核心思想是由于FSL本身的样本数量较少,所以希望直接拿在少量的样本上来找到一种参数更新的模式,以建立x->P的mapping。由于模型的设计方案限制,memory存储块有限,如何对存储块进行更新就有很多种不同的方案,其中包含只更新最少使用的MANN,每次都更新所有的存储块,根据存储块的年龄更新,只在loss过高的时候更新存储块,合并最相似的存储块等等。这里这一块还没有特别深入的了解,比较出名的方法就是Meta Network。

Algorithm

这一类主要是希望对参数的初始化或者是算法模型的最优化逼近方法进行优化,这个很直观,在前面的Problem Definition里我也说了,FSL是没有那么多数据去进行梯度更新的,其中最典型的就是transfer learning,将在大规模类似任务的参数直接transfer到当前任务上作为新任务的初始参数然后在进行fine-tuning,在过去的很多任务上都证明是有非常优秀的表现,基于正则化的FIne tuning、利用任务间的差异加上先验知识进行Fine tuning、甚至是设置参数对参数进行fine tuning都是一些比较好的方法。但是迁移学习最大的问题就是迁移学习很容易受到源任务和目标任务的影响,如果源任务和目标任务的数据bias过大,迁移学习的表现就极其糟糕。

另一个就是基于meta learning的方法,不太苟同网上很多把meta learning等同于FSL的观点,FSL是Meta learning产生的动机,他们只是很大一部分是交叉的,所以常常放在一起,但是meta learning并不只能做FSL。meta learning又叫learn to learn,其目的是希望学习模型的模型,传统机器学习做的是用一堆数据学习一个模型,这个模型就是输入空间到输出空间的一个映射,然而meta learning做的是用一堆模型学习一个模型,然后对于任意一个新的任务,他的输出就是一个参数。其中最火的就是 MAML,还有Reptile等等。MAML指的是模型无关的元学习。意思就是不论什么深度学习模型,都可以使用MAML来进行少样本学习,他就是个人对MAML的评价比较高,感觉这就是通用人工智能的雏形。

这里我要解释一下,事实上你到网上一搜你会发现很多文章讲的meta learning已经包含了我上面的几个方法,什么度量学习啊,基于神经图灵机的学习啊,本质上的没有问题的,因为这个的meta就是指的是高于经典深度学习本身的东西,比如u什么超参啊、loss啊、甚至是网络结构、更新方案啊等等,meta learning都把它们看作是meta info,meta learning认为这些东西也是可以学的,先整一个模型学这些东西,举例来说,假设meta learning是学习网络结构,输入给定的任务,通过meta learning的模型输出网络结构,然后再把网络结构拿去训练,meta learning认为这样比我们这些炼金术士们主观臆造造出来的模型结构要好。所以从这个角度上讲,前面讲的什么基于优化的、基于度量的、基于模型的、基于 GNN的,我认为都可以算作是meta learning的一个分支方向,而这里主要是讨论基于参数初始化的meta Learning。但是整体meta learning感觉还很新,没有成形的定义。

Future Work

整体上Few Shot Learning还处于理论研究阶段,目前主要也没有落地到实际的应用上,近两年的顶会上也逐渐有一些论文在做FSL到各个方向的应用,比如Object Detection等等。另外基于FSL的多模态融合也是一个比较值得研究的方向。对这一方面的论文阅读工作还未完成,后续在文献阅读工作中有了新的点子会更新在这篇文章中。

但是现在提升FSL的准确度还是首要任务,大多数FSL工作目前还是次于有监督的,可以考虑从无监督学习、结构化输出、互动学习等入手去提升FSL的性能。

其实我这个是我自己的论文笔记,不是论文解读,所以可能有些地方有点晦涩,不过欢迎大佬一起交流或者指正。另外目前这还是第一个版本,后面会随着工作的深入逐渐完善这篇综述。

在这里插入图片描述

硬核引流:欢迎大家推广关注我的公众号啊(洋可喵)!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值