关键词:小样本学习 one-shot learning 度量学习 孪生网络 图像分类
论文地址: https://www.cs.cmu.edu/~rsalakhu/papers/oneshot1.pdf
代码地址:https://github.com/sorenbouma/keras-oneshot
原作对论文的解读:https://sorenbouma.github.io/blog/oneshot/
目录
一. Abstract
二. Approach Property
三. Related Work
四. Deep Siamese Networks for Image
五. Experiments
六. Conclusions
七. References
Abstract
这篇论文探索了一种新的方法——卷积孪生神经网络,它利用独特的网络架构对输入图像进行相似度排名。网络经过训练之后,不仅可以对新数据进行有效预测,并且可以预测未知分布的新类别。该卷积结构的网络,能够在 one-shot 分类任务中取得非常好的结果,同时也超越了其他表现优异的深度学习模型。
【人类具有很强的获取和识别新模式的能力。特别地,当出现外部刺激,人们能够快速理解新的概念,然后根据未来的认知中去扩展这些概念的变化[1]。
one-shot learning,这个概念在文献[1][2]第一次被提出。它和zero-shot learning不同,zero-shot learning中用于分类的目标,不会出现在样本当中[3]。
在这篇论文中,提出的新方法对模型的输入结构做了限制,使其能够从少量的样本中进行学习。通常情况下利用带有大量参数的模型来构建非线性网络,并且使用很多这样的的非线性网络层去捕获在输入空间中变换图像的特征,同时采样大量的数据来防止过拟合[4][5]。】
Approach Property
实验中,使用的孪生卷积神经网络,a) 能够学习到一般的图像特征,甚至在小数据集上,这些特征也能对未知类别的数据分布进行预测;b) 对于源数据中成对的样本,能够利用标准的优化技术对其进行训练;c) 使用深度学习技术,不依赖于特定领域的知识。
Related Work
1. 针对利用少数据集完成 one-shot 任务,提出可变的贝叶斯框架[6]<2006>
2. 从认知科学的角度出发,针对字符识别提出了 Hierarchical Bayesian Program Learning (HBPL) [7]<2013>
3. 从未知讲话者识别新的词汇,提出 Generative Hierarchical Hidden Markov model[8]<2014>
4. 通过从其他类别迁移样本,达到增加目标类别训练样本的目的[9]<2012>
5. 利用贝叶斯网络预测数据属性[10]<2009>
6. 进行 one-shot 任务的姿势识别[11]<2012>
Deep Siamese Networks
1. 卷积孪生网络的最佳模型架构如下:
从以上模型架构中可以看出,该网络由4个卷积层和一个全连接层构成。其中,全连接层和最后的概率输出采用的是sigmoid激活函数,其余的使用的是Relu激活函数。对两个网络输出的全连接层进行L1距离计算,各节点计算出来的距离带有不同权重,该权重在训练期间由网络学习得到,最后将计算出来的距离之和输入sigmoid函数中进行概率预测,
如公式(1):
σ ( ∑ j α j ∣ h 1 , L − 1 ( j ) − h 2 , L − 1 ( j ) ∣ ) \sigma(\sum_{j}\alpha_j|h^{(j)}_{1,L-1}-h^{(j)}_{2,L-1}|) σ(j∑αj∣h1,L−1(j)−h2,L−1(j)∣)
其中 σ \sigma σ是sigmoid激活函数, α j \alpha_j αj是由模型在训练期间学习到的参数
2. Loss function: 采用交叉熵损失函数,如公式(2):
ζ ( x 1 ( i ) , x 2 ( i ) ) = y ( x 1 ( i ) , x 2 ( i ) ) l o g p ( x 1 ( i ) , x 2 ( i ) ) + ( 1 − y ( x 1 ( i ) , x 2 ( i ) ) l o g ( 1 − p ( x 1 ( i ) , x 2 ( i ) ) ) + λ T ∣ w ∣ 2 ) \zeta(x_{1}^{(i)},x_{2}^{(i)})=y(x_{1}^{(i)},x_{2}^{(i)})logp(x_{1}^{(i)},x_{2}^{(i)})+(1-y(x_{1}^{(i)},x_{2}^{(i)})log(1-p(x_{1}^{(i)},x_{2}^{(i)}))+{\lambda^T}|w|^2) ζ(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)
3. Optimization:
minibatch size为128,学习率为 η j \eta_j ηj,动量为 μ j \mu_j μj,并且逐层定义 L 2 L_2 L2正则化权重 λ j \lambda_j λj,
权重更新策略如公式(3),(4):
w k j ( T ) ( x 1 ( i ) , x 2 ( i ) ) = w k j ( T ) + Δ w k j ( T ) ( x 1 ( i ) , x 2 ( i ) ) + 2 λ j ∣ w k j ∣ w_{kj}^{(T)}(x_{1}^{(i)},x_{2}^{(i)})=w_{kj}^{(T)}+{\Delta}w_{kj}^{(T)}(x_{1}^{(i)},x_{2}^{(i)})+2\lambda_j|w_{kj}| wkj(T)(x1(i),x2(i))=wkj(T)+Δwkj(T)(x1(i),x2(i))+2λj∣wkj∣
Δ w k j ( T ) ( x 1 ( i ) , x 2 ( i ) ) = − η j ▽ w k j T + μ j Δ w k j ( T − 1 ) {\Delta}w_{kj}^{(T)}(x_{1}^{(i)},x_{2}^{(i)})=-{\eta_j}{\triangledown}w_{kj}^{T}+{\mu_j}{\Delta}w_{kj}^{(T-1)} Δwkj(T)(x1(i),x2(i))=−ηj▽wkjT+μjΔwkj(T−1)
4. Weight initialization:
卷积层:
weights 初始化:正态分布,均值为0,标准差为0.1
biases 初始化:正态分布,均值为0.5,标准差为0.1
全连接层:
weights 初始化:正态分布,均值为0,标准差为0.2
biases 初始化:正态分布,均值为0.5,标准差为0.1
5. Learning schedule:
学习率衰减:
η j ( T ) = 0.99 η j ( T − 1 ) \eta_{j}^{(T)}=0.99\eta_{j}^{(T-1)} ηj(T)=0.99ηj(T−1),即每个epoch学习率衰减1%
每层网络的初始动量:0.5,每epoch线性增加,直到达到 μ j \mu_j μj
6. Hyperoarameter optimization(网络模型的超参数选择)
以最大化 one-shot 验证精度为目标,使用贝叶斯优化框架进行网络参数选择:
学习率选择范围:[ 1 0 − 4 , 1 0 − 1 10^{-4}, 10^{-1} 10−4,10−1]
动量选择范围:[0,1]
动量间隔选择范围:[0.001, 0.1]
L 2 L2 L2正则化系数选择:[0, 0.0001, 0.001, 0.01, 0.1]
卷积层乘子选择:[0.01, 0.1, 1, 10]
卷积核大小选择范围:[3x3, 20x20]
卷积核数量选择范围:[16, 256]
全连接层单元数:[128, 4096]
7. Affine distortions
采用仿射变换增加训练样本数据,变换概率为0.5,变换定义为 T = ( θ , ρ x , ρ y , s x , s y , t x , t y ) T=(\theta,\rho_x,\rho_y,s_x,s_y,t_x,t_y) T=(θ,ρx,ρy,sx,sy,tx,ty)
其中, θ ∈ [ − 10.0 , 10.0 ] \theta\in[-10.0,10.0] θ∈[−10.0,10.0], ρ x , ρ y ∈ [ − 0.3 , 0.3 ] \rho_x,\rho_y\in[-0.3,0.3] ρx,ρy∈[−0.3,0.3], s x , s y ∈ [ 0.8 , 1.2 ] s_x,s_y\in[0.8,1.2] sx,sy∈[0.8,1.2], t x , t y ∈ [ − 2 , 2 ] t_x,t_y\in[-2,2] tx,ty∈[−2,2]
Experiments
1. The Omniglot Dataset
共50个类别,其中30类用于train,10类用于validation,10类用于test
For Train
For Validation
For test
【每个网络训练 200 epoch 后,进行 one-shot validation (320 trails),当 validation error 在进行 20 epoch 后依旧没有下降,则停止训练,记录最好的 validation accuracy 和迭代次数】
2. The MNISTDataset
该论文还在 MNIST 数据集上进行了 10-way 1-shot 实验,其 test 流程与 Omniglot 一致,图片大小由 28x28 上采样为 35x35。测试中用到的模型,是由 Omniglot 进行下采样 (105x105 to 35x35) 训练得到的,同时也对比了最近邻算法,其结果如 表三:
Conclusions
- 表一的结果为训练模型过程中最好的分类验证精度,可以看出,该卷积孪生网络模型在 Omniglot 数据集上的表现非常好。
- 表二所示为在 Omniglot 上进行的 20-way 1-shot 实验结果,其分类精度略低于 HBPL 算法。
- 表三所示为在 MNIST 上进行的 10-way 1-shot 实验结果,其分类精度低于模型在 Omniglot 上的结果。
- 从表一可以看出:通过采样增加训练集样本和利用仿射变换增加训练集样本都可以提高分类精度。故数据量的增加,减少了模型过拟合的可能,同时也更容易使模型发现数据中隐藏的分类模式。
- 从表三可以看出:利用 Omniglot 训练好的模型并不能直接在 MNIST 上进行测试,该模型的泛化能力有限。
部分参考文献
[1] One shot learning of simple visual concepts. 2011.
[2] One-shot learning of object categories. 2006.
[3] Zero-shot learning with semantic output codes. 2009.
[4] Learning deep archtectures for ai. 2009.
[5] A fast learning algorithm for deep belief nets. 2006.
[6] A bayesian approach to unsupervised one-shot learning of object categories. 2003.
[7] One-shot learning by inverting a compositional causal process. 2013.
[8] One-shot learning of generative speech concepts. 2014.
[9] Transfer learning by borroeing examples for multiclass object datection. 2012
[10] One-shot learning with bayesian networks. 2009
[11] One shot learning gesture recongnition from rgbd images. 2012