Siamese Network Triplet NetWork
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))p1x1,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相关推荐
- 基于caffe的度量学习实现(Siamese network Triplet network)
基于caffe的度量学习实现,主要是孪生网络和三元组网络(Siamese network & Triplet network)实现图像的分类和度量. 包含数据集制作脚本,训练测试脚本和pyth ...
- 论文笔记:Triplet Network
原论文:DEEP METRIC LEARNING USING TRIPLET NETWORK Triplet Network 1.四个问题 要解决什么问题? 实质上,Triplet Network是S ...
- 迁移学习笔记3: TCA, Finetune, 与Triplet Network(元学习)
主要想讲的内容有: TCA, Finetune, Triplet Network 迁移学习与元学习有哪几类方法 想讲的目标(但不一定完全能写完, 下一次笔记补充): 分别属于什么方法, 处于什么位置, ...
- 论文笔记 Medical Entity Linking using Triplet Network
一.动机 实体链接(Entity Linking)或者标准化(Normalization)的目标是将文本中发现的mention链接到知识库中的标准实体.在医疗领域,疾病词的实体链接难度在于缩写.同义词 ...
- High Performance Visual Tracking with Siamese Region Proposal Network全文翻译
摘要 近年来,视觉对象跟踪一直是一个基本主题,许多基于深度学习的跟踪器在多个基准测试中取得了最先进的性能.然而,这些跟踪器中的大多数很难以实时速度获得最佳性能.在本文中,我们提出了 Siamese ...
- 2016 ECCV-Gated Siamese Convolutional Neural Network Architecture for Human Re-ID
论文地址 第一篇论文笔记,希望大家能多提些意见来帮助我提高论文笔记模型的性能.相关方向的童鞋可以加qq:396543018一起交流~ Motivation 现在的Siamese CNN对每个照片仅在f ...
- 深度学习笔记-----多输入网络 (Siamese网络,Triplet网络)
目录 1,什么时候需要多个输入 2,常见的多输入网络 2.1 Siamese网络(孪生网络) 2.1 Triplet网络 1,什么时候需要多个输入 深度学习网络一般是输入都是一个,或者是一段视频切片, ...
- Network In Network
ICLR 2014 本文主要是对 CNN网络中的 卷积层中使用 的 linear filter 改进的.很显然 有 线性就有非线性,非线性的表达能力要更加强大.这里使用一个 小网络 MLP(多层感知器 ...
- 论文笔记 《Maxout Networks》 《Network In Network》
原文出处:http://zhangliliang.com/2014/09/22/paper-note-maxout-and-nin/ 论文笔记 <Maxout Networks> & ...
最新文章
- Silverlight实用窍门系列:40.Silverlight中捕捉视频,截图保存到本地
- 程序员请不要问“在吗?”
- 查看eclipse安装了哪些插件
- 程序员基本功05表达式中的陷阱
- java中reject方法作用_Java BindingResult.rejectValue方法代碼示例
- 获取referer中的请求参数_Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法...
- jQuery框架学习第六天:jQuery中的Ajax应用
- Twemproxy测试Redis分片主从架构
- Android 系统(186)---最易懂的Android屏幕适配解决方案--总结版
- java编辑遗忘曲线代码,java8的新特性 - 天使broken的个人空间 - OSCHINA - 中文开源技术交流社区...
- 备战数学建模16-相关性分析SPSSMATLAB
- SVN更新(update)文件时,报skipped, remains conficted时的解决办法
- 认真总结 HTTP常见面试题(持续更新)
- 学会Python有哪些可以做的兼职?所有途径全在这里了...
- Linux 命令小记
- 最新版谷歌浏览器的锚点小问题 用jquery做出ctrl+f的搜索效果
- fcpx插件:童年印象回忆复古视觉特效和转场Stupid Raisins Slide Pop
- 在苹果MacOS Majave10.14.6系统中安装SRIM 2008软件
- 图形学进阶——移动端TB(D)R架构基础
- 掉队的魅族还能和小米平起平坐吗?| 畅言