Simanse

Author Avatar
cooscao 4月 22, 2020

孪生网络

Siamese NetWork 原论文 《Learning a Similarity Metric Discriminatively, with Application to Face Verification》笔记

背景

传统判别式分类方法例如神经网络或支持向量机无法解决像人脸识别这种任务:类别非常多,而每个类别的样本又很少。通常,对这种任务来说使用的是基于距离评判的方法,即将新样本与已经分类了的样本计算相似度,来评判到底属于哪类。所以提出Siamese Structure。

主要思想

找到一个$G_{W}(X)$,其中$W$为待求参数,使得距离函数

  1. 当$X_{1}$与$X_{2}$属于同一类时,$E_{W}(X_{1}, X_{2})$很小
  2. 当$X_{1}$与$X_{2}$属于同一类时,$E_{W}(X_{1}, X_{2})$很大

训练方法,即从样本中输入$pair(X_{1}, X_{2})$,当$X_{1}, X{2}$属于同一类时,最小化$E$,反之,最大化$E$。

  • 特别注意的是,在这里$G$对与输入的$X_{1}, X_{2}$是同一个结构,即它们是共享权重$W$的,相似度评判是对称的,这种结构称为孪生结构(Siamese architecture)
  • 孪生结构的灵活性即可以自由选择想要的特征提取器$G$,无论是神经网络或者是传统方法PCA等,在这篇论文中,作者采用的是卷积神经网络来进行人脸验证的任务。

模型结构

对于训练样本$(X_{1}, X_{2})$是同一个人的图像,$(X_{1}, X_{2}^{‘})$是不同人的图像。则有以下:

  1. 存在$m>0$,使得$E_{W}(X_{1}, X_{2})+m < E_{W}(X_{1}, X_{2}^{‘})$,其中m代表margin
  2. 当$E_{W}$小于一个设定的阈值时,则输出标签$Y$为1,反之$Y=0$

Loss Function

其中$L_{G}$为正样本的loss, $L_{I}$为负样本的loss,$Y$为各自的标签

在论文中,作者所取$L_{G}$和$L_{I}$如下,最终loss function为,但现在基本不用了,其中$Q$为常数,通常设为$E_{W}$的上界:

Constrasive Loss(对比损失)

在caffe中定义的孪生网络的对比损失函数为

  • 当$Y=1$时(样本相似时),$L=\frac{1}{2N}\sum^{N}_{n=1}YD_{W}^2$,即原本相似的样本,如果在特征空间上欧式距离越大,则损失越大
  • 当$Y=0$时(样本不相似时),$L_{D}=\frac{1}{2 N} \sum_{n=1}^{N}(1-Y) \max \left(m-D_{W}, 0\right)^{2}$,即当样本本来不相似时,欧式距离越小,损失越大。其中$m$代表margin,即此时$D_{W}$只在$0~margin$之间,当$D_{W}>margin$时,此时损失直接为0。

卷积神经网络

作者采用两层卷积神经网络,和一层前馈神经网络作为$G$,这种情形适合于图像,对于文本或其它类型的数据,可灵活自由地采用不同的特征提取器。

扩展

Triplet Network

在Simase architecture基础上,《Deep metric learning using Triplet network》这篇论文提出了triplet net。其中主要思想就是将输入由$(X_{1}, X_{2},Y)$变成了$(X_{1}, X_{2}, X_{1}^{‘})$,其中$X_{1}$和$X_{1}^{‘}$是相同的类别的样本,而$X_{1}$和$X_{2}$是不同的样本。

即分别输入一对正例和一对负例,训练的目标是让相同类别间的距离尽可能的小,让不同类别间的距离尽可能的大。

Pseudo-Siamese Network

伪孪生网络和孪生网络的区别即是伪孪生网络的$G$并不共享权重,而且两边可以使用不同的模型。例如对于文本数据,Network1可以是CNN,Network2可以是LSTM。

  • 伪孪生网络由于两边结构不共享权重,所以对于Input1和Input2特征结构差异较大时,比较相似度,效果较好。例如孪生网络适合标题-标题相似度比较,而伪孪生网络则适合标题-文本相似度比较。

Sentence-Bert(采用Siamese结构的Bert模型)

在这篇文章中,作者将Siamese Network中的模型变成使用BERT。在训练过程中,loss不再采用传统的Constrasive Loss,而是将提取出的特征向量,通过$(u, v, |u-v|)$拼接起来,输入到Softmax分类器中去判断是否相似,实际上这也是对于文本数据,现在惯用的方法。其中常用的特征还包括$u*v$。而在预测时候,直接将提取出的特征向量$u,v$计算余弦相似度$cos(u,v)$来判断是否相似。

本文的重点是训练好Siamese-Bert模型后,将模型用来提取Sentence-embedding。而这种方法提出来的embedding效果也比原本的Bert embedding要好很多,所以可见使用Simanse结构训练出来的模型也能起到很好的特征提取效果。

One-shot Learning with Siamese Network

  • 什么是one-shot learning?

    一般的分类任务,会在训练样本中对于每个类别给出很多个标记的样本的,这样在输入到模型中进行学习,而one-shot learing指的是对于每个样本只给出了一个或者少量的训练样本,这样使用传统分类方法进行学习,由于训练样本少,所以模型很容易导致过拟合。

  • 单样本学习的baseline

    对于这类任务很直观的方法,就是采用k近邻(其中k=1),即新来一个预测样本,与每个类别所有的标注数据进行欧式距离计算,离的最近的就为所预测类别。

在《Siamese Neural Networks for One-shot Image Recognition》这篇论文中,作者使用Siamese Network来进行one-shot learning得到了很好的效果。

  1. 使用孪生网络结构,虽然每个类别只有少量的标注样本,但类别之间能够相互组成pair对,这样数据量能飞速上升。例如对于Omniglot数据集,共有1623类手写字符,每个字符只有20个手写数据,这样能有效地获得183160对训练数据,这样在训练时不太同意导致过拟合。
  2. 作者同样对于图片采用了卷积神经网络作为特征提取器,但使用了更深的网络,更多的参数,这样能获取更好的特征。

最终在Omniglot数据集上得到了很好的效果

参考