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。四胞胎,五胞胎会不会更屌?。。。。。目前还没见过。。。

Siamese网络(孪生神经网络)详解相关推荐

  1. Incremental-Network-Quantization增量网络量化论文详解

    Incremental-Network-Quantization增量网络量化论文详解 笔者将从以下几个方面分析该论文的原理及其实现,由于笔者能力有限,如有错误望诸公指正. 论文作者代码:https:/ ...

  2. 轻量级网络之mobilenet_v1详解

    轻量级网络之mobilenet_v1详解 前言:学习网络结构有一段时间了,记录下mobilenet_v1的结构 论文地址:https://arxiv.org/pdf/1704.04861.pdf 一. ...

  3. [深度学习概念]·Siamese network 孪生神经网络简介

    Siamese network 孪生神经网络--一个简单神奇的结构 名字的由来 Siamese和Chinese有点像.Siam是古时候泰国的称呼,中文译作暹罗.Siamese也就是"暹罗&q ...

  4. 科普:5G网络关键技术详解

    不久前,中国华为公司主推的Polar Code(极化码)方案,成为5G控制信道eMBB场景编码方案.消息一出,在网络上就炸开了锅,甚至有媒体用"华为碾压高通,拿下5G时代"来形容这 ...

  5. openstack架构详解图_英特尔顶级技术专家合力缔造精品:Linux开源网络全栈详解...

    日常水开篇 自1991年诞生起,Linux已经走过了接近三十年.Linux早已没有了问世时的稚气,正在各个领域展示自己成熟的魅力. 以Linux为基础,也衍生出了各种开源生态,例如网络和存储.而生态离 ...

  6. 2020中级计算机工程师,2020年上半年中级网络工程师报考详解

    原标题:2020年上半年中级网络工程师报考详解 软考全称叫做"全国计算机技术与软件专业技术资格(水平)考试"已经开展了十多年了,所受到的欢迎程度也是越来越高,据统计累计参加软考的人 ...

  7. 最形象的卷积神经网络详解:从算法思想到编程实现(转载)

    mark一下,感谢作者分享! 原标题:最形象的卷积神经网络详解:从算法思想到编程实现 1 新智元推荐 查看全文 http://www.taodudu.cc/news/show-4611564.html ...

  8. iOS开发——使用Charles进行https网络抓包详解

    我在前面两篇博客中<网络抓包工具Charles的介绍与使用><iOS开发--使用Charles进行http网络抓包详解>对Charles的http抓包进行了详细的讲解.今天我们 ...

  9. linux网络服务详解,Linux网络服务器配置基础详解 (3)

    Linux网络服务器配置基础详解 (3) Linux网络服务器配置基础详解 (3) 第三步:编辑"inetd.conf"文件(vi /etc/inetd.conf),禁止所有不需要 ...

  10. 看完之后保证你对socket编程步骤胸有成竹。 C++ Socket网络编程基础详解(TCP)

    C++ Socket网络编程基础详解(TCP版) ​    网络编程,就是编写程序使得两台计算机交换数据,其实从本质上来讲,网络编程最终所实现的功能,和我们文件的输入输出很相似,只是文件输入输出的对象 ...

最新文章

  1. SLAM前端 ---------特征提取之ORB(ORB与SIFT与SURF)
  2. 数据结构之队列、双端队列
  3. 影像组学视频学习笔记(19)-数据标准化、归一化极简概述、Li‘s have a solution and plan.
  4. 20155330 《信息安全系统设计基础》课程总结
  5. macOS SIP 权限设置
  6. IOS 集成支付宝和邮件发送
  7. SpringCloud 超详细个人笔记
  8. (230)数据处理或加速方法(加速处理器)
  9. Linux下java获取屏幕分辨率,关于Android如何获取屏幕分辨率的例子
  10. word打开老是配置进度_打开word文档显示配置进度怎么办 Word文档提示配置进度解决办法...
  11. pygame之Surface模块
  12. Win10的双屏显示设置
  13. 实现vue2.0响应式原理
  14. 年会活动必备微信墙3D签到配置教程
  15. 单片机控制秒表C语言程序,89C51单片机秒表的设计(全文完整版)
  16. 如何写批处理文件(.bat)
  17. R数据分析:跟随top期刊手把手教你做一个临床预测模型
  18. 有什么软件可以测试面膜的好坏,检验面膜好坏的小妙招
  19. 计算机控制原理中雷达天线,什么是相控阵雷达_相控阵雷达原理_相控阵雷达原理图...
  20. LabVIEW数据采集系统-队列

热门文章

  1. Java简单输入输出
  2. 【Linux基础】Linux的5种IO模型详解
  3. 网络层网络层服务及其 IP 地址
  4. mysql远程连接权限grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘123456‘ with grant option语句报错
  5. IO多路复用之epoll
  6. go build编译不同环境
  7. ZooKeeper集群与Leader选举
  8. POJ1204 Word Puzzles
  9. [BZOJ1626][Usaco2007 Dec]Building Roads 修建道路
  10. Bootstrap中水平排列的表单form-inline