Siamese Network简介

Siamese Network简介

Siamese Network 是一种神经网络的框架,而不是具体的某种网络,就像seq2seq一样,具体实现上可以使用RNN也可以使用CNN。

简单的说,Siamese Network用于评估两个输入样本的相似度。网络的框架如下图所示

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

训练Siamese Network采用的训练样本是一个tuple (X1,X2,y)(X1,X2,y),标签y=0y=0表示X1X1与X2X2属于不同类型(不相似、不重复、根据应用场景而定)。y=1y=1则表示X2X2与X2X2属于相同类型(相似)。

LOSS函数的设计应该是 
1. 当两个输入样本不相似(y=0y=0)时,距离EwEw越大,损失越小,即关于EwEw的单调递减函数。 
2. 当两个输入样本相似(y=1y=1)时,距离EwEw越大,损失越大,即关于EwEw的单调递增函数。

用L+(X1,X2)L+(X1,X2)表示y=1y=1时的LOSS, L?(X1,X2)L?(X1,X2)表示y=0y=0时的LOSS,则LOSS函数可以写成如下形式

Lw(X1,X2)=(1?y)L?(X1,X2)+yL+(X1,X2)Lw(X1,X2)=(1?y)L?(X1,X2)+yL+(X1,X2)

Siamese Network的基本架构、输入、输出以及LOSS函数的设计原则如上文所述,接下来就说一下在NLP的场景,具体的Siamese Network应该如何设计。

LSTM Siamese Network

在文本方面,需要计算两个文本之间的相似度,或者仅仅判断是否相似,是否重复的场景也很多。简单直接的方法可以直接从字面上判断,使用BOW模型,使用SimHash算法都行。但是有些场景,字面上看可能不相似,但是从语义上看是相似的,这就需要更复杂的模型来捕捉它的语义信息了。

比如Quora就有这方面的需求,问答类型的网站希望同样的问题只有一个就好,但表述问题的方式可以多种多样,因此需要能够捕捉到更多语义上的信息。

将Siamese Network架构中的用于表征X1X1与X2X2的Network更换为LSTM网络,就可以用于判断两个输入文本是否语义上相似。

Learning Text Similarity with Siamese Recurrent Networks这篇文章介绍了这种网络的结构,也给出了具体的参数。网络的结构如下图所示 

这是论文中的截图,在文本输入与BILSTM之间还有一个embedding层。

论文中的LSTM Siamese Network用了4层hidden unit size为64的BILSTM,再将每一时刻的输出取平均作为输入XX的表征向量,后面再接dim=128的全连接层,得到的两个向量f(X1)f(X1)与f(X2)f(X2)对应的就是第一部分介绍Siamese Network基本框架中的Gw(X1)Gw(X1)与Gw(X2)Gw(X2)。

这里的相似度EE使用的是余弦相似度,即

E(X1,X2)=X1X2|X1||X2|E(X1,X2)=X1X2|X1||X2|

所以?1≤E(X1,X2)≤1?1≤E(X1,X2)≤1,与欧氏距离不一样的是,EcosEcos的值越大,代表距离越近,值越小距离越远,所以LOSS函数的设计也要与上文所说的相反。即

y=0y=0时,LOSS函数随着EE单调递增 
y=1y=1时,LOSS函数随着EE单调递减

具体的有

L+(X1,X2)=14(1?Ew)2L+(X1,X2)=14(1?Ew)2

L?(X1,X2)=E2w,Ew<mL?(X1,X2)=0,otherwiseL?(X1,X2)=Ew2,Ew<mL?(X1,X2)=0,otherwise

总的LOSS函数不变 。mm是设定的阈值,可视化LOSS函数如下

LSTM Siamese Network总结起来就是 
1. 将Siamese Network中的Encoder换成BILSTM 
2. 将距离的计算改成余弦距离 
3. 修改相应的LOSS函数

这个设计上还是有一些可以改进的,比如在BILSTM输出后,加一个attention,而不是直接average每个时刻的输出,这样可以更好的表征输入的文本。

代码实现

目前github上有一个开源实现,deep-siamese-text-similarity,但是代码稍微有点乱,并且有些地方实现的不对。

比如BILSTM模型的定义中

outputs, _, _ = tf.nn.bidirectional_rnn(lstm_fw_cell_m, lstm_bw_cell_m, x, dtype=tf.float32)

return outputs[-1]
  • 1
  • 2
  • 3

将最后一个时刻的输出作为表征向量,这样就忽略了其它时刻的输出。

还有定义两个孪生网络的时候,使用了不同的权值,根据Siamese Network的设计,在这里应该是要reuse_variable来共享权值的。

自己实现了一个,也放到github上:https://github.com/THTBSE/siamese-lstm-network

原文地址:https://www.cnblogs.com/DjangoBlog/p/9210892.html

时间: 2024-11-02 17:01:53

Siamese Network简介的相关文章

Tutorial: Implementation of Siamese Network on Caffe, Torch, Tensorflow

1. caffe version:  If you want to try this network, just do as the offical document said, like the following codes:   1 --- 2 title: Siamese Network Tutorial 3 description: Train and test a siamese network on MNIST data. 4 category: example 5 include

Deep Belief Network简介——本质上是在做逐层无监督学习,每次学习一层网络结构再逐步加深网络

from:http://www.cnblogs.com/kemaswill/p/3266026.html 1. 多层神经网络存在的问题 常用的神经网络模型, 一般只包含输入层, 输出层和一个隐藏层: 理论上来说, 隐藏层越多, 模型的表达能力应该越强.但是, 当隐藏层数多于一层时, 如果我们使用随机值来初始化权重, 使用梯度下降来优化参数就会出现许多问题[1]: 如果初始权重值设置的过大, 则训练过程中权重值会落入局部最小值(而不是全局最小值). 如果初始的权重值设置的过小, 则在使用BP调整参

Siamese Network

摘抄自caffe github的issue697 Siamese nets are supervised models for metric learning [1]. [1] S. Chopra, R. Hadsell, and Y. LeCun. Learning a similarity metric discriminatively, with application to face verification. In Computer Vision and Pattern Recogni

论文笔记之:Fully-Convolutional Siamese Networks for Object Tracking

Fully-Convolutional Siamese Network for Object Tracking 摘要:任意目标的跟踪问题通常是根据一个物体的外观来构建表观模型.虽然也取得了不错的效果,但是他们这些 online-only approach 限制了模型可以学到的模型的丰富性.最近,已经有几个尝试开始探索深度卷积网络的强大的表达能力(express power).但是,当跟踪目标提前未知时,需要在线的执行 SGD 来适应网络的权重,严重的影响了系统的速度.本文中,我们提出一种基本的跟

基于2-channel network的图片相似度判别

一.相关理论 本篇博文主要讲解2015年CVPR的一篇关于图像相似度计算的文章:<Learning to Compare Image Patches via Convolutional Neural Networks>,本篇文章对经典的算法Siamese Networks 做了改进.学习这篇paper的算法,需要熟悉Siamese Networks(经典老文献<Signature Verification Using a Siamese Time Delay Neural Network

CVPR2018 单目标跟踪部分论文

from https://blog.csdn.net/weixin_40645129/article/details/81173088 CVPR2018已公布关于视频目标跟踪的论文简要分析与总结 一,A Twofold Siamese Network for Real-Time Object Tracking 论文名称 A Twofold Siamese Network for Real-Time Object Tracking 简介 此算法在SiamFC的基础上增加了语义分支,进一步提升Sia

Caffe源码-LossLayer类(下)

InfogainLossLayer类 EuclideanLossLayer类 HingeLossLayer类 ContrastiveLossLayer类 InfogainLossLayer类简介 InfogainLossLayer与SoftmaxWithLossLayer类似,只不过增加了一个信息增益矩阵\(H\),用于指定某真实类别的数据被预测为某一类别时的权重,常用于类间样本数不均衡的情况.当矩阵\(H\)为单位矩阵时,等同于SoftmaxWithLossLayer. 第一个输入blob为网

Learning to Compare Image Patches via Convolutional Neural Networks --- Reading Summary

Learning to Compare Image Patches via Convolutional Neural Networks ---  Reading Summary 2017.03.08 Target: this paper attempt to learn a geneal similarity function for comparing image patches from image data directly. There are several ways in which

干货分享: 长达150页的openvswitch的ppt,不实验无真相

<iframe height=570 width=100% scrolling="no" src="http://share.csdn.net/frame/7766" frameborder=0 allowfullscreen></iframe> 一.概论 Software Defined Network简介 OpenFlow简介 Openvswitch简介 二.架构 Openvswitch架构 实验一:查看Openvswitch的架构 Op