关于孪生网络的简单学习记录
1. Siamese network(孪生网络)概念:
孪生神经网络- 如图所示是一个孪生网络的一般架构,Siamese network就是“连体的神经网络”,神经网络的“连体”是通过共享权值来实现的,共享权值就是左右两个神经网络的权重一模一样,在代码实现的时候,甚至可以是同一个网络,不用实现另外一个,因为权值都一样。对于siamese network,两边可以是lstm或者cnn,都可以。
- 如果左右两边不共享权值,而是两个不同的神经网络,则叫做pseudo-siamese network,叫做伪孪生神经网络。
2. 孪生网络用途:
- 孪生神经网络有两个输入(Input1 and Input2),将两个输入feed进入两个神经网络(Network1 and Network2),这两个神经网络分别将输入映射到新的空间,形成输入在新的空间中的表示。通过Loss的计算,评价两个输入的相似度。
- 孪生神经网络用于处理两个输入"比较类似"的情况。伪孪生神经网络适用于处理两个输入"有一定差别"的情况。比如,我们要计算两个句子或者词汇的语义相似度,使用siamese network比较适合;如果验证标题与正文的描述是否一致(标题和正文长度差别很大),或者文字是否描述了一幅图片(一个是图片,一个是文字),就应该使用pseudo-siamese network。也就是说,要根据具体的应用,判断应该使用哪一种结构,哪一种Loss。
- 具体使用实例有:
1)词汇语义相似度分析,QA 中 question 和 answer 的匹配
2)手写体识别也可以用 Siamese Network
3. Triplet Network(三胞胎网络)
-
Triplet Network 叫三胞胎网络,输入是三个,一个正例+两个负例,或者一个负例+两个正例,训练的目标是让相同类别间的距离尽可能的小,让不同类别间的距离尽可能的大。Triplet在cifar, mnist的数据集上,效果都是很不错的,超过了siamese network,论文是《Deep metric learning using Triplet network》。
网友评论