孪生神经网络(Siamese Network)详解

孪生神经网络(Siamese Network)详解

1. 要解决什么问题?

主要解决以下两类分类问题:

  • 第一类,分类数量较少,每一类的数据量较多,比如ImageNet、VOC等。这种分类问题可以使用神经网络或者SVM解决,只要事先知道了所有的类。
  • 第二类,分类数量较多(或者说无法确认具体数量),每一类的数据量较少,比如人脸识别、人脸验证任务。

2. 文章创新点

解决以上两个问题,本文提出了以下解决方法:

  1. 提出了一种思路:将输入映射为一个特征向量,使用两个向量之间的“距离”(L1 Norm)来表示输入之间的差异(图像语义上的差距)。

  2. 基于上述思路设计了Siamese Network。每次需要输入两个样本作为一个样本对计算损失函数。
    1)用的softmax只需要输入一个样本。
    2)FaceNet中的Triplet Loss需要输入三个样本。

  3. 提出了Contrastive Loss用于训练。

3. 网络结构

孪生神经网络(Siamese Network)详解
Siamese Network有两个结构相同,且共享权值的子网络。分别接收两个输入X1X1与X2X2,将其转换为向量Gw(X1)与Gw(X2),再通过某种距离度量的方式计算两个输出向量的距离Ew。

4. Contrastive Loss损失函数

在孪生神经网络(siamese network)中,其采用的损失函数是contrastive loss,这种损失函数可以有效的处理孪生神经网络中的paired data的关系。contrastive loss的表达式如下:
孪生神经网络(Siamese Network)详解
其中
孪生神经网络(Siamese Network)详解

代表两个样本特征X1X_1X2X_2 的欧氏距离(二范数)P 表示样本的特征维数,Y 为两个样本是否匹配的标签,Y=1 代表两个样本相似或者匹配,Y=0 则代表不匹配,m 为设定的阈值,N 为样本个数。

观察上述的contrastive loss的表达式可以发现,这种损失函数可以很好的表达成对样本的匹配程度,也能够很好用于训练提取特征的模型。

  • 当 Y=1(即样本相似时),损失函数只剩下
    孪生神经网络(Siamese Network)详解
    即当样本不相似时,其特征空间的欧式距离反而小的话,损失值会变大,这也正好符号我们的要求。
  • 当 Y=0 (即样本不相似时),损失函数为
    孪生神经网络(Siamese Network)详解
    即当样本不相似时,其特征空间的欧式距离反而小的话,损失值会变大,这也正好符号我们的要求。

[注意这里设置了一个阈值margin,表示我们只考虑不相似特征欧式距离在0~margin之间的,当距离超过margin的,则把其loss看做为0(即不相似的特征离的很远,其loss应该是很低的;而对于相似的特征反而离的很远,我们就需要增加其loss,从而不断更新成对样本的匹配程度)]

5. 最后

孪生神经网络(Siamese Network)详解