Siamese Network孪生网络

1. Siamese含义的由来

在参考文献[1]中介绍了Siamese这个词的由来,具体的故事如下所示:

十九世纪泰国出生了一对连体婴儿,名字分别为恩和昌,当时的医学技术无法使两人分离出来,于是两人顽强地生活了一生,1829年被英国商人发现,进入马戏团,在全世界各地表演,1839年他们访问美国北卡罗莱那州后来成为“玲玲马戏团” 的台柱,最后成为美国公民。1843年4月13日跟英国一对姐妹结婚,恩生了10个小孩,昌生了12个,姐妹吵架时,兄弟就要轮流到每个老婆家住三天。1874年恩因肺病去世,另一位不久也去世,两人均于63岁离开人间。两人的肝至今仍保存在费城的马特博物馆内。从此之后“暹罗双胞胎”(Siamese twins)就成了连体人的代名词,也因为这对双胞胎让全世界都重视到这项特殊疾病。

总的来说,Siamese就是表示的连体的意思。与深度神经网络结合,这便有了Siamese network,即“连体神经网络”,注意,连体就表示了两个网络得共享参数。

2. Siamese Network

2.1. 网络结构

Siamese Network的网络结构如下图所示:

输入图片说明

从上述的网络结构以及对于Siamese含义的解释,我们可以发现在Siamese网络中,两个字网络是具有相同结构,参数以及权重的相同子网络,必须像连体双胞胎一样。

2.2. 损失函数

通常在Siamese Network中使用的损失函数包括对比损失函数(Contrastive Loss),Triplet Loss以及其他损失函数(比如cosine loss,欧式距离等)。其中,以Contrastive Loss和Triplet Loss使用较多。

2.2.1. Contrastive Loss

Contrastive Loss的数学表达式如下所示:

CL=(1Y)12(Dw)2+(Y)12{max(0,mDw2)}CL=\left ( 1-Y \right )\frac{1}{2}\left ( D_w \right )^2+\left ( Y \right )\frac{1}{2}\left\{max\left ( 0,m-D_w^2 \right ) \right\}

其中,DwD_w表示的是两个网络输出的欧式距离,即:

Dw=(Gw(X1)Gw(X2))2D_w=\sqrt{\left ( G_w\left ( X_1 \right )-G_w\left ( X_2 \right ) \right )^2}

其中,GwG_w表示的是网络的输出。从对比损失的定义来看,在对比损失中,需要一对正负训练样本。其中,正样本对包含一个anchor样本和一个正样本,负样本对包含一个anchor样本和一个负样本。对比损失函数的目标是使正样本对具有较小的距离,而负样本对具有较大的距离。

2.2.2. Triplet Loss

与Contrastive Loss中的样本对不一样,在Triplet Loss中,使用的数据是三元组而不是二元对。三元组由anchor、正样本和负样本组成,最初是在参考文献[2]中被提出,并被应用于人脸识别。

在Triplet Loss中,希望anchor和正样本编码之间的距离被最小化,而anchor和负样本编码之间的距离被最大化,如下图所示:

输入图片说明

其具体的数学表达式为:

L=iN[f(xia)f(xip)22f(xia)f(xin)22+α]L=\sum_{i}^{N}\left [ \left \| f\left ( x_i^a \right )-f\left ( x_i^p \right ) \right \|_2^2-\left \| f\left ( x_i^a \right )-f\left ( x_i^n \right ) \right \|_2^2+\alpha \right ]

3. 总结

Siamese Network是受到了Siamese的启发,旨在通过共享网络的方式学习出对数据的表征,通过设计不同的损失函数,如Contrastive Loss和Triplet Loss,从而实现对不同数据的度量。

参考文献

[1] Siamese network 孪生神经网络–一个简单神奇的结构

[2] Schroff F , Kalenichenko D , Philbin J . FaceNet: A Unified Embedding for Face Recognition and Clustering[J]. IEEE, 2015.