https://www.cnblogs.com/king-lps/p/9937440.htmlhtml
在閱讀LIFT:Learned Invariant Feature Transform一文時,文中第1節提到爲了保證端到端的可微性,利用softargmax來代替傳統的NMS(非極大值抑制)來挑選極值點位置。因爲只瞭解softmax,對於softargmax不甚瞭解,因此記錄下來。wordpress
1)softmax:函數
輸入爲向量,輸出爲值爲0-1之間的向量,和爲1。在分類任務中做爲機率出如今交叉熵損失函數中。code
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])orm
2)argmax:爲了獲得一個向量中最大值所處的位置,咱們利用此函數。可是這個函數不可導,因此沒法計算其梯度。然而咱們能夠利用軟化的max函數來計算,就是softmax。利用softmax,咱們能夠獲得每一個元素正則化後的值。此向量()分佈)的htm
此時最大值所處的座標指望即爲:blog
np.sum(np.exp(data)/np.sum(np.exp(data)) * np.array([0,1,2,3,4])) # E = p*index
2.5694236670240085。而最大之所在的位置應該是3。get
3)softargmax:從上面看到位置計算不夠準確,一個緣由就是最大值的機率不夠大,或者說增大相對最大值而減弱其餘值的影響就能夠獲得更加準確的位置座標。it
softargmax: form
能夠看到,上式與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,且這種尋找極值所在位置(座標)的方法是可微的。經常使用於圖像特徵點位置的提取。
此外,LIFT原文3.5節提到:softargmax做爲非極大值抑制NMS的可微分版本。就是說能夠利用softargmax來替代NMS。
Ref: