(转载)基于比较的少样本(one/few-shoting)分类

基于比较的方法

先经过CNN获得目标特征,而后与参考目标的特征进行比较. 不一样在于比较的方法不一样而已.网络

基本概念

  • 数据集Omniglot:50种alphabets(文字或者文明); alphabet中15-40 characters(字母); 每一个字母有20drawers(20个不一样的人写的).
  • 每次迭代叫mini_batch或者epsiode.
  • N-ways指的是有多个类别,N-shot是指于多少个目标进行比较取均值中的最高值做为最后的结果.
  • 测试集与训练集中样本的类别不同.
  • cosine(余弦)距离: [公式]
  • 概括偏置(inductive bias): 单靠数据自己不足以找到惟一的解, 由于咱们须要作一些特别且合理的假设, 以便咱们能获得惟一的解.
  • Bregman divergence(散度): 若是你抽象地定义一种在特定空间里两个点之间的"距离", 而后在这些点知足任意的几率的状况下,这些点的平均值点必定是空间距离这些点的平均距离最小的点. [公式] .能够经过求和再求导的方式得出上述结论(从上面也能够看出距离函数是非负的凸函数).下图展现了知足其性质的距离公式:

 

 

Siamese Neural Networks

模型能够分解成特征提取器和比较器:其中特征提取器中的权重是共享.以下图所示:机器学习

 

 

一路是support(已经知道到标签), 一路是query.比较二者的类似度.(直接相减取绝对值,而后接sigmoid激活,再接全链接层和sigmoid,表示类似程度)函数

 

训练

每次迭代从训练集中随机的选择20个类, 从每一个类中的20个样本采样5个做为support set, 5个做为query set. 选取的个数影响batch_size的大小. 从上面选取的样本中组成一个mini_batch(输入是成对出现的),一半是相同class,一半是不一样类别.同时batch_size也收到硬件的限制,通常取32.性能

测试

从测试集中随机选取m个类,每一个类提供k个样本做为support Set.这就是N-way k-shot.每一个query与[公式] 个样本进行比较,获得类似分数,而后同类取平均值, 找出类别最高的分数即为这个query的类别.学习

 

分析与思考

  • 把问题从推理问题变成了判断问题,极大了下降了问题的复杂度.
  • 与常规深度学习分类模型不同, 这里网络学习的是一种比较能力,比较器和特征提取器相辅相成,提升最终性能.而常规学习的是类别具备的特征分布;因此常规模型能够进行很好的迁移,具备很好的语义提取能力.可是这里的模型不能很好的迁移(不必定能具备).
  • 咱们能够发现,其实训练模型数据并很多,可以组成上千万个不一样的batch. 因此从这一点来讲, 深度学习依旧是须要不少数据,只不过数据的角度不同.

Matching Networks

基本思想

在编码中引入set和注意力的概念, 将全部类别的编码当作一个总体看待,这样能够加强类间差别.同时做者也对训练过程进行的改进, 同时保证了传统机器学习的一个原则, 即训练和测试集要在一样的条件下进行的, 学习的目标由 [公式] 变成 [公式] .最终是一个权重式的最邻近分类器.测试

步骤

1. 对支持集和测试集的样本进行encode,函数分为 [公式] ,获得 [公式] , [公式] 表明的query样本, [公式] 表明的是支持集里面的样本. 图中的虚线表示的是这两部分编码是能够共享的.优化

 

2. 再对 [公式] 的编码进一步处理,处理方法是基于双向的LSTM对support set进行总体embedding(full Context Embedding):编码

[公式]

[公式]

[公式]

经过如上的编码咱们能够发现support set的样本编码产生了相互影响的效果,从而更有利于区分出类别之间的差别.对类似却不一样的类别的编码具备好处.spa

3. 基于attention-LSTM来对测试样本embedding:prototype

[公式]

计算询问样本特征与support set的特征类似性. 具体计算以下:

[公式]

根据类似性来计算获得reuse的特征

[公式]

[公式]

[公式]

须要注意的是K是能够随便定的, 最终的 [公式] 即为最终测试样本的编码.分析能够这里的过程能够理解为一个可学习的增强特征器, 用于增强那些与support set类似可是不明显的特征(若是某个样本的特征与support set中某个样本稍微类似,可是不足以断定类别, 这里就会循环向原始特征中加入可以加强其判别的信息).

4. 获得 [公式] 的编码后,利用下式获得最终的结果.

[公式]

其中a的表达式以下:

[公式]

须要说明的是上式中的 [公式] 一个N-way大小的向量(通常是one-hot),若是是K-shot,编码处也会发生变化,同时取的是最终y值最大对应的标签.

训练

选择少数几个类别(5类),在每一个类别中选择少许的样本(5个),将选出的集合划分红参考集和测试集,利用本次迭代的参考集,计算测试集的偏差,计算梯度,更新参数.这样的一个流程称为episode.与孪生网络不一样,在一次计算中能够直接获得最终的label, 可是基于比较的思想没有变化.

测试

步骤与训练同样,只是再也不更新梯度,同时计算正确率.

 

Prototypical Network

基本思想

加入适当且合适的偏置概括,来减轻或者消除过拟合问题.这里的假设是存在一个特征空间使得对于每一类都有一个point cluster围绕一个单一的prototype representation. 分类问题就变成寻找最近原型的问题.对每一个类而言模型也能够当作是一个线性模型.

基本步骤

1.计算原型表达

[公式]

其中 [公式] 表明的是第k类原型表达, [公式] 表明的是support set中第k类的集合.

2. 在类别维度上归一化距离,获得类别标签

[公式]

训练

  1. 从K个类内中均匀选择 [公式] 个类别,( [公式] 指的是一个episode的类别数)
  2. 在从数据集中选择相应类别分别选取 [公式] 个样本做为support set.
  3. 再在剩下的数据集中选取 [公式] 个样本做为测试样本.
  4. 接下来按照上面的步骤,计算出测试样本的几率和偏差,而后利用SGD进行优化.

补充

  • 能够将原型模型的解释为线性模型:

[公式]

  • 而后在通过softmax处理,可是咱们能够看到第一项在每一类中都有,因此能够在分子分母中约掉.而剩下的则变成: 

[公式]

[公式] 若是只从分类器的角度看,当问题是one-shot时,matchnet和当前模型等效.

 

Relation Network for few-shot learning

前文说网络学习的是比较能力,主要是体如今对特征的学习和约束上(这些特征容易经过线性或者最最近邻的方法进行区分),这里将其延伸至比较器,比较方式也是经过网络本身来学习,而不是人工指定,这也符合咱们一向的认识,能让网络作的, 尽可能让网络去作. 本身学习了一个非线性比较器.在zero-shot learning中,relation module是学习比较query图像和描述之间关系.

模型

  1. 首先是一个embedding module将query和support的照片进行编码.
  2. 而后是一个relation module用来进行比较,算出得分.

relation module

[公式]

上面公式输出的是一个在[0,1]之间的值,做者使用的是以下结构来表示 [公式] :

经过上面的公式咱们能够看出,不一样参考样本链接query样本特征以后在relation module中的权重是共享的,因此在实现的时候,维度变化以下C((S,H,W,D), (Q,H,W,D))-->(Q*S, H,W, D) 而后作卷积,再reshape.须要注意的是做者在K-shot,是将support中相同类别的图像特征相加后,而后于query的特征相链接,这样又变成了上述的one-shot问题.

 

转载于:

知乎:基于比较的少样本(one/few-shoting)分类

注: 5way1shot是指:测试集有5类,每类只有1张是有标记样本,其他样本都是无标记的。咱们须要根据用已有的训练样本(训练样本比较理想,就是类别数不少,都有标签等)来模仿测试过程。具体而言,就拿5way1shot来讲(假设训练集有1000类,都有大量有标签数据),每次,个人训练样本是随机选5类,每类选1张图,这5张图通过网络获得5个特征向量,而后怎么计算loss?我须要从这5类里面每类再挑出一些样本也通过网络获得他们的特征向量,而后去和以前那5个向量计算距离(relation),但愿他们同一类的距离尽量小。这样的话,个人网络其实就是学的是relation,而不是简单的分类。那测试的时候,我把有标签的这5张图算个特征向量,其他全部测试集中的图像也都提个特征向量,去和这5个比,看看谁近,近的话就认为是同一个label。

 

 

小样本学习:5 个类别,每一个类别只有 1 个样本(称做 5-way 1-shot),如何对测试图片进行分类。

相比之下,借助于以前丰富的知识积累,人类只需看一次就能轻松识别出新的类别。受到人类这种利用少许样本便可识别新类能力的启发,研究者们开始研究小样本学习问题。 在小样本学习问题中,咱们假设有一组基类,以及一组新类。每一个基类具备足够的训练样本,而每一个新类只有少许标记样本。 小样本学习的目的是经过从基类转移知识来学习识别具备少许标注样本的新类别。咱们提出一种基于全局类别表征的小样本学习方法,能够应用于:

  1. 标准小样本学习问题:给定一个大规模的训练集做为基类,能够类比于人类的知识积累,对于从未见过的新类(与基类不重叠),借助每类少数几个训练样本,须要准确识别新类的测试样本。
  2. 广义小样本学习问题:相比与小样本学习,广义小样本学习中测试样本不只包含新类,还包含了基类。
转载:知乎
相关文章
相关标签/搜索