few-shot learning个人总结

最近做few-shot EE感觉自己对few-shot setting还不是很清楚,看了一些博客大致做一个个人总结:

为什么要有few-shot learning

因为打标签成本高,或者说本身有标签的数据就难以获取。比方说图像多分类问题,每个类别的图像数目可能只有十几条。如果我们想要在这种,很少量的样本情况下(这里的少量多指,每种类别实例数量少),模型仍然有较好的分类能力,就需要用few-shot learning的思路去做。

few-shot启发自人类,人类的小孩在分类的时候只需要很少几个样本就可以达到比较好的分类效果。比方说,区分苹果、香蕉、葡萄,人类只需要每个类别有几张样例图片的训练,就可以对这三种水果作出很好的区分。

如果能够成功解决few-shot问题,那么我们在进行多分类问题的时候,每个类别仅仅需要很少的instance(也就是可以不用打很多标签),就可以对这些类别进行很好地分类。放到真实工业场景下,就可以节约数据收集和标注的成本

总而言之,few-shor learning少样本学习,旨在使用很少量的样本,学习获得较好的分类能力。重点在于,这里少样本的,多指每类标签的实例数目少,而不是指标签数目少。

如何解决few-shot问题——元学习

正如上面所说,少样本的少,多指每类标签的实例数目少,而不是指标签数目少
所以这种场景下的模型,是需要充分的额外先验知识的。

比方说还是分类苹果、香蕉、葡萄,或许这三类水果都只有几张图片,但是人之所以能够实现少样本的强分类,是因为人具有充分的先验知识储备。而这种知识储备,是一种元知识储备,也就是这个人曾经分类过桃子、菠萝、西瓜,他已经充分地学会了怎么去类比区分,已经具备了分类问题的先验元知识,而不是具体于分类某类特定水果的先验知识。

承接上述所说,想要解决few-shot问题,由于目标类别的样本数目很少,想要直接训练获得针对具体类别(目标类别)分类的模型是不太可能的,因为信息太少了。所以转换思路,既然具体类别(目标类别)的先验知识难以积累,那就先在其他先验信息充足(标签数据充足)的类别上先积累元知识,再去分类目标类别。 这就是解决few-shot问题的一种常用思路——元学习

说到这里,元学习似乎完全等同于迁移学习,即在大量数据上的先验知识积累,然后迁移到具体任务上进行fine-tune。但是和迁移学习不同,元学习积累的先验知识,是元知识。就拿上面举过的例子来说,虽然分类苹果、香蕉、葡萄的人,需要现在桃子、菠萝、西瓜的数据上进行练习,但是人在练习的时候积累的也不是仅仅针对分类桃子、菠萝、西瓜这三种水果的能力,更多积累的是分类的元知识,在这个例子里面就是区分不同水果的通用能力。一旦获得这种元能力,就可以在苹果、香蕉、葡萄的少量样本上进行学习(可以理解成few-shot 的fine-tune)从而获得针对苹果、香蕉、葡萄分类的能力了。


讲到这里,其实基本上已经介绍好了元学习的基本思想,以及他和迁移学习之间的差异了。
给出元学习的定义:

元学习:学会学习(learning to learn),让模型学习获得解决这一类大任务本元性知识,而不是针对于这类任务的特定几种子任务的知识。因而适用于few-shot问题的解决。

而元学习的具体方案又可以细分大致三类:

  1. 多任务学习:前面水果分类的例子就能很好地体现多任务这个概念:把每种水果的识别都当做是一个子任务,那么先在类似子任务的数据上经过多任务的联合训练,让模型获得这一大类任务的共性,遗忘具体某个子任务的特定知识。继而将这种大类的元知识,迁移到目标子任务上进行few-shot的tune。
  2. 度量学习:上面讲多任务学习,在不同子任务上联合学习,获得元知识。但是可能很多人会有疑问:这个元知识到底是什么样的知识,怎样用人的直觉去理解?回答这个问题,自然而然引出元学习的第二种实现方法:度量学习。
    度量学习,即比较每一类样本的差异,获得区分不用类别的能力,而不是针对具体某种类别的识别能力。用上面的例子,训练模型的时候先在桃子、菠萝、西瓜数据上学会怎么去区分不同水果的能力,再转而去区分苹果、香蕉、葡萄。一句话解释:分类问题的元知识,就是学会怎么区分不同类别,也就是怎么去进行度量。所以度量学习学的就是分类问题的元知识,就是度量,这种元知识,也是我们人类能够直接直觉上理解的。
  3. 基于优化器
    上述两种方案,多任务和度量,其实归根结底都是在学习分类任务的元知识,只不过前者是通过多任务联合训练的方式,利用数据的统计信息来获得模型参数,人类没办法很轻易利用直觉来理解这种元知识;而后者直接就是冲着度量(即我们能够理解的,分类问题的元知识)去的。
    所以,他们的目的相同 (都是为了元知识学习),只是方式不同 (获取这种元知识的方式不同,且人类的理解难易程度有差)。
    另一个相同点就是,多任务学习和度量学习都蕴含着迁移学习的理念,也就是他们在实现过程中都是需要有额外的、大量的其他标签的数据集,否则无法获得这种先验的元知识。那有人会提出问题,有没有一种元学习策略,是可以不用额外的数据支撑的呢?拿上面那个例子,我手头就只有苹果、香蕉、葡萄的一丁点数据,我怎么进行训练?
    这也就是第三种策略,优化器学习的思路来源。**
    基于优化器:有论文指出,在少量数据下,基于梯度的优化算法失败将不能直接奏效。像一些传统的梯度优化算法包括 momentum, adagrad, adadelta, ADAM 等,无法在几步内(few-shot)完成优化,特别是在非凸的问题上,多种超参的选取无法保证收敛的速度。因此也就有了meta learner这个概念。即学习的目标就是这个meta- learner,学习获得一个优化器,来代替传统的优化算法进行梯度下降。

上述元学习实现方法的归纳,有很强的个人见解,如有谬误或者其他见解,也欢迎讨论。

个人认为元学习是一个很宽泛的概念,他是一种思维,一种策略,可以有多种实现方法(多任务、度量学习等),也自然可以有很多理解的角度。

few-shot的设置

到这里,基本上已经介绍了few-shot learning的一些基本概念,那么few-shot的实验设置是怎样的?

这里引用 知乎 小小何先生 的回答:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

和open-domain的联系

现在回过头看,few-shot的解决过程其实和open-domain的场景很相似。后者主要是想要在已有标签的数据上进行充足的先验积累,以应对open-domain下从未见过的新标签样本;前者则是在大量已有标签(且每类标签数目都非常充足)的数据上训练获得meta知识,进而在一些从未见过新标签上,仅仅利用一小撮样本(每种新标签n个样本,n-shot),就能够较好分类这些新标签数据。

或者换句话说:

  • few-shot可以有大量有标签数据,同时必须有少量新标签的样本,目的是区分大量的新标签样本。
  • open-domain必须有大量有标签数据,同时可以有新标签样本,目的也是为了区分大量新标签样本。

参考:

小样本学习(Few-shot Learning)综述
如何理解few-shot learning中的n-way k-shot?
few shot learning 为什么使用 N way K shot ??

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值