智慧交通day04-特定目标车辆追踪02:Siamese网络+单样本学习

简介: Siamese network就是“连体的神经网络”,神经网络的“连体”是通过共享权值来实现的,如下图所示。共享权值意味着两边的网络权重矩阵一模一样,甚至可以是同一个网络。

1.Siamese网络


Siamese network就是“连体的神经网络”,神经网络的“连体”是通过共享权值来实现的,如下图所示。共享权值意味着两边的网络权重矩阵一模一样,甚至可以是同一个网络。


873c5c9da2a94b9c9236bc80293c508b.png


如果左右两边不共享权值,而是两个不同的神经网络,叫伪孪生网络(pseudo-siamese network,伪孪生神经网络),对于pseudo-siamese network,两边可以是不同的神经网络(如一个是lstm,一个是cnn),也可以是相同类型的神经网络。


3304ce1e711a44e1b49745492dcef4c8.png


1.1 原理


Siamese网络衡量两个输入的相似程度,输出是一个[0,1]的浮点数,表示二者的相似程度。孪生神经网络有两个输入(Input1 and Input2),将两个输入feed进入两个神经网络(Network1 and Network2),这两个神经网络分别将输入映射到新的空间,形成输入在新的空间中的表示。通过Loss的计算,评价两个输入的相似度。


传统的siamese network使用Contrastive Loss(对比损失函数),如下所示:


46b41d31059a46be868de18b4ec2320c.png


  • 其中Dw被定义为姐妹孪生网络的输出之间的欧氏距离。Dw欧式距离公式如下:


f518d2a78aad44d7973493555bf27ca8.png


也可以是其他的距离度量方法,比如Cosine距离主要用于词汇级别的语义相似度度量。


  • 其中Gw是其中一个子网络的输出。X1和X2是输入数据对。


  • Y值为1或0。如果模型预测输入是相似的,那么Y的值为0,否则Y为1。


  • max是表示0和m-Dw之间较大值的函数。


  • m是大于0的边际价值(margin value),边际价值表示超出该边际价值的不同不会造成损失,因为希望基于实际不相似对网络进行优化。


1.2 用途


孪生神经网络用于处理两个输入“比较类似"的情况。


伪孪生神经网络适用于处理两个输入"有一定差别”的情况。


比如,我们要计算两个句子或者词汇的语义相似度,使用siamese network比较适合;如果验证标题与正文的描述是否一致(标题和正文长度差别很大),或者文字是否描述了一幅图片(一个是图片,一个是文字),就应该使用pseudo-siamese network。也就是说,要根据具体的应用,判断应该使用哪一种结构,哪一种Loss。


  • 词汇的语义相似度分析,QA中question和answer的匹配,签名/人脸验证。
  • 手写体识别也可以用siamese network。
  • 还有kaggle上Quora的question pair的比赛,即判断两个提问是不是同一问题。
  • 在图像上,基于Siamese网络的视觉跟踪算法也已经成为热点。
  • 单样本学习


2.单样本学习


2.1 原理


传统的神经网络试图学习某一个类别的图像的表达,而One-Shot Learning 试图学习不同图像(可以同一类别或者不同类别) 的区别。


给定图片A和图片B, 将A转换为一个表达(embedding vector) p, 将B转换为 一个表达(embedding vector) q


• 如果 A 和 B 属于同一个类别, 那么我们希望 p 和 q 是相似的


1dcfbd8b9bcf4efda26a4d8d028edcb7.png


• 如果 A 和 B 不属于同一个类别, 那么我们希望 p 和 q 是不相似的


dde7479732e14860be246c2d4ca53c42.png


• 相似度的度量, 欧几里得距离:


7a398d71fa49462d9a63271a925a6feb.png


2.2 意义


1.减少训练数据


• 深度学习需要大量的数据, MNIST 为了 10 个类别的区分, 需要 60,000 张训练图像, 平均一个类别需要6000 张训练图像


• One-Shot 试图将一个类别的训练图像减少, 极端情况时减小到一张图片


2.在新类别的数据出现时, 无需重新训练


• 传统的深度神经网络无法处理没有出现在训练集中的类别


• 以员工刷脸打卡为例, 使用传统深度神经网络, 每一个新员工入职, 都是一个新的 类别, 需要重新训练深度神经网络


• 如果每天都有新员工入职, 每天都要重新训练网络, 成本非常高


• One-Shot learning 可以无需重新训练即可应用于新的类别的数据

目录
相关文章
|
4天前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
12 0
|
4天前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
12 0
|
6天前
计算机网络学习记录 物理层 Day2
计算机网络学习记录 物理层 Day2
8 3
|
6天前
计算机网络学习记录 数据链路层 Day3 (上)(2)
计算机网络学习记录 数据链路层 Day3 (上)(2)
10 2
|
6天前
计算机网络学习记录 数据链路层 Day3 (上)(1)
计算机网络学习记录 数据链路层 Day3 (上)(1)
9 2
|
6天前
|
网络协议 Apache 网络架构
计算机网络学习记录 网络的大概认识 Day1(下)
计算机网络学习记录 网络的大概认识 Day1(下)
7 2
|
6天前
|
网络协议
计算机网络学习记录 运输层 Day5(2)
计算机网络学习记录 运输层 Day5(2)
10 1
|
6天前
|
存储 数据处理 网络架构
计算机网络学习记录 网络的大概认识 Day1(上)
计算机网络学习记录 网络的大概认识 Day1(上)
7 1
|
5天前
|
并行计算 PyTorch 程序员
老程序员分享:Pytorch入门之Siamese网络
老程序员分享:Pytorch入门之Siamese网络
|
5天前
|
运维 网络协议 Linux
Linux与Windows下追踪网络路由:traceroute、tracepath与tracert命令详解
Linux与Windows下追踪网络路由:traceroute、tracepath与tracert命令详解
12 0

热门文章

最新文章