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

关于softmax、argmax、softargmax

时间:2018-11-09 22:53:59      阅读:388      评论:0      收藏:0      [点我收藏+]

标签:image   title   img   png   beta   exp   无法   .com   向量   

在阅读LIFT:Learned Invariant Feature Transform一文时,文中第1节提到为了保证端到端的可微性,利用softargmax来代替传统的NMS(非极大值抑制)来挑选极值点位置。由于只了解softmax,对于softargmax不甚了解,所以记录下来。

1)softmax技术分享图片

输入为向量,输出为值为0-1之间的向量,和为1。在分类任务中作为概率出现在交叉熵损失函数中。

import numpy as np
data=np.array([0.1, 0.3, 0.6, 2.1 ,0.55])
np.exp(data)/np.sum(np.exp(data))          # softmax

array([ 0.07795756,  0.09521758,  0.12853029,  0.57603278,  0.12226179])

 

2)argmax:为了得到一个向量中最大值所处的位置,我们利用此函数。但是这个函数不可导,所以无法计算其梯度。然而我们可以利用软化的max函数来计算,就是softmax。利用softmax,我们可以得到每个元素正则化后的值。此向量()分布)的

此时最大值所处的坐标期望即为:技术分享图片

np.sum(np.exp(data)/np.sum(np.exp(data)) * np.array([0,1,2,3,4]))    # E = p*index

2.5694236670240085。而最大之所在的位置应该是3。

 

3)softargmax:从上面看到位置计算不够准确,一个原因就是最大值的概率不够大,或者说增大相对最大值而减弱其他值的影响就可以得到更加准确的位置坐标。

softargmax: 技术分享图片

可以看到,上式与softmax的期望只有一个差别,即给向量的每个元素乘以beta。

>>>d = data*10       # beta=10
array([  1. ,   3. ,   6. ,  21. ,   5.5])
>>> np.sum(np.exp(d)/np.sum(np.exp(d)) *np.array([0,1,2,3,4]))
2.9999998429934758

可见此时输出的坐标为2.99,即为3,且这种寻找极值所在位置(坐标)的方法是可微的。常用于图像特征点位置的提取。

 

Ref:

IFT6266 PROJECT

关于softmax、argmax、softargmax

标签:image   title   img   png   beta   exp   无法   .com   向量   

原文地址:https://www.cnblogs.com/king-lps/p/9937440.html

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