码迷,mamicode.com
首页 > 其他好文 > 详细

triple loss 原理以及梯度推导

时间:2015-07-07 14:52:35      阅读:1567      评论:0      收藏:0      [点我收藏+]

标签:triple   loss   损失函数   梯度   layer   

【理解triple】

技术分享

如上图所示,triple是一个三元组,这个三元组是这样构成的:从训练数据集中随机选一个样本,该样本称为Anchor,然后再随机选取一个和Anchor (记为x_a)属于同一类的样本和不同类的样本,这两个样本对应的称为Positive (记为x_p)和Negative (记为x_n),由此构成一个(Anchor,Positive,Negative)三元组。

【理解triple loss】
有了上面的triple的概念, triple loss就好理解了。针对三元组中的每个元素(样本),训练一个参数共享或者不共享的网络,得到三个元素的特征表达,分别记为:技术分享 。triple 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之间的距离加技术分享时,损失为零。

【triple loss 梯度推导】
上述目标函数记为L。则当第i个triple损失大于零的时候,仅就上述公式而言,有:
技术分享

【算法实现时候的提示】
可以看到,对x_p和x_n特征表达的梯度刚好利用了求损失时候的中间结果,给的启示就是,如果在CNN中实现 triple loss layer, 如果能够在前向传播中存储着两个中间结果,反向传播的时候就能避免重复计算。这仅仅是算法实现时候的一个Trick。

下一节给出caffe中实现triple loss的方法和代码。

版权声明:本文为博主原创文章,未经博主允许不得转载。

triple loss 原理以及梯度推导

标签:triple   loss   损失函数   梯度   layer   

原文地址:http://blog.csdn.net/tangwei2014/article/details/46788025

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!