这篇论文是做Few-shot的,正常的全监督神经网络要通过学习来完成一项任务需要大量的标记样本来进行训练,但是人类的大脑可以通过极少数的样本来学习到新的概念,比如儿童可以仅仅通过书籍上的图片来认识到长颈鹿,而机器学习就需要大量样本。神经网络最初本来就是模拟人脑的思考来设计的,这说明神经网络也是可以通过少量样本来学习到新的概念,这种通过极少量样本就能学习到新的概念的任务就是Few-shot,故名思意就是仅仅shot几次就能达到目标。
但是并不能将Few-shot的神经网络理解成为训练样本就仅仅只有几个然后进行训练来学习到新的概念,我们知道这当然是不可能的,训练样本的缺乏肯定会导致过拟合问题的出现,但是这不就和之前提到的通过极少量样本学习新的概念相违背了吗?且听我慢慢道来,(这其实是我第一次接触到Few-shot的文章,所以想将我的理解历程都写出来),其实这里说的极少量样本是与新概念有关的样本,训练模型用的样本其实是已知概念的样本,这样的样本是有很多的,足以训练出泛化能力很好的模型,为什么要用已知概念的样本去训练模型能,下面就人类few-shot学习能力的原理来进行解释,前面说到儿童仅通过几张图片就能学习到什么是长颈鹿,但是刚出生的婴儿估计是不行的,儿童在认识长颈鹿之前已经是学习了很多知识,比如知道什么是动物,哪儿是动物的脖子,认识到长颈鹿的脖子跟其他的动物是不一样的,知道颜色花纹的概念,等等,这些知识的获取使得他看了图片就知道脖子很长的那种动物就是长颈鹿,所以说人类的这种few-shot的学习能力是在已有的低级概念的认知的基础上再学习到新的高级概念的,这里说的低级概念说的是抽象程度没有高级概念高的概念,属于大多数概念都包含的特征,比如形状,颜色,纹路等等,儿童可以通过这些低级概念总结出新的高级概念,神经网络完成few-shot任务的原理也是这样,一般的全监督的大量样本学习的神经网络学习一个概念,是将样本的特征由像素级别一步步抽象到新概念本身的抽象层次,而few-shot则是将其抽象到一个适当的层次,该层次的特征不仅可以用在当前训练的概念中,还可以用到没有经过训练的新的概念中去。已知的概念和新的未知的概念包含共同的特征层次,就是few-shot经过训练提取到的特征层次。
经过上述的解释,我们便可以给出few-hot任务的大体框架流程,该任务便是训练一个模型,该模型实现的功能就是:给定两个集合,分别是support集合和query集合,这两个集合包含训练出的model没有见过的类型的样本,support中包含的样本带有标签,只是每个标签的样本数是很少的,query集合中包含的样本是没有标签的,query中的样本数很多,模型的功能就是support中的样本连同标签以及query中的某个待分配标签的样本作为输入,求出query中该待分配标签样本的标签是什么,该标签肯定时support中标签集合中的一个。模型在预测query输入的样本的标签的原理是分别提取support集合中的样本的和该待预测样本的特征,前面说到该特征的抽象层次是适当的抽象层次,是新旧概念所共有的特征,依次比较support每个标签下的特征和query的特征的相似性,最后判断query中待预测样本的标签应该是support中的哪个标签(其实具体实现是通过对所有support标签进行加权求和得到连续值,通过该连续值的大小来判断的)。那么训练这样的模型就是要着重训练该模型的特征抽象能力,要抽象到适当的层次,使得support和query通过比较该特征就能合理地分配标签。则训练过程也是给定support集合和query集合,与测试过程不同的是,这两个集合都包含的样本都是带有标签的,通过计算预测的query的标签和真是标记的标签的差距设计loss来优化网络达到学习目的。