先经过CNN获得目标特征,而后与参考目标的特征进行比较. 不一样在于比较的方法不一样而已.网络
模型能够分解成特征提取器和比较器:其中特征提取器中的权重是共享.以下图所示:机器学习
一路是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的类别.学习
在编码中引入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, 可是基于比较的思想没有变化.
步骤与训练同样,只是再也不更新梯度,同时计算正确率.
加入适当且合适的偏置概括,来减轻或者消除过拟合问题.这里的假设是存在一个特征空间使得对于每一类都有一个point cluster围绕一个单一的prototype representation. 分类问题就变成寻找最近原型的问题.对每一个类而言模型也能够当作是一个线性模型.
1.计算原型表达
其中 表明的是第k类原型表达,
表明的是support set中第k类的集合.
2. 在类别维度上归一化距离,获得类别标签
若是只从分类器的角度看,当问题是one-shot时,matchnet和当前模型等效.
前文说网络学习的是比较能力,主要是体如今对特征的学习和约束上(这些特征容易经过线性或者最最近邻的方法进行区分),这里将其延伸至比较器,比较方式也是经过网络本身来学习,而不是人工指定,这也符合咱们一向的认识,能让网络作的, 尽可能让网络去作. 本身学习了一个非线性比较器.在zero-shot learning中,relation module是学习比较query图像和描述之间关系.
上面公式输出的是一个在[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。
相比之下,借助于以前丰富的知识积累,人类只需看一次就能轻松识别出新的类别。受到人类这种利用少许样本便可识别新类能力的启发,研究者们开始研究小样本学习问题。 在小样本学习问题中,咱们假设有一组基类,以及一组新类。每一个基类具备足够的训练样本,而每一个新类只有少许标记样本。 小样本学习的目的是经过从基类转移知识来学习识别具备少许标注样本的新类别。咱们提出一种基于全局类别表征的小样本学习方法,能够应用于: