小样本学习之原型网络

本次介绍的论文

《Prototypical Networks for Few-shot Learning》


原型网络是解决小样本分类问题的一个比较实用且效果还不错的方法,这篇论文是在2016年NIPS上的一篇论文《Matching Networks for One Shot Learning》的基础上,进行了改进后而来的,改进后的方法简单且实用。本次将对这篇论文进行介绍和总结。

有关小样本学习是什么的介绍,请看上一篇博客浅述小样本学习以及元学习。

 

在小样本分类问题中,最需要解决的一个问题是数据的过拟合,由于数据过少,一般的分类算法会表现出过拟合的现象,从而导致分类结果与实际结果有较大的误差。为了减少因数据量过少而导致的过拟合的影响,可以使用基于度量的元学习方法,而原型网络便是。在此方法中,需要将样本投影到一个度量空间,且在这个空间中同类样本距离较近,异类样本的距离较远,如图:

            小样本学习之原型网络_第1张图片

在这个投影空间中,存在有三个类别的样本,且相同类别的样本间距离较近。为了给一个未标注样本x进行标注,则将样本x投影至这个空间并计算x距哪个类别较近,则认为x属于哪个类别。

那么,现在有几个问题:

  • 怎么将这些样本投影至一个空间且让同类样本间距离较近?
  • 怎么说明一个类别所在的位置?从而能够让未标记的样本计算与类别的距离

 

首先,先来说明第一个问题,即如何投影。论文中提到了一个带参数\theta的嵌入函数f_{\theta }\left ( x \right ),这个函数可以理解为投影的过程,x表示样本的特征向量,函数值表示投影到那个空间后的值,这个嵌入函数f_{\theta }\left ( x \right )是一个神经网络,参数\theta是需要学习的,可以认为参数\theta决定了样本间的位置,所以需要学习到一个较好的\theta值,让同类别样本间距离较近。

想法说完了,再来说具体实现。首先说明一下训练数据,论文中实验的数据分为支持集和查询集:

  • 支持集:即训练集,在本论文中由一些已标记的样本组成,比如有N个类,每个类中有M个样本,则为N-way--M-shot。
  • 查询集:即测试集,在本论文中由一些已标记的样本和部分未标记的样本组成,同理测试时要根据训练时来,如训练时为N-way--M-shot,则测试时也要为N-way--M-shot。

文论中认为一个类由这个类所有样本在投影空间里的平均值决定,所以,类k的原型为:

c_{k}=\frac{1}{|S_{k}|}\sum_{(x_{i},y_{i})\in S_{k}}f_{\phi }(x_{i})

其中S_{k}表示类k,|S_{k}|表示类k中样本的数量,(x_{i},y_{i})为样本的特征向量和标记,此公式实际上为一个求平均的过程。

求完每个类的原型后,就需要求一个样本属于一个类的概率,在训练中,这个样本是已标记的,即我们已知类k的原型,已知一个属于类k的样本,求此样本属于类k的概率。我们的目标函数为求这个概率的最大值

p_{\phi }(y=k|x)=\frac{exp(-d(f_{\phi }(x),c_{k}))}{\sum_{k^{'}}exp(-d(f_{\phi }(x),c_{k^{'}}))}

此公式所表示的意义是,对于样本x,求它到每个类的距离,然后进行归一化操作得到概率,即x属于类k的概率。其中d为距离函数,在本篇论文中使用的是欧几里得距离。在训练过程中,x的标签是已知的。论文中的目标函数为:

J(\phi )=-log (p_{\phi }(y=k|x))

一般通过随机梯度下降方法来求它的最小值,从而收敛后学到一个好的\phi值。此时我们可以认为,训练结束后此投影函数可以将同类的样本投影到一个相互距离较近的地方。

在测试过程中,使用与训练过程中相同的方法,使用另外的已标记的数据,同样为N-way--M-shot,然后用以训练好的投影函数(神经网络),求每个类的原型,之后使用一个未标记的样本x,求属于每个类的概率,我们认为概率值大的那个,即为x属于的类别。

 

原型网络的原理较为简单,但是有一点小问题就是,对于两个或多个样本的相似度,用距离较近来度量是否合理。如同我上一篇博客所说,对于某一些数据集来说可能有用,但是对于一般的图片,效果可能就不那么好了。所以个人认为,两个样本或者图片间相似性的度量方法还是可以研究一下的。

 

你可能感兴趣的:(小样本学习,度量学习,小样本学习)