@wanghuijiao
2021-03-03T09:24:32.000000Z
字数 3094
阅读 726
小样本论文笔记2:Model Based - [4] Siamese neural networks for one-shot image recognition.
学习笔记
0. 前言
相关资料:
论文基本信息
- 领域:小样本学习
- 作者单位:多伦多大学
- 发表期刊和时间:ICML2015
- 一句话总结
- 提出了Siamese neural networks结构,通过Siamese网络提取两个输入的特征,然后通过计算两者之间的L1距离判断相似性,用sigmoid函数判断两者是否同类。在Omniglot数据集上达到了92%的效果,与当时的State-of-the-art方法95.2%相差3.2%,但作者声称Siamese优点是不需要提供任何关于字符的先验知识。同时,该模型在不需要微调的基础上,在MNIST数据集上能达到70.3%的精度。
1. 要解决什么问题
- 核心思想
- 设计了一种利用孪生网络结构解决小样本分类任务的方法,其思想非常简单,用相同的网络结构分别对两幅图像提取特征,如果两幅图像的特征信息非常接近(L1距离小)那么他们很可能属于同一类物体,否则他们属于不同类的物体。
- 其采用了两个结构完全相同,权重彼此共享的卷积网络分支,称为孪生网络,分别从两幅图像中提取特征信息,并利用全连接层展开成一维特征向量。然后计算两幅图像对应的特征向量之间的L1距离(差值的绝对值),并乘以一个权重值(该权重值是利用网络训练得到的参数,在一定程度上可以看做特征值维度上的注意力机制,假设某个特征值比较重要,其对应的权重也会更大),再将所有加权后的特征值求和。最后用Sigmoid函数将其转化为[0,1]范围内的相似程度得分。训练过程则是希望孪生网络能够提取出更加有效,更加抽象的特征信息,在测试过程中需要同时输入一个支持集和一个测试对象,与 Matching Network 相同,该网络也允许使用训练集中没有出现过得类别进行测试,但支持集中必须包含与测试对象同类别的图片。
2. 用了什么方法
2.1 创新点
- 利用孪生网络结构分别提取两幅图片特征,并采用L1距离度量特征之间的差异。
- 无需依赖先验知识,可以在少样本的数据集上实现有效的特征提取,并最终实现分类任务 。
2.2 网络结构
- 整个孪生网络的两个分支是完全相同的,因此仅对其中一个的结构进行简要介绍。如图所示,该网络是由多个卷积层和最大池化层堆叠而成,卷积层的通道数均是64的倍数,卷积核尺寸由10 * 10,下降到7 * 7,再降到 4 * 4(这是早期卷积神经网络常用的模式,后来逐渐被多层3 * 3的卷积层所取代),卷积步长均为1,最大池化层的池化窗口为2 * 2。最后两层为全连接层,第一个全连接层将特征图展开成长度为4096的一维特征向量,并计算与另一个分支的L1距离;第二个全连接层则是将距离向量压缩为一个值,并利用sigmoid函数转化为相似程度得分(上文中提到的加权求和过程正是描述此处的第二个全连接层)。除最后两个全连接层采用sigmoid激活函数外,其与各卷积层均采用ReLU激活函数。
2.3 损失函数
- 采用了带有正则化项的交叉熵损失函数,式子,当和属于同类物体时,,否则为0.
是正则化项。
2.4 训练策略
- 权重初始化方面,卷积层采用均值为0,方差为的正态分布,偏差采用均值为0.5,方差为的正态分布,全连接层采用均值为0,方差为的正态分布。学习率每个epoch下降,初始动量为0.5,随着训练过程线性增长直至达到
(作为超参数)。超参数优化策略采用一种贝叶斯优化框架Whetlab进行选择。超参数包括学习率、动量、L2正则化项大小、卷积核尺寸和通道数、全连接层维度等参数的选择。数据集扩充是利用放射变化将图像数量增长为原来的8倍。训练时将图像两两组合,若来自同一类别则标记为1,否则标记为0.
2.5 网络推广
- 作者尝试将在Omniglot数据集(一个包含多种语言手写字母的数据集)上训练得到的网络在不经过微调训练的条件下,直接应用与MNIST数据集(一个手写数字数据集),其依旧达到了70.3%的准确率,说明该网络具备一定的泛化能力。
3. 效果如何
实验设置
- 训练数据集:Omniglot数据集子集,为每个字符做了8种数据增强,数据量扩展为原来的9倍。
- 测试数据集:Omniglot, MNIST
- 任务:验证,小样本
验证任务结果
- 设置3种不同尺寸的训练集样本,分别为30000,90000和150000.选出60%作为训练集,比如50个字符中挑出30个,20个画手中挑出12个。
- 固定每个字母的训练样本数量,这样每个字母就会在优化时以相同的概率被优化。为每个训练样本添加8个增强操作,因此,最终会有270000,810000和1350000个有效样本。
One-shot learning
- 以下为方便个人理解,用字母A\B\I指代各个角色,原文并没有这么说:字母表从验证集中选取,然后从保留为验证集的“画手”中挑出两位,让这两位“画手“根据字母表画出对应的20个字母。将画手A制作的字符作为测试图片I,逐一与画手B制作的20个字母比较,目标是从画手B画出的20个字符中预测出测试图片I的类别(看测试图片与Bde 哪个字符最相近即为哪个类)。接下来这个不太懂,为啥要为每个字符重复两次?为啥有10个验证字符?个人理解是A和B每个都画出来20个字符,按理说应该是20*20=400,为啥是10*40=400?总之有400次One-Shot Learning Trials
MNIST One-shot Trial
- 作者在MNIST数据集上进行测试,在模型没有在MNIST数据集上进行微调的情况下,MNIST的10比1的One-Shot Trial任务依旧达到了70.3%的精度。MNIST的验证设置与Omniglot相同,也是400次One-Shot Trials。(这里盲猜10*40=400?10重复4次=40?文中没仔细说明)将MNIST的10个数字作为字母表,然后产生一个10-way的One-Shot分类任务。将MNIST的28*28的图片上采样为35*35,使用下采样因子为3的简化Siamese模型,结果下图所示。
4. 还存在什么问题&有什么可以借鉴