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的数学表达式如下所示:
其中,表示的是两个网络输出的欧式距离,即:
其中,表示的是网络的输出。从对比损失的定义来看,在对比损失中,需要一对正负训练样本。其中,正样本对包含一个anchor样本和一个正样本,负样本对包含一个anchor样本和一个负样本。对比损失函数的目标是使正样本对具有较小的距离,而负样本对具有较大的距离。
2.2.2. Triplet Loss
与Contrastive Loss中的样本对不一样,在Triplet Loss中,使用的数据是三元组而不是二元对。三元组由anchor、正样本和负样本组成,最初是在参考文献[2]中被提出,并被应用于人脸识别。
在Triplet Loss中,希望anchor和正样本编码之间的距离被最小化,而anchor和负样本编码之间的距离被最大化,如下图所示:
其具体的数学表达式为:
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.