Siamese网络(孪生神经网络)详解

SiameseFC

  • Siamese网络(孪生神经网络)
    • 本文参考文章:
    • 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解决,只要事先知道了所有的类。
第二类,分类数量较多(或者说无法确认具体数量),每一类的数据量较少,比如人脸识别、人脸验证任务。

用了什么方法解决?

解决以上两个问题,本文提出了以下解决方法:

  1. 提出了一种思路:将输入映射为一个特征向量,使用两个向量之间的“距离”(L1 Norm)来表示输入之间的差异(图像语义上的差距)。

  2. 基于上述思路设计了Siamese Network。每次需要输入两个样本作为一个样本对计算损失函数。
    1)用的softmax只需要输入一个样本。
    2)FaceNet中的Triplet Loss需要输入三个样本。

  3. 提出了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代表两个输入数据属于同一类别时的损失函数(G,genuine)。
L_I代表两个输入数据不属于同一类别的损失函数(I,imposter)。
在这里插入图片描述
根据我们对两个向量间举例的定义,可以得到以下条件:
即不同类别向量间的距离比相同类别向量间距离大。
两个向量之间距离越小,属于同一类别的可能性就越大。

目前的Contrastive Loss:

在这里插入图片描述
其中:
在这里插入图片描述
代表两个样本特征X1和X2 的欧氏距离(二范数)P 表示样本的特征维数,Y 为两个样本是否匹配的标签,Y=1 代表两个样本相似或者匹配,Y=0 则代表不匹配,m 为设定的阈值,N 为样本个数。

观察上述的contrastive loss的表达式可以发现,这种损失函数可以很好的表达成对样本的匹配程度,也能够很好用于训练提取特征的模型。

当 Y=1(即样本相似时),损失函数只剩下
在这里插入图片描述
即当样本不相似时,其特征空间的欧式距离反而小的话,损失值会变大,这也正好符号我们的要求。
当 Y=0 (即样本不相似时),损失函数为
在这里插入图片描述
即当样本不相似时,其特征空间的欧式距离反而小的话,损失值会变大,这也正好符号我们的要求。
注意:
这里设置了一个阈值margin,表示我们只考虑不相似特征欧式距离在0~margin之间的,当距离超过margin的,则把其loss看做为0(即不相似的特征离的很远,其loss应该是很低的;而对于相似的特征反而离的很远,我们就需要增加其loss,从而不断更新成对样本的匹配程度)

Siamese的思考

Siamese的思想总结

其实讲了这么多,主要思想就是三点:

  1. 输入不再是单个样本,而是一对样本,不再给单个的样本确切的标签,而且给定一对样本是否来自同一个类的标签,是就是0,不是就是1
  2. 设计了两个一模一样的网络,网络共享权值W,对输出进行了距离度量,可以说l1、l2等。
  3. 针对输入的样本对是否来自同一个类别设计了损失函数,损失函数形式有点类似交叉熵损失:
    在这里插入图片描述
    最后使用获得的损失函数,使用梯度反传去更新两个网络共享的权值W。

Siamese network是双胞胎连体,整一个三胞胎连体行不行?

不好意思,已经有人整过了,叫Triplet network,论文是《Deep metric learning using Triplet network》,输入是三个,一个正例+两个负例,或者一个负例+两个正例,训练的目标是让相同类别间的距离尽可能的小,让不同类别间的距离尽可能的大。Triplet在cifar, mnist的数据集上,效果都是很不错的,超过了siamese network。四胞胎,五胞胎会不会更屌?。。。。。目前还没见过。。。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/389259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo 源码分析 - 服务引用

1. 简介 在上一篇文章中,我详细的分析了服务导出的原理。本篇文章我们趁热打铁,继续分析服务引用的原理。在 Dubbo 中,我们可以通过两种方式引用远程服务。第一种是使用服务直联的方式引用服务,第二种方式是基于注册中心进行引用。…

期权价格的上限和下限

期权按照买方权利性质分为:看涨期权和看跌期权 1、首先,看涨期权的上限和下限 看涨期权价格上限为其标的资产价格。 看涨期权是给予买方一个在未来买入标的资产的权利,如果该权利的价格高于标的资产的价格,那么投资者不如直接购买…

一件登录facebook_我从Facebook的R教学中学到的6件事

一件登录facebookBetween 2018 to 2019, I worked at Facebook as a data scientist — during that time I was involved in developing and teaching a class for R beginners. This was a two-day course that was taught about once a month to a group of roughly 15–20 …

SiameseFC超详解

SiameseFC前言论文来源参考文章论文原理解读首先要知道什么是SOT?(Siamese要做什么)SiameseFC要解决什么问题?SiameseFC用了什么方法解决?SiameseFC网络效果如何?SiameseFC基本框架结构SiameseFC网络结构Si…

Python全栈工程师(字符串/序列)

ParisGabriel Python 入门基础字符串:str用来记录文本信息字符串的表示方式:在非注释中凡是用引号括起来的部分都是字符串‘’ 单引号“” 双引号 三单引""" """ 三双引有内容代表非空字符串否则是空字符串 区别&#xf…

跨库数据表的运算

跨库数据表的运算,一直都是一个说难不算太难,说简单却又不是很简单的、总之是一个麻烦的事。大量的、散布在不同数据库中的数据表们,明明感觉要把它们合并起来,再来个小小的计算,似乎也就那么回事……但真要做起来&…

FCN全卷积网络随笔

参考:四、全卷积网络FCN详细讲解(超级详细哦) 这篇文章已经写的很好了,这里说两个我考虑的点。 第一个就是:FCN在缩小成heat map,为什么要通过上采样还原回原图大小? 我觉得这个的原因是因为&a…

熊猫在线压缩图_回归图与熊猫和脾气暴躁

熊猫在线压缩图数据可视化 (Data Visualization) I like the plotting facilities that come with Pandas. Yes, there are many other plotting libraries such as Seaborn, Bokeh and Plotly but for most purposes, I am very happy with the simplicity of Pandas plotting…

敏捷数据科学pdf_敏捷数据科学数据科学可以并且应该是敏捷的

敏捷数据科学pdfTL;DR;TL; DR; I have encountered a lot of resistance in the data science community against agile methodology and specifically scrum framework; 在数据科学界,我遇到了许多反对敏捷方法论(特别是Scrum框架)的抵制。 I don’t see it this …

oracle的连接字符串

OracleConnection oCnn new OracleConnection("Data SourceORCL_SERVER;USERM70;PASSWORDmmm;");建立个角色 建立个表空间(角色与表空间同名的) 在方案里就可以建立表,然后就哦了 10g

SiameseRPN详解

SiameseRPN论文来源论文背景一,简介二,研究动机三、相关工作论文理论注意:网络结构:1.Siamese Network2.RPN3.LOSS计算4.Tracking论文的优缺点分析一、Siamese-RPN的贡献/优点:二、Siamese-RPN的缺点:代码流…

数据可视化 信息可视化_可视化数据操作数据可视化与纪录片的共同点

数据可视化 信息可视化Data visualization is a great way to celebrate our favorite pieces of art as well as reveal connections and ideas that were previously invisible. More importantly, it’s a fun way to connect things we love — visualizing data and kicki…

python 图表_使用Streamlit-Python将动画图表添加到仪表板

python 图表介绍 (Introduction) I have been thinking of trying out Streamlit for a while. So last weekend, I spent some time tinkering with it. If you have never heard of this tool before, it provides a very friendly way to create custom interactive Data we…

Python--day26--复习

转载于:https://www.cnblogs.com/xudj/p/9953293.html

sockets C#

Microsoft.Net Framework为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序。.Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可…

667. Beautiful Arrangement II

找规律 1&#xff0c;2&#xff0c;... , n 乱序排列&#xff0c;相邻数据的绝对差最多有n-1种 比如1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5对应于 1 5 2 4 3 class Solution { public:vector<int> constructArray(int n, int k) {vector<int> re…

SiameseRPN++分析

SiamRPN论文来源论文背景什么是目标跟踪什么是孪生网络结构Siamese的局限解决的问题论文分析创新点一&#xff1a;空间感知策略创新点二&#xff1a;ResNet-50深层网络创新点三&#xff1a;多层特征融合创新点四&#xff1a;深层互相关代码分析整体代码简述&#xff08;1&#…

MySQL:Innodb page clean 线程 (二) :解析

一、数据结构和入口函数 1、数据结构 ● page_cleaner_t&#xff1a;整个Innodb只有一个&#xff0c;包含整个page clean线程相关信息。其中包含了一个page_cleaner_slot_t的指针。变量名含义mutex用于保护整个page_cleaner_t结构体和page_cleaner_slot_t结构体&#xff0c;当…

Lockdown Wheelie项目

“It’s Strava for wheelies,” my lockdown project, combining hyper-local exercise with data analytics to track and guide improvement. Practising wheelies is a great way to stay positive; after all, it’s looking up, moving forward.我的锁定项目“将Strava运…