题目《学会比较:小样本关系网络》
版权声明:本文为CSDN博主「深视」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36104364/article/details/106158012
本文在CSDN博主「深视」的基础上有一点点改动,添加了一些自己读文献过程的记录。感谢大佬的论文解读。
1. 核心思想
在孪生网络、匹配网络、原型网络的基础上把小样本学习继续推进,主要创新思路在于:相对于孪生和匹配网络预先定义的相似性度量或者非线性度量,这里的相似性度量是可以学习的非线性深度度量。
这里的关系网络可以看作是学习一个深度的嵌入和一个深度的非线性度量(相似性)。以数据驱动的形式选择度量,不必按照假设去选择固定的度量方式。
2. 实现过程
2.1 嵌入模块和关系模块
这里的嵌入模块用来对输入的图像进行信息提取;关系模块所做的事情是:先把来自支持集和查询集的特征图进行拼接(这里采用串联的方式),然后通过关系模块计算两者的相关性得分。以此找到支持集中哪类与查询集最相似。
嵌入模块和关系模型的形式在网络结构中,本质上都是卷积和全连接层。
本文划分训练集、支持集和测试集;支持集和测试集共享相同的标签空间,但是训练集有自己的标签空间,与支持集/测试集不相交。如果支持集包含用于C个唯一类中的每类的K个标记样本,则目标小样本问题称为C-Way K-shot。
对于one-shot问题,对两个样本通过嵌入模块提取特征图,concat拼接两个特征图并输入到关系模块,产生0-1范围内的标量。总体流程公式表示如下:
对于样本xi和xj 分别送入到嵌入模块,得到fϕ(xi)和fϕ(xj).这里的嵌入模块是一个CNN架构(暂且当作VGG吧),C操作就是拼接操作,关系模块得到的0-1的范围,称为关系得分。
对于K-shot问题:
对于每个训练类的所有样本的嵌入模块输出进行逐元素求和,形成该类的特征图。后续操作和one-shot类似。--------有点粗暴
其实这里类似在求类内的样本平均特征,也可通过平均操作实现,或者通过1*1的卷积进行特征降维。
2.2 目标函数
这里使用MSE,回归关系得分为ri,j。类似于回归问题。匹配对的相似度为1,不匹配的为0.
2.3 网络结构
非常简单,小样本和zero样本学习网络结构分别如下。
嵌入模块一共四个卷积块,相关性模块有两个卷积块;然后通过两个全连接和sigmoid函数得到相似性得分。
2.4 训练策略
与Matching Network等基本相同,分成多个Episode。
2.5 算法推广
推广到zero-shot任务,DNN得到的是一个语义特征或者描述向量。
本文的结构不能保证该相似函数的 自相似和对称性 ;但是从经验上看,这些性质在数值上可以被训练。
3. 结论
提出了一种简单的方法,称为关系网络(Relationship Network),用于小样本和zero-shot学习。关系网络学习用于比较query与样本的嵌入和深度非线性距离度量。通过端到端地训练网络,可以调整有效的few-shot学习的嵌入和距离度量。更加简单有效。
4. 创新点
所以本文的主要贡献就是改进了相似性度量学习的方式,以数据驱动去选择,而不是像匹配、原型、孪生网络一样预先人为设定。
5. 算法评价
在学习了Matching Network等一系列文章后,本文的思路是非常好理解的,就是改进了相似性度量的方式,由预先定义的固定的相似性度量函数(Matching Network——余弦距离,Prototypical Network——平方欧氏距离)或者Siamese Network中线性度量方式,升级为利用神经网络训练得到一个可学习的非线性相似性度量函数。
实验结果表示在多个数据集上都取得了不错的成绩,但本文对于5-shot问题采用将特征图逐元素相加的方式来获取每个类别对应的特征信息的方式,我是存在异议的,这种做法是否过于简单粗暴?特征图直接相加是否会导致特征信息遭到破坏?这可能也是本文在5-shot任务中表现普遍较差的原因吧。
摘自博主深视