Siamese Network(孪生网络)

简单来说,孪生网络就是共享参数的两个神经网络

在孪生网络中,我们把一张图片X1X_1X1​作为输入,得到该图片的编码GW(X1)G_W(X_1)GW​(X1​)。然后,我们在不对网络参数进行任何更新的情况下,输入另一张图片X2X_2X2​,并得到改图片的编码GW(X2)G_W(X_2)GW​(X2​)。由于相似的图片应该具有相似的特征(编码),利用这一点,我们就可以比较并判断两张图片的相似性

孪生网络的损失函数

传统的Siamese Network使用Contrastive Loss(对比损失函数)
L=(1−Y)12(DW)2+(Y)12{max(0,m−DW)}2\mathcal{L} = (1-Y)\frac{1}{2}(D_W)^2+(Y)\frac{1}{2}\{max(0, m-D_W)\}^2 L=(1−Y)21​(DW​)2+(Y)21​{max(0,m−DW​)}2
其中DWD_WDW​被定义为孪生网络两个输入之间的欧氏距离,即
DW={GW(X1)−GW(X2)}2D_W = \sqrt{\{G_W(X_1)-G_W(X_2)\}^2} DW​={GW​(X1​)−GW​(X2​)}2​

  • YYY值为0或1,如果X1,X2X_1,X_2X1​,X2​这对样本属于同一类,则Y=0Y=0Y=0,反之Y=1Y=1Y=1
  • mmm是边际价值(margin value),即当Y=1Y=1Y=1,如果X1X_1X1​与X2X_2X2​之间距离大于mmm,则不做优化(省时省力);如果X1X_1X1​与X2X_2X2​之间的距离小于mmm,则调整参数使其距离增大到mmm
Contrastive Loss代码
import torch
import numpy as np
import torch.nn.functional as Fclass ContrastiveLoss(torch.nn.Module):"Contrastive loss function"def __init__(self, m=2.0):super(ContrastiveLoss, self).__init__()self.m = mdef forward(self, output1, output2, label):d_w = F.pairwise_distance(output1, output2)contrastive_loss = torch.mean((1-label) * 0.5 * torch.pow(d_w, 2) +(label) * 0.5 * torch.pow(torch.clamp(self.m - d_w, min=0.0), 2))return contrastive_loss

其中,F.pairwise_distance(x1, x2, p=2)函数公式如下
(∑i=1n(∣x1−x2∣p))1px1,x2∈Rb×n(\sum_{i=1}^n(|x_1-x_2|^p))^{\frac{1}{p}}\\ x_1,x_2 \in \mathbb{R}^{b\times n} (i=1∑n​(∣x1​−x2​∣p))p1​x1​,x2​∈Rb×n

pairwise_distance(x1, x2, p) Computes the batchwise pairwise distance between vectors x1x_1x1​, x2x_2x2​ using the p-norm

孪生网络的用途

简单来说,孪生网络的直接用途就是衡量两个输入的差异程度(或者说相似程度)。将两个输入分别送入两个神经网络,得到其在新空间的representation,然后通过Loss Function来计算它们的差异程度(或相似程度)

  • 词汇语义相似度分析,QA中question和answer的匹配
  • 手写体识别也可以用Siamese Network
  • Kaggle上Quora的Question Pair比赛,即判断两个提问是否为同一个问题
Pseudo-Siamese Network(伪孪生网络)

对于伪孪生网络来说,两边可以是不同的神经网络(如一个是lstm,一个是cnn),并且如果是相同的神经网络,是不共享参数

孪生网络和伪孪生网络分别适用的场景
  • 孪生网络适用于处理两个输入比较类似的情况
  • 伪孪生网络适用于处理两个输入有一定差别的情况

例如,计算两个句子或者词汇的语义相似度,使用Siamese Network比较合适;验证标题与正文的描述是否一致(标题和正文长度差别很大),或者文字是否描述了一幅图片(一个是图片,一个是文字)就应该使用Pseudo-Siamese Network

Triplet Network(三胞胎网络)

如果说Siamese Network是双胞胎,那Triplet Network就是三胞胎。它的输入是三个:一个正例+两个负例,或一个负例+两个正例。训练的目标仍然是让相同类别间的距离尽可能小,不同类别间的距离尽可能大。Triplet Network在CIFAR,MNIST数据集上效果均超过了Siamese Network

损失函数定义如下:
L=max(d(a,p)−d(a,n)+margin,0)\mathcal{L}=max(d(a,p)-d(a,n)+margin, 0) L=max(d(a,p)−d(a,n)+margin,0)

  • aaa表示anchor图像
  • ppp表示positive图像
  • nnn表示negative图像

我们希望aaa与ppp的距离应该小于aaa与nnn的距离。marginmarginmargin是个超参数,它表示d(a,p)d(a,p)d(a,p)与d(a,n)d(a,n)d(a,n)之间应该相差多少,例如,假设margin=0.2margin=0.2margin=0.2,并且d(a,p)=0.5d(a,p)=0.5d(a,p)=0.5,那么d(a,n)d(a,n)d(a,n)应该大于等于0.70.70.7

Reference

  • 多种类型的神经网络(孪生网络)
  • Siamese network 孪生神经网络–一个简单神奇的结构
  • Siamese Network & Triplet Loss
  • A friendly introduction to Siamese Networks
  • Contrastive Loss

Siamese Network Triplet NetWork相关推荐

  1. 基于caffe的度量学习实现(Siamese network Triplet network)

    基于caffe的度量学习实现,主要是孪生网络和三元组网络(Siamese network & Triplet network)实现图像的分类和度量. 包含数据集制作脚本,训练测试脚本和pyth ...

  2. 论文笔记:Triplet Network

    原论文:DEEP METRIC LEARNING USING TRIPLET NETWORK Triplet Network 1.四个问题 要解决什么问题? 实质上,Triplet Network是S ...

  3. 迁移学习笔记3: TCA, Finetune, 与Triplet Network(元学习)

    主要想讲的内容有: TCA, Finetune, Triplet Network 迁移学习与元学习有哪几类方法 想讲的目标(但不一定完全能写完, 下一次笔记补充): 分别属于什么方法, 处于什么位置, ...

  4. 论文笔记 Medical Entity Linking using Triplet Network

    一.动机 实体链接(Entity Linking)或者标准化(Normalization)的目标是将文本中发现的mention链接到知识库中的标准实体.在医疗领域,疾病词的实体链接难度在于缩写.同义词 ...

  5. High Performance Visual Tracking with Siamese Region Proposal Network全文翻译

    摘要   近年来,视觉对象跟踪一直是一个基本主题,许多基于深度学习的跟踪器在多个基准测试中取得了最先进的性能.然而,这些跟踪器中的大多数很难以实时速度获得最佳性能.在本文中,我们提出了 Siamese ...

  6. 2016 ECCV-Gated Siamese Convolutional Neural Network Architecture for Human Re-ID

    论文地址 第一篇论文笔记,希望大家能多提些意见来帮助我提高论文笔记模型的性能.相关方向的童鞋可以加qq:396543018一起交流~ Motivation 现在的Siamese CNN对每个照片仅在f ...

  7. 深度学习笔记-----多输入网络 (Siamese网络,Triplet网络)

    目录 1,什么时候需要多个输入 2,常见的多输入网络 2.1 Siamese网络(孪生网络) 2.1 Triplet网络 1,什么时候需要多个输入 深度学习网络一般是输入都是一个,或者是一段视频切片, ...

  8. Network In Network

    ICLR 2014 本文主要是对 CNN网络中的 卷积层中使用 的 linear filter 改进的.很显然 有 线性就有非线性,非线性的表达能力要更加强大.这里使用一个 小网络 MLP(多层感知器 ...

  9. 论文笔记 《Maxout Networks》 《Network In Network》

    原文出处:http://zhangliliang.com/2014/09/22/paper-note-maxout-and-nin/ 论文笔记 <Maxout Networks> & ...

最新文章

  1. Silverlight实用窍门系列:40.Silverlight中捕捉视频,截图保存到本地
  2. 程序员请不要问“在吗?”
  3. 查看eclipse安装了哪些插件
  4. 程序员基本功05表达式中的陷阱
  5. java中reject方法作用_Java BindingResult.rejectValue方法代碼示例
  6. 获取referer中的请求参数_Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法...
  7. jQuery框架学习第六天:jQuery中的Ajax应用
  8. Twemproxy测试Redis分片主从架构
  9. Android 系统(186)---最易懂的Android屏幕适配解决方案--总结版
  10. java编辑遗忘曲线代码,java8的新特性 - 天使broken的个人空间 - OSCHINA - 中文开源技术交流社区...
  11. 备战数学建模16-相关性分析SPSSMATLAB
  12. SVN更新(update)文件时,报skipped, remains conficted时的解决办法
  13. 认真总结 HTTP常见面试题(持续更新)
  14. 学会Python有哪些可以做的兼职?所有途径全在这里了...
  15. Linux 命令小记
  16. 最新版谷歌浏览器的锚点小问题 用jquery做出ctrl+f的搜索效果
  17. fcpx插件:童年印象回忆复古视觉特效和转场Stupid Raisins Slide Pop
  18. 在苹果MacOS Majave10.14.6系统中安装SRIM 2008软件
  19. 图形学进阶——移动端TB(D)R架构基础
  20. 掉队的魅族还能和小米平起平坐吗?| 畅言

热门文章

  1. 隐藏office web app打印和在word中打开等功能
  2. Lasso回归和岭回归
  3. 电商实训二:电子支付实训
  4. 智立方 想哪说哪62:命由己造_智立方的杨石头_新浪博客
  5. 新加坡国大计算机工程专业简绍,新加坡国立大学计算机工程专业毕业生亲临介绍-新加坡教育网...
  6. mysql函数名称顿号_双曲函数符号的读法
  7. javascript实现在线拼音输入法
  8. thinkpad x240s ubuntu下wifi断网bug解决方案
  9. Java中Jaxb的使用
  10. 面向对象编程是计算机科学的最大错误