Siamese Network 孪生网络基础学习笔记

Siamese Network 孪生网络基础学习笔记


本笔记主要是对相关文章的摘录梳理,作为小白学习目标跟踪的学习笔记。

孪生网络在目标跟踪中有很重要的应用,故特作此整理,希望为后续的学习打好基础。

整理的比较仓促,后续会修改完善。


参考文章链接:

  1. Siamese network 孪生神经网络:一个简单神奇的结构
  2. Siamese network总结
  3. [视觉跟踪] Siamese Network方法概述:从SiamFC到SiamRPN系列
  4. 卷积神经网络学习笔记——Siamese networks(孪生神经网络)

一. Siamese Network 名字的由来

Siamese在英语中是“孪生”、“连体”的意思。具体由来参见Siamese network 孪生神经网络:一个简单神奇的结构

二. 孪生网络的主要特点

  1. Siamese 网络采用两个不同的输入,通过两个具有相同架构、参数和权重的相似子网络。

  2. 这两个子网互为镜像,就像连体双胞胎一样。 因此,对任何子网架构、参数或权重的任何更改也适用于其他子网。

  3. 两个子网络输出一个编码来计算两个输入之间的差异。

  4. Siamese 网络的目标是使用相似度分数对两个输入是相同还是不同进行分类。可以使用二元交叉熵、对比函数或三元组损失来计算相似度分数,这些都是用于一般距离度量学习方法的技术。

  5. Siamese 网络是一种one-shot分类器,它使用判别特征从未知分布中概括不熟悉的类别。

三. Siamese Network的模型架构

  1. 将输入pair送入编码器,映射到新的空间,得到编码后的向量化表示。需要注意的是,在Siamese Network中,输入pair是共用编码器参数的,不论在训练还是在测试过程中,编码器只有一套,所有输入共用。

  2. 向量特征组合和交叉。这一步的目的是为了让模型能够学习输入pair的“匹配”特征,得到交叉后的特征向量;

  3. 将上一步特征向量送入特征映射层,并设计损失函数来评价两个输入的相似度,使得模型能够完成指定任务。

孪生网络的核心特征是两个子网络的权重是共享的。因为这种共享,两个输入相当于采用了相同的编码机制映射到相同的向量空间。进而我们就能通过对embedding后得到的的向量进行处理,计算两者的相似度。

Siamese Network 孪生网络基础学习笔记_第1张图片

四. 孪生神经网络的用途是什么?

孪生网络主要用来衡量两个输入的相似程度。该模型能够处理但不局限于“匹配”问题。
Siamese Network 孪生网络基础学习笔记_第2张图片

五. 孪生神经网络和伪孪生神经网络

Pseudo Siamese Network 伪孪生网络

如果两个子体网络不共享权重,即两个子体是不同的神经网络,则称为Pseudo Siamese Network,伪孪生神经网络。伪连体孪生经网络的两个子体,可以是结构相同但权重不同,也可以是完全不同的结构,如一个是CNN,另一个是RNN。CNN和RNN的这种连体网络,可以用来比对不同数据类型的信息所表达的内容的相似性,如一个图片和一段文字。

Siamese Network 孪生网络基础学习笔记_第3张图片

孪生神经网络和伪孪生神经网络分别适用的场景

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

六. Siamese network 的 loss function

  1. Siamese 网络使用相似度分数来预测两个输入是相似还是不同,使用度量学习方法,该方法找到其输入之间的相对距离。

  2. 可以使用二元交叉熵、对比函数或三重损失计算相似度分数。

  3. Siamese 网络执行二元分类,将输入分类为相似或不相似;因此,默认使用二元交叉熵损失函数。

常用损失

1. contrastive loss 对比损失函数

Siamese Network 孪生网络基础学习笔记_第4张图片

Siamese Network 孪生网络基础学习笔记_第5张图片

  1. 对比损失函数通过对比两个输入来区分相似和不同的图像。当你在训练时不了解所有类别并且训练数据有限时,它会有所帮助。它创建了一种数据编码,可以在将来有新类时使用。

  2. 对比损失需要一对正负训练数据。 正对包含一个anchor样本和一个正样本,负对包含一个anchor样本和一个负样本。

  3. 对比损失函数的目标是使正对具有较小的距离,对负对具有较大的距离。

2. cosine距离与exp距离

Siamese Network 孪生网络基础学习笔记_第6张图片

3. Triplet loss

在 Triplet loss 中,我们使用数据的三元组而不是二元对。 三元组由anchor、正样本和负样本组成,主要用于面部识别。
Siamese Network 孪生网络基础学习笔记_第7张图片

在 Triplet loss 中,anchor和正样本编码之间的距离被最小化,而anchor和负样本编码之间的距离被最大化。
Siamese Network 孪生网络基础学习笔记_第8张图片

Triplet loss 将 d(a,p) 推到 0 ,并且 d(a,n) 大于 d(a,p)+margin

七. 为什么Siamese神经网络被称为one-shot分类?

  1. one-shot分类模型仅使用每个新类别的单个训练样本即可正确进行预测。

  2. Siamese 网络使用有监督的训练方法来学习通用输入特征,然后根据训练数据对未知的类分布进行预测。

  3. 受过训练的 Siamese 网络使用一次性学习来预测两个输入之间的相似性或不相似性,即使这些新分布中的样本很少。

八. Siamese 网络的优点

  1. Siamese 网络是一种one-shot分类模型,只需一个训练样本即可进行预测。

  2. 对类别不平衡更鲁棒,因为它需要很少的信息。 它可以用于某些类的样本很少的数据集。

  3. Siamese 网络的one-shot学习特性不依赖于特定领域的知识,而是利用了深度学习技术。

九. Siamese 网络的缺点

仅输出相似性分数而不输出概率。(互斥事件的概率总和为 1。而距离不限于小于或等于 1。)

十. Siamese network是双胞胎连体,整一个三胞胎连体行不行?

不好意思,已经有人整过了,叫Triplet network,论文是《Deep metric learning using Triplet network》,输入是三个,一个正例+两个负例,或者一个负例+两个正例,训练的目标是让相同类别间的距离尽可能的小,让不同类别间的距离尽可能的大。Triplet在cifar, mnist的数据集上,效果都是很不错的,超过了siamese network。四胞胎,五胞胎会不会更屌?。。。。。目前还没见过。。。。
Siamese Network 孪生网络基础学习笔记_第9张图片

十一. Siamese network的应用

  1. 签名验证

  2. 面部识别

  3. 比较指纹

  4. 根据临床分级评估疾病严重程度

  5. 工作资料的文本相似度以恢复匹配

  6. 用于配对相似问题的文本相似度

Siamese Network 孪生网络基础学习笔记_第10张图片

你可能感兴趣的:(目标跟踪学习笔记,神经网络,深度学习,人工智能,目标跟踪)