triplet loss 原理以及梯度推导
2017-02-25 12:16
190 查看
【前言】
最近,learning to rank 的思想逐渐被应用到很多领域,比如google用来做人脸识别(faceNet),微软Jingdong Wang 用来做 person-reid 等等。learning to rank中其中重要的一个步骤就是找到一个好的similarity function,而triplet loss是用的非常广泛的一种。
【理解triplet】
如上图所示,triplet是一个三元组,这个三元组是这样构成的:从训练数据集中随机选一个样本,该样本称为Anchor,然后再随机选取一个和Anchor (记为x_a)属于同一类的样本和不同类的样本,这两个样本对应的称为Positive (记为x_p)和Negative (记为x_n),由此构成一个(Anchor,Positive,Negative)三元组。
【理解triplet loss】
有了上面的triplet的概念, triplet loss就好理解了。针对三元组中的每个元素(样本),训练一个参数共享或者不共享的网络,得到三个元素的特征表达,分别记为:
。triplet loss的目的就是通过学习,让x_a和x_p特征表达之间的距离尽可能小,而x_a和x_n的特征表达之间的距离尽可能大,并且要让x_a与x_n之间的距离和x_a与x_p之间的距离之间有一个最小的间隔
。公式化的表示就是:
对应的目标函数也就很清楚了:
这里距离用欧式距离度量,+表示[]内的值大于零的时候,取该值为损失,小于零的时候,损失为零。
由目标函数可以看出:
当x_a与x_n之间的距离 < x_a与x_p之间的距离加
时,[]内的值大于零,就会产生损失。
当x_a与x_n之间的距离 >= x_a与x_p之间的距离加
时,损失为零。
【triplet loss 梯度推导】
上述目标函数记为L。则当第i个triplet损失大于零的时候,仅就上述公式而言,有:
【算法实现时候的提示】
可以看到,对x_p和x_n特征表达的梯度刚好利用了求损失时候的中间结果,给的启示就是,如果在CNN中实现 triplet loss layer, 如果能够在前向传播中存储着两个中间结果,反向传播的时候就能避免重复计算。这仅仅是算法实现时候的一个Trick。
下一节给出caffe中实现triplet loss的方法和代码。
最近,learning to rank 的思想逐渐被应用到很多领域,比如google用来做人脸识别(faceNet),微软Jingdong Wang 用来做 person-reid 等等。learning to rank中其中重要的一个步骤就是找到一个好的similarity function,而triplet loss是用的非常广泛的一种。
【理解triplet】
如上图所示,triplet是一个三元组,这个三元组是这样构成的:从训练数据集中随机选一个样本,该样本称为Anchor,然后再随机选取一个和Anchor (记为x_a)属于同一类的样本和不同类的样本,这两个样本对应的称为Positive (记为x_p)和Negative (记为x_n),由此构成一个(Anchor,Positive,Negative)三元组。
【理解triplet loss】
有了上面的triplet的概念, triplet loss就好理解了。针对三元组中的每个元素(样本),训练一个参数共享或者不共享的网络,得到三个元素的特征表达,分别记为:
。triplet loss的目的就是通过学习,让x_a和x_p特征表达之间的距离尽可能小,而x_a和x_n的特征表达之间的距离尽可能大,并且要让x_a与x_n之间的距离和x_a与x_p之间的距离之间有一个最小的间隔
。公式化的表示就是:
对应的目标函数也就很清楚了:
这里距离用欧式距离度量,+表示[]内的值大于零的时候,取该值为损失,小于零的时候,损失为零。
由目标函数可以看出:
当x_a与x_n之间的距离 < x_a与x_p之间的距离加
时,[]内的值大于零,就会产生损失。
当x_a与x_n之间的距离 >= x_a与x_p之间的距离加
时,损失为零。
【triplet loss 梯度推导】
上述目标函数记为L。则当第i个triplet损失大于零的时候,仅就上述公式而言,有:
【算法实现时候的提示】
可以看到,对x_p和x_n特征表达的梯度刚好利用了求损失时候的中间结果,给的启示就是,如果在CNN中实现 triplet loss layer, 如果能够在前向传播中存储着两个中间结果,反向传播的时候就能避免重复计算。这仅仅是算法实现时候的一个Trick。
下一节给出caffe中实现triplet loss的方法和代码。
相关文章推荐
- triplet loss 原理以及梯度推导
- triplet loss 原理以及梯度推导
- triplet loss 原理以及梯度推导
- triplet loss 原理以及梯度推导
- triplet loss原理推导及其代码实现
- Caffe中增加新的layer以及Caffe中triplet loss layer的实现
- Logistic原理以及推导
- 如何在caffe中增加layer以及caffe中triplet loss layer的实现
- 主成分分析(PCA降维)与最小二乘-原理以及详细推导
- BP神经网络原理简单介绍以及公式推导(矩阵形式和分量形式)
- Triplet Loss及其梯度
- 如何在caffe中增加layer以及caffe中triplet loss layer的实现
- 怎样在caffe中添加layer以及caffe中triplet loss layer的实现
- 深度网络中softmax_loss、Smooth L1 loss计算以及反向传播推导
- 如何在caffe中增加layer以及caffe中triplet loss layer的实现
- softmax 损失函数以及梯度推导计算
- 如何在caffe中增加layer以及caffe中triplet loss layer的实现
- svm的loss和梯度推导及代码
- SVM原理---公式推导以及核函数
- 某壳对.Net程序加密的原理及解密探讨五(元数据还原以及IL解码的改进)