Press "Enter" to skip to content

离开了大数据深度学习怎幺办?(浅谈小样本学习)

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

众所周知,深度学习往往需要大量的标注样本进行训练才能达到一个满意的效果,但是在实际应用场景中,数据标注通常非常困难,很难获得大量的标注数据,这种情况下,深度学习怎幺才能发挥出应有的魅力呢?

 

什幺是小样本学习

 

我家小孩在2岁以前,基本上靠书本上的图画来认识世界,我给他买了各种动物、交通工具等等各类的图书。 2岁的时候我第一次带他去动物园,他基本上可以认出动物园里的大多数动物,虽然每种动物只是在图片上见过一两次,这就得益于人类的强大的认知能力,可以通过少量样本来进行学习,认知世界。 当然对于更细的类别,他就分不了那幺清了,比如在一堆猴子中间找出哪个是金丝猴,他没有见过金丝猴,所以他不知道,但是只要我告诉他金丝猴是一种有着金色毛发的猴子,他认识猴子,也知道金色是什幺颜色,所以他可以迅速的在一堆猴子中找到那只金丝猴。 人类具有这种只通过少量样本或者是特征描述就可以识别物体的能力,受人类的这种快速学习能力的启发,研究人员希望机器学习也能够只通过学习少量样本就可以进行快速建模,对不同的类别进行区分,而且能在不改变模型参数的情况下,对新类别进行识别,这就是小样本学习(few-shot learning)。

 

很多人都听过鹦鹉和乌鸦的案例,鹦鹉在人类的教导下可以学习人类说话,但是他只会简单的重复,不会根据不同情况说不同的话,更不会创造新的句子; 但是乌鸦则不同,乌鸦虽然不会像鹦鹉一样学舌,但是乌鸦很聪明,它可以利用自然定律来为自己服务。 乌鸦弄不开壳的坚果,它会把它带到高空扔下; 如果坚果依然不碎,它把坚果放到马路上,让过往的汽车帮他把坚果压碎之后,食用里面的果肉; 它可以通过观察红绿灯和汽车行人的关系,来判断什幺地方、什幺时间是安全的,可以放心的到马路上食用被汽车压碎的坚果。 乌鸦的这种智能才是我们真正需要的智能,通过少量的观察来认知世界,从环境中总结经验,只需要经过少量的样本就可以学习到新知识。

 

 

(a) 乌鸦试图从高空把坚果扔下摔碎; (b) 坚果落地后没有摔碎; (c) 乌鸦站着红绿灯上方的电线上将坚果扔下; (d) 乌鸦在红绿灯上方的电线上等待 ;(e) 乌鸦观察到了行人绿灯亮了 ;(f) 乌鸦到人行横道上吃被压碎的坚果

 

小样本学习,可以认为是Meta Learning在监督学习上的应用,即,在训练阶段,每次迭代(episode)会对样本采样,得到一个meta task; 在不同的迭代中,训练数据包含了不同的组合,使得模型会去学习不同的meta task中的共性部分,忘掉和task相关的部分。 因此在面对meta test时也能进行较好的分类。

 

下面介绍两个经典的小样本学习模型。

 

Matching Networks for One Shot Learning [1]

 

这篇文章是谷歌的DeepMind团队提出的,被李飞飞高徒Andrej Karpathy点赞过,成为之后相关研究中经常被对比的参照,该文章在不改变网络模型的前提下能对未知类别生成标签,其主要创新体现在两个方面:建模过程和训练过程。对于建模过程的创新,文章提出了基于memory和attention的matching nets,使得可以快速学习。对于训练过程的创新,文章基于传统机器学习的一个原则,即训练和测试是要在同样条件下进行的,提出在训练的时候不断地让网络只看每一类的少量样本,这将和测试的过程是一致的。

 

 

上图所示为Matching Networks的主要结构,这是一个明显的 4-way,1-shot 模型,左边4张小狗的图片形成一组,每类狗一张图片,称为support set;右下1个单身狗,称为test example。全部5个图片称为1个task。

 

该 模型用函数可表示为  , 即模型有两个输入。该模型用概率可表示为 , 其中 , k表示support set中样本的个数。上图support set有4个图片,k=4。

 

Matching Networks作者把该模型表示为:

 

 

预测值 被看做是support set中样本的labels的线性组合,组合的权重是test example和support set中1个样本的关

 

本文 赋 予新的形式,将它看做attention kernel。 此时,模型的预测结果就是support set中attention最多的图片的label。

 

常见的attention kernel是cosine距离上的softmax:

 

 

其中f,g是两个嵌入函数(可由神经网络实现,如: VGG or Inception)。

 

训练策略的创新:

 

一个batch包括多个task;

 

一个task包括一个support set和一个test example;

 

一个support set包括多个sample(image & label);

 

support set中有且只有一个样本与test example同类。

 

模型在Omniglot数据集上进行了测试,Omniglot数据集包含来自 50个不同字符的 1623个不同手写字符。 每一个字符都是由 20个不同的人通过亚马逊的Mechanical Turk 在线绘制的。 测试过程中,将这些分成一组包含 30个字母的背景(background)集和一组包含 20个字母的评估(evaluation)集。 测试结果如下:

 

 

原型网络 Prototypical Networks [2]

 

这篇论文提出的方法思想十分简单,效果也非常好。它学习一个度量空间, 通过计算测试样本和每个类别的原型表达之间的距离来进行分类。文章基于这样的想法:每个类别都存在一个原型表达embedding,这个embedding可以代表这个类别的表征,该类的原型是support set在embedding空间

 

中的均值。然后,分类问题变成在embedding空间中的最近邻。如图所示,c1、c2、c3分别是三个类别的均值中心(称Prototype),将测试样本x进行embedding后,与这3个中心进行距离计算,从而获得x的类别。

 

 

算法的伪代码如下,非常的简单清晰:

 

 

作者在miniImageNet的数据集上进行了测试,miniImageNet数据集包含了100个类别的图片,每类600张,共60000张图片。 其中64个类别作为训练集,16个类别作为验证集,20个类别作为测试集,测试结果如下:

 

 

从上图中的实验结果可以看出,squared Euclidean距离比cosine距离要好14到17个点。 另外,文章在训练时采用相对测试时更多的类别数,即训练时每个episodes采用20个类(20 way),而测试对在5个类(5 way)中进行,其效果相对训练时也采用5 way的提升了2.5个点。

 

Prototypical Networks与Matching Networks十分相似,在one shot的场景下,他俩是一样的,但也有几个不同点: 1.距离度量方式不同,Matching Networks采用的是cosine度量距离,Prototypical Networks中使用的是基于Bregman的欧几里得距离; 2.网络结构上,Prototypical Networks相比Matching Networks将编码层和分类层合一,参数更少,训练起来也更加方便。

 

———————

 

参考文献:

 

[1] Oriol Vinyals, Charles Blundell, Tim Lillicrap, Daan Wierstra, et al. Matching networks for one shot learning. In Advances in Neural Information Processing Systems, pages 3630–3638, 2016.

 

[2] Jake Snell, Kevin Swersky, and Richard S Zemel. Prototypical networks for few-shot learning. arXiv preprint arXiv:1703.05175, 2017

 

[3] Allen, Kelsey R, Shelhamer, Evan, Shin, Hanul, et al. Infinite Mixture Prototypes for Few-Shot Learning[J]. 2019.

 

[4] Li C, Wang G, Melo G D. Context-Based Few-Shot Word Representation Learning[C]// IEEE International Conference on Semantic Computing. 2018.

 

[5] Wang, Yaqing, Yao, Quanming, Kwok, James, et al. Generalizing from a Few Examples: A Survey on Few-Shot Learning[J]. 2019.

 

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注