1. 背景
1.1 分类问题
场景:identification & verification
- 识别:已知类别个数,判断输入样本所属类。Classifier- or Matching-based
- 验证:给定一个类,判断当前的输入样本是否是同一类。Matching 高维特征向量的距离度量
Classifier:特征向量到类标的映射
Matching:特征向量1-2,距离的映射
类别个数、样本个数、类别个数是否是不断增长的
- 训练样本的多少 过拟合
- 类别的多少 分类难度
第一类,分类数量较少,每一类的数据量较多,比如ImageNet、VOC等。这种分类问题可以使用神经网络或者SVM解决,只要事先知道了所有的类。
第二类,分类数量较多(或者说无法确认具体数量),每一类的数据量较少,比如人脸识别、人脸验证任务。
来源:https://www.jianshu.com/p/24c753ba5d82
1.2 相对
- 降低task难度
给定两个样本,判断是否相同,或者相互差别多少,这比给定一个样本,直接判断其属性更为简单。后者需要学习高层知识,前者往往只需要学习底层特征和距离度量。
1.3 向量距离
- 欧氏距离
- 曼哈顿距离
- 切比雪夫距离
- 闵可夫斯基距离
- 标准化欧氏距离
- 马氏距离
- 夹角余弦 (仅仅考虑向量夹角,不考虑向量大小)
- 汉明距离
- 杰卡德距离 & 杰卡德相似系数
- 相关系数 & 相关距离
- 信息熵,交叉熵
loss的选择,即采用何种距离来度量loss(output vs target)。可以看做结构超参,人工根据task和数据本身的特点进行选择,当前的学习架构还不能自动学习使用哪种loss最优。
References
https://blog.csdn.net/weixin_40639095/article/details/97264166
https://blog.csdn.net/qq_26091271/article/details/52528625
https://blog.csdn.net/weixin_41526905/article/details/80341746
https://blog.csdn.net/ctwy291314/article/details/83543869
https://zhuanlan.zhihu.com/p/31921944
Re-ID
问题:
- 生成特征向量时,dropout的同步
2. Siamese Network
二分类:
- 两篇文章、问题是否相同;
- 目标跟踪,目标区域与搜索区域的相似度;
- biometrics verification / matching 人脸、指纹、掌纹、手写字体 etc。
https://www.jianshu.com/p/24c753ba5d82
https://zhuanlan.zhihu.com/p/35040994
Related work:
- Signature Verification using a "Siamese" Time Delay Neural Network. [pdf]
- Rectified Linear Units Improve Restricted Boltzmann Machines, ICML 2010 [pdf]
- Fully-Convolutional Siamese Networks for Object Tracking, ECCV 2016 Workshops [pdf]
contrastive loss
使用场景
- siamese network:两个待比较样本为同一类型
- pseudo-siamese network:两个待比较样本类型不同
孪生神经网络和伪孪生神经网络分别适用于什么场景呢?
先上结论:孪生神经网络用于处理两个输入"比较类似"的情况。伪孪生神经网络适用于处理两个输入"有一定差别"的情况。比如,我们要计算两个句子或者词汇的语义相似度,使用siamese network比较适合;如果验证标题与正文的描述是否一致(标题和正文长度差别很大),或者文字是否描述了一幅图片(一个是图片,一个是文字),就应该使用pseudo-siamese network。也就是说,要根据具体的应用,判断应该使用哪一种结构,哪一种Loss
来源:https://zhuanlan.zhihu.com/p/35040994
实际使用
- 样本特点分析
- 如何选择超参数
- 训练稳不稳定