小样本论文笔记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 损失函数
- 采用了带有正则化项的交叉熵损失函数,式子
y
(
x
1
i
,
x
2
i
)
y(x_1^{i},x_2^{i})
y(x1i,x2i),当
x
1
i
x_1^{i}
x1i和
x
2
i
x_2^{i}
x2i属于同类物体时,
y
(
x
1
i
,
x
2
i
)
=
1
y(x_1^i, x_2^i)=1
y(x1i,x2i)=1,否则为0.
L ( x 1 ( i ) , x 2 ( i ) ) = y ( x 1 ( i ) , x 2 ( i ) ) log p ( x 1 ( i ) , x 2 ( i ) ) + ( 1 − y ( x 1 ( i ) , x 2 ( i ) ) ) log ( 1 − p ( x 1 ( i ) , x 2 ( i ) ) ) + λ T ∣ w ∣ 2 \begin{array}{c} \mathcal{L}\left(x_{1}^{(i)}, x_{2}^{(i)}\right)=\mathbf{y}\left(x_{1}^{(i)}, x_{2}^{(i)}\right) \log \mathbf{p}\left(x_{1}^{(i)}, x_{2}^{(i)}\right)+ \\ \left(1-\mathbf{y}\left(x_{1}^{(i)}, x_{2}^{(i)}\right)\right) \log \left(1-\mathbf{p}\left(x_{1}^{(i)}, x_{2}^{(i)}\right)\right)+\boldsymbol{\lambda}^{T}|\mathbf{w}|^{2} \end{array} L(x1(i),x2(i))=y(x1(i),x2(i))logp(x1(i),x2(i))+(1−y(x1(i),x2(i)))log(1−p(x1(i),x2(i)))+λT∣w∣2
λ T ∣ w ∣ 2 \lambda^T|w|^2 λT∣w∣2 是正则化项。
2.4 训练策略
- 权重初始化方面,卷积层采用均值为0,方差为
1
0
−
2
10^{-2}
10−2的正态分布,偏差采用均值为0.5,方差为
1
0
−
2
10^{-2}
10−2的正态分布,全连接层采用均值为0,方差为
1
0
−
1
10^{-1}
10−1的正态分布。学习率每个epoch下降
1
1%
1,初始动量为0.5,随着训练过程线性增长直至达到
μ
j
\mu j
μj
(作为超参数)。超参数优化策略采用一种贝叶斯优化框架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个字符,按理说应该是2020=400,为啥是1040=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。(这里盲猜1040=400?10重复4次=40?文中没仔细说明)将MNIST的10个数字作为字母表,然后产生一个10-way的One-Shot分类任务。将MNIST的2828的图片上采样为35*35,使用下采样因子为3的简化Siamese模型,结果下图所示。
4. 还存在什么问题&有什么可以借鉴
- 提供了小样本学习的新思路,虽然现在看来很普通,但在当时属于很先进的算法
- 问题:比较有顾虑的是,该网络仅在字符识别这种简单任务上效果较好,扩展到视频应该如何做呢?用3D卷积提取测试视频的特征,然后与支撑集中视频特征相比较相似性吗?