文章目录
1. 损失函数
Contrastive Loss [1]:
来源:Yann LeCun论文:Dimensionality Reduction by Learning an Invariant Mapping
目的:增大分类器的类间差异
Triplet Loss [2]:
来源: FaceNet: A Unified Embedding for Face Recognition and Clustering
目的:对Contrastive Loss的改进
Center Loss[3]:
来源:A Discriminative Feature Learning Approach for Deep Face Recognition
目的:解决三元组数据激增导致的网络收敛缓慢
2. 问题引入:
假设我们有2张人脸图片,需要判断这两张人脸图片是不是对应于同一个人,一般情况下如何解决?
一种简单直接的思路就是提取图片的特征,然后对比两个特征向量的相似度。但这种简单做法存在一个明显问题,就是CNN提取的特征“类间”区分性真的有那么好吗?
用SoftMas损失函数训练出的分类模型在Minst测试集上就表现出“类间”区分边缘不大的问题,使得遭受对抗样本攻击的时候很容易分类失败。况且人脸识别需要考虑到样本的类别以及数量都非常多,这无疑使得直接用特征向量来对比更加的困难。
3. Contrastive Loss:对比损失
3.1 本质
原本主要用于降维,即本来相似的样本经过降维(特征提取)后,两个样本仍旧相似;而原本不想死的样本,经过降维后,两个样本人就不想死。
针对上面问题,提出了孪生网络,结构如下:
3.2 定义
Contrastive Loss 可以有效的处理孪生网络中的成对数据关系。
● W是网络权重,X是样本,Y是成对标签。
● 如果X1与X2这对样本属于同一类则Y=0,否则Y=1。
● Dw是X1与X2在潜变量空间的欧几里得距离。
● 当Y=0,调整参数最小化X1与X2之间的距离
● 当Y=1,当X1与X2间距大于m,则不做优化。当X1与X2间距大于m,则增大两者距离到m。
其实有些像Modified Huber Loss(结合了MSE与Hinge Loss)
下图展示了损失函数L和样本特征的欧氏距离的关系,红线表示相似样本的损失值,而蓝色则是不相似样本的损失值。
梯度更新:
使用随机梯度下降来更新w,以得到较小loss,更好表达成对样本的匹配程度。计算loss梯度的公式如下:
- Y=0, 两个样本相似时,梯度为
- Y=1, 两个样本不相似时,梯度为
3.3 含义
可解释为:弹簧在收缩到一定程度的时候因为受到斥力的原因会恢复到原始长度。
弹簧模型公式:F=
- a 相似是吸引力,蓝点与只吸引弹簧连接到相似的点
- b 与相似对关联的损失函数及梯度
- c 不相似是弹射力,蓝点仅与半径为m的圆内的非相似点用m-repulse-only弹簧连接
- d 与非相似对关联的损失函数及梯度
- e 一个点被不同方向的其他点拉动,形成平衡的情况
4. Triplet Loss:三元组损失
4.1本质
能够更好地对细节进行建模,相当于加入了两个输入差异性差异的度量,学习到输入的更好表示。
4.2 定义
- 最小化 锚点 和具有相同身份的正样本之间的距离
- 最小化 锚点 和 具有不同身份的负样本之间的距离
4.3 目标
- 相同标签的特征 在空间位置上尽量靠近
- 不同标签的特征 在哦空间位置上尽量远离
- 为了不让样本的特征聚合到一个非常小的空间中,要求同一类:2正例+1个负例,且负例应比正例的距离>=margin.
4.4 公式
其中, α \alpha α就是 m a r g i n margin margin, T T T就是样本数为 N N