广州市网站建设怎么样,网页设计图片居中,在兔展上怎么做网站页面,镇江教育云平台网站建设SiameseFCSiamese网络#xff08;孪生神经网络#xff09;本文参考文章#xff1a;Siamese背景Siamese网络解决的问题要解决什么问题#xff1f;用了什么方法解决#xff1f;应用的场景#xff1a;Siamese的创新Siamese的理论Siamese的损失函数——Contrastive Loss损失函…
SiameseFCSiamese网络孪生神经网络本文参考文章Siamese背景Siamese网络解决的问题要解决什么问题用了什么方法解决应用的场景Siamese的创新Siamese的理论Siamese的损失函数——Contrastive Loss损失函数的选择论文中Contrastive Loss目前的Contrastive Loss:Siamese的思考Siamese的思想总结Siamese network是双胞胎连体整一个三胞胎连体行不行Siamese网络孪生神经网络
本文参考文章
精读深度学习论文(25) Siamese Network 详解Siamese网络 孪生神经网络(Siamese Network)详解 孪生神经网络Siamese neural network Siamese network 孪生神经网络–一个简单神奇的结构
Siamese背景
Siamese和Chinese有点像。Siam是古时候泰国的称呼中文译作暹罗。Siamese也就是“暹罗”人或“泰国”人。Siamese在英语中是“孪生”、“连体”的意思这是为什么呢 十九世纪泰国出生了一对连体婴儿当时的医学技术无法使两人分离出来于是两人顽强地生活了一生1829年被英国商人发现进入马戏团在全世界各地表演1839年他们访问美国北卡罗莱那州后来成为“玲玲马戏团” 的台柱最后成为美国公民。1843年4月13日跟英国一对姐妹结婚恩生了10个小孩昌生了12个姐妹吵架时兄弟就要轮流到每个老婆家住三天。1874年恩因肺病去世另一位不久也去世两人均于63岁离开人间。两人的肝至今仍保存在费城的马特博物馆内。从此之后“暹罗双胞胎”Siamesetwins就成了连体人的代名词也因为这对双胞胎让全世界都重视到这项特殊疾病。 简单来说Siamese network就是“连体的神经网络”
Siamese网络解决的问题
要解决什么问题
第一类分类数量较少每一类的数据量较多比如ImageNet、VOC等。这种分类问题可以使用神经网络或者SVM解决只要事先知道了所有的类。 第二类分类数量较多或者说无法确认具体数量每一类的数据量较少比如人脸识别、人脸验证任务。
用了什么方法解决
解决以上两个问题本文提出了以下解决方法 提出了一种思路将输入映射为一个特征向量使用两个向量之间的“距离”L1 Norm来表示输入之间的差异图像语义上的差距。 基于上述思路设计了Siamese Network。每次需要输入两个样本作为一个样本对计算损失函数。 1)用的softmax只需要输入一个样本。 2)FaceNet中的Triplet Loss需要输入三个样本。 提出了Contrastive Loss用于训练。
应用的场景
孪生神经网络用于处理两个输入比较类似的情况。伪孪生神经网络适用于处理两个输入有一定差别的情况。比如我们要计算两个句子或者词汇的语义相似度使用siamese network比较适合如果验证标题与正文的描述是否一致标题和正文长度差别很大或者文字是否描述了一幅图片一个是图片一个是文字就应该使用pseudo-siamese network。也就是说要根据具体的应用判断应该使用哪一种结构哪一种Loss。
Siamese的创新
这个网络主要的优点是淡化了标签使得网络具有很好的扩展性可以对那些没有训练过的类别进行分类这点是优于很多算法的。而且这个算法对一些小数据量的数据集也适用变相的增加了整个数据集的大小使得数据量相对较小的数据集也能用深度网络训练出不错的效果。
Siamese的理论 不同输入X_1, X_2通过统一G_W得到两个向量G_W(X_1), G_W(X_2)计算两个向量之间的L1距离获得E_W。 其中两个network是两个共享权值的网络实际上就是两个完全相同的网络。孪生神经网络有两个输入X1 and X2,将两个输入feed进入两个神经网络Network1 and Network2这两个神经网络分别将输入映射到新的空间形成输入在新的空间中的表示。通过Loss的计算评价两个输入的相似度。
如果左右两边不共享权值而是两个不同的神经网络叫做pseudo-siamese network伪孪生神经网络。对于pseudo-siamese network两边可以是不同的神经网络如一个是lstm一个是cnn也可以是相同类型的神经网络。
Siamese的损失函数——Contrastive Loss
损失函数的选择
Softmax当然是一种好的选择但不一定是最优选择即使是在分类问题中。传统的siamese network使用Contrastive Loss。损失函数还有更多的选择siamese network的初衷是计算两个输入的相似度,。左右两个神经网络分别将输入转换成一个向量在新的空间中通过判断cosine距离就能得到相似度了。Cosine是一个选择exp function也是一种选择欧式距离什么的都可以训练的目标是让两个相似的输入距离尽可能的小两个不同类别的输入距离尽可能的大。
论文中Contrastive Loss
论文中的损失函数定义如下 Y代表X_1, X_2是否属于同一类别。输入同一类别为0不属于同一类别为1。 P代表输入数据数量。 i表示当前输入数据下标。 L_G代表两个输入数据属于同一类别时的损失函数Ggenuine。 L_I代表两个输入数据不属于同一类别的损失函数Iimposter。 根据我们对两个向量间举例的定义可以得到以下条件 即不同类别向量间的距离比相同类别向量间距离大。 两个向量之间距离越小属于同一类别的可能性就越大。
目前的Contrastive Loss: 其中 代表两个样本特征X1和X2 的欧氏距离二范数P 表示样本的特征维数Y 为两个样本是否匹配的标签Y1 代表两个样本相似或者匹配Y0 则代表不匹配m 为设定的阈值N 为样本个数。
观察上述的contrastive loss的表达式可以发现这种损失函数可以很好的表达成对样本的匹配程度也能够很好用于训练提取特征的模型。
当 Y1即样本相似时损失函数只剩下 即当样本不相似时其特征空间的欧式距离反而小的话损失值会变大这也正好符号我们的要求。 当 Y0 (即样本不相似时损失函数为 即当样本不相似时其特征空间的欧式距离反而小的话损失值会变大这也正好符号我们的要求。 注意 这里设置了一个阈值argin表示我们只考虑不相似特征欧式距离在argin之间的当距离超过argin的则把其loss看做为(即不相似的特征离的很远其loss应该是很低的而对于相似的特征反而离的很远我们就需要增加其loss从而不断更新成对样本的匹配程度)
Siamese的思考
Siamese的思想总结
其实讲了这么多主要思想就是三点
输入不再是单个样本而是一对样本不再给单个的样本确切的标签而且给定一对样本是否来自同一个类的标签是就是0不是就是1设计了两个一模一样的网络网络共享权值W对输出进行了距离度量可以说l1、l2等。针对输入的样本对是否来自同一个类别设计了损失函数损失函数形式有点类似交叉熵损失 最后使用获得的损失函数使用梯度反传去更新两个网络共享的权值W。
Siamese network是双胞胎连体整一个三胞胎连体行不行
不好意思已经有人整过了叫Triplet network论文是《Deep metric learning using Triplet network》输入是三个一个正例两个负例或者一个负例两个正例训练的目标是让相同类别间的距离尽可能的小让不同类别间的距离尽可能的大。Triplet在cifar, mnist的数据集上效果都是很不错的超过了siamese network。四胞胎五胞胎会不会更屌。。。。。目前还没见过。。。