论文阅读笔记:孪生神经网络(Siamese Network)
Siamese Network
原文:《Learning a Similarity Metric Discriminatively, with Application to Face
Verification》
1、四个问题
- 要解决什么问题?
- 用于解决类别很多(或者说不确定),然而训练样本的类别数较少的分类任务(比如人脸识别、人脸认证)
- 通常的分类任务中,类别数目固定,且每类下的样本数也较多(比如ImageNet)
- 用了什么方法解决?
- 提出了一种思路:将输入映射为一个特征向量,使用两个向量之间的“距离”(L1 Norm)来表示输入之间的差异(图像语义上的差距)。
- 基于上述思路设计了Siamese Network。每次需要输入两个样本作为一个样本对计算损失函数。
- 常用的softmax只需要输入一个样本。
- FaceNet中的Triplet Loss需要输入三个样本。
- 提出了Contrastive Loss用于训练。
- 效果如何?
- 文中进行了一个衡量两张人脸的相似度的实验,使用了多个数据库,较复杂。
- siamese network现在依然有很多地方使用,可以取得state-of-the-art的效果。
- 还存在什么问题?
- contrastive loss的训练样本的选择需要注意,论文中都是尽量保证了50%的正样本对和50%的负样本对。
2、论文概述
2.1、问题的提出与解决方案
- 分类问题:
- 第一类,分类数量较少,每一类的数据量较多,比如ImageNet、VOC等。这种分类问题可以使用神经网络或者SVM解决,只要事先知道了所有的类。
- 第二类,分类数量较多(或者说无法确认具体数量),每一类的数据量较少,比如人脸识别、人脸验证任务。
- 文中提出的解决方案:
- learn a similar metric from data。核心思想是,寻找一个映射函数,能够将输入图像转换到一个特征空间,每幅图像对应一个特征向量,通过一些简单的“距离度量”(比如欧式距离)来表示向量之间的差异,最后通过这个距离来拟合输入图像的相似度差异(语义差异)。
2.2、网络结构概述
- 数学符号描述
- 输入数据:、、。其中和属于同一类,和属于不同类。
- 模型:。其中表示模型参数,的作用就是将输入数据转换为一组特征向量。
- 距离(文中称其为energy function):。用于衡量两个输入向量转换为向量之后,两个向量之间的距离。
- 如果采用L1距离,则公式为:。
2.3、Contrastive Loss损失函数
- 表示、是否属于同一类。为同类,则为0;不同类,则为1。
- 表示输入的总样本数,表示当前样本的下标。
- 表示两个样本为同类时的损失函数,表示两个样本未不同类时的损失函数。
- 使用Contrastive Loss的任务主要是设计合适的和损失函数,当为同类时,使得尽可能小;当不同类时,使得尽可能大。文中给出的函数如下图,现在也不常用了,推导步骤略。
- 查找资料看到,caffe中的contrastive loss定义如下:(参考:https://blog.csdn.net/autocyz/article/details/53149760)