Siamese Network 孪生网络基础学习笔记
本笔记主要是对相关文章的摘录梳理,作为小白学习目标跟踪的学习笔记。
孪生网络在目标跟踪中有很重要的应用,故特作此整理,希望为后续的学习打好基础。
整理的比较仓促,后续会修改完善。
参考文章链接:
- Siamese network 孪生神经网络:一个简单神奇的结构
- Siamese network总结
- [视觉跟踪] Siamese Network方法概述:从SiamFC到SiamRPN系列
- 卷积神经网络学习笔记——Siamese networks(孪生神经网络)
一. Siamese Network 名字的由来
Siamese在英语中是“孪生”、“连体”的意思。具体由来参见Siamese network 孪生神经网络:一个简单神奇的结构
二. 孪生网络的主要特点
-
Siamese 网络采用两个不同的输入,通过两个具有相同架构、参数和权重的相似子网络。 -
这两个子网互为镜像,就像连体双胞胎一样。 因此,对任何子网架构、参数或权重的任何更改也适用于其他子网。 -
两个子网络输出一个编码来计算两个输入之间的差异。 -
Siamese 网络的目标是使用相似度分数对两个输入是相同还是不同进行分类。可以使用二元交叉熵、对比函数或三元组损失来计算相似度分数,这些都是用于一般距离度量学习方法的技术。 -
Siamese 网络是一种one-shot分类器,它使用判别特征从未知分布中概括不熟悉的类别。
三. Siamese Network的模型架构
-
将输入pair送入编码器,映射到新的空间,得到编码后的向量化表示。需要注意的是,在Siamese Network中,输入pair是共用编码器参数的,不论在训练还是在测试过程中,编码器只有一套,所有输入共用。 -
向量特征组合和交叉。这一步的目的是为了让模型能够学习输入pair的“匹配”特征,得到交叉后的特征向量; -
将上一步特征向量送入特征映射层,并设计损失函数来评价两个输入的相似度,使得模型能够完成指定任务。
孪生网络的核心特征是两个子网络的权重是共享的。因为这种共享,两个输入相当于采用了相同的编码机制映射到相同的向量空间。进而我们就能通过对embedding后得到的的向量进行处理,计算两者的相似度。
四. 孪生神经网络的用途是什么?
孪生网络主要用来衡量两个输入的相似程度。该模型能够处理但不局限于“匹配”问题。
五. 孪生神经网络和伪孪生神经网络
Pseudo Siamese Network 伪孪生网络
如果两个子体网络不共享权重,即两个子体是不同的神经网络,则称为Pseudo Siamese Network,伪孪生神经网络。伪连体孪生经网络的两个子体,可以是结构相同但权重不同,也可以是完全不同的结构,如一个是CNN,另一个是RNN。CNN和RNN的这种连体网络,可以用来比对不同数据类型的信息所表达的内容的相似性,如一个图片和一段文字。
孪生神经网络和伪孪生神经网络分别适用的场景
孪生神经网络用于处理两个输入"比较类似"的情况。伪孪生神经网络适用于处理两个输入"有一定差别"的情况。比如,我们要计算两个句子或者词汇的语义相似度,使用siamese network比较适合;如果验证标题与正文的描述是否一致(标题和正文长度差别很大),或者文字是否描述了一幅图片(一个是图片,一个是文字),就应该使用pseudo-siamese network。也就是说,要根据具体的应用,判断应该使用哪一种结构,哪一种Loss。
六. Siamese network 的 loss function
-
Siamese 网络使用相似度分数来预测两个输入是相似还是不同,使用度量学习方法,该方法找到其输入之间的相对距离。 -
可以使用二元交叉熵、对比函数或三重损失计算相似度分数。 -
Siamese 网络执行二元分类,将输入分类为相似或不相似;因此,默认使用二元交叉熵损失函数。
常用损失
1. contrastive loss 对比损失函数
-
对比损失函数通过对比两个输入来区分相似和不同的图像。当你在训练时不了解所有类别并且训练数据有限时,它会有所帮助。它创建了一种数据编码,可以在将来有新类时使用。 -
对比损失需要一对正负训练数据。 正对包含一个anchor样本和一个正样本,负对包含一个anchor样本和一个负样本。 -
对比损失函数的目标是使正对具有较小的距离,对负对具有较大的距离。
2. cosine距离与exp距离
3. Triplet loss
在 Triplet loss 中,我们使用数据的三元组而不是二元对。 三元组由anchor、正样本和负样本组成,主要用于面部识别。
在 Triplet loss 中,anchor和正样本编码之间的距离被最小化,而anchor和负样本编码之间的距离被最大化。
Triplet loss 将 d(a,p) 推到 0 ,并且 d(a,n) 大于 d(a,p)+margin
七. 为什么Siamese神经网络被称为one-shot分类?
-
one-shot分类模型仅使用每个新类别的单个训练样本即可正确进行预测。 -
Siamese 网络使用有监督的训练方法来学习通用输入特征,然后根据训练数据对未知的类分布进行预测。 -
受过训练的 Siamese 网络使用一次性学习来预测两个输入之间的相似性或不相似性,即使这些新分布中的样本很少。
八. Siamese 网络的优点
-
Siamese 网络是一种one-shot分类模型,只需一个训练样本即可进行预测。 -
对类别不平衡更鲁棒,因为它需要很少的信息。 它可以用于某些类的样本很少的数据集。 -
Siamese 网络的one-shot学习特性不依赖于特定领域的知识,而是利用了深度学习技术。
九. Siamese 网络的缺点
仅输出相似性分数而不输出概率。(互斥事件的概率总和为 1。而距离不限于小于或等于 1。)
十. Siamese network是双胞胎连体,整一个三胞胎连体行不行?
不好意思,已经有人整过了,叫Triplet network,论文是《Deep metric learning using Triplet network》,输入是三个,一个正例+两个负例,或者一个负例+两个正例,训练的目标是让相同类别间的距离尽可能的小,让不同类别间的距离尽可能的大。Triplet在cifar, mnist的数据集上,效果都是很不错的,超过了siamese network。四胞胎,五胞胎会不会更屌?。。。。。目前还没见过。。。。
十一. Siamese network的应用
-
签名验证 -
面部识别 -
比较指纹 -
根据临床分级评估疾病严重程度 -
工作资料的文本相似度以恢复匹配 -
用于配对相似问题的文本相似度
|