Softmax的理解與應用

Softmax在機器學習中有非常廣泛的應用,但是剛剛接觸機器學習的人可能對Softmax的特點以及好處並不理解,其實你瞭解了以後就會發現,Softmax計算簡單,效果顯著,非常好用。

我們先來直觀看一下,Softmax究竟是什麼意思

我們知道max,假如說我有兩個數,a和b,並且a>b,如果取max,那麼就直接取a,沒有第二種可能

但有的時候我不想這樣,因爲這樣會造成分值小的那個飢餓。所以我希望分值大的那一項經常取到,分值小的那一項也偶爾可以取到,那麼我用softmax就可以了 
現在還是a和b,a>b,如果我們取按照softmax來計算取a和b的概率,那a的softmax值大於b的,所以a會經常取到,而b也會偶爾取到,概率跟它們本來的大小有關。所以說不是max,而是 Soft max 
那各自的概率究竟是多少呢,我們下面就來具體看一下

定義

假設我們有一個數組,V,Vi表示V中的第i個元素,那麼這個元素的Softmax值就是 

Si=eijejSi=ei∑jej

也就是說,是該元素的對數值,與所有元素對數值和的比值

這個定義可以說非常的直觀,當然除了直觀樸素好理解以外,它還有更多的優點

1.計算與標註樣本的差距

在神經網絡的計算當中,我們經常需要計算按照神經網絡的正向傳播計算的分數S1,和按照正確標註計算的分數S2,之間的差距,計算Loss,才能應用反向傳播。Loss定義爲交叉熵

Li=log(efyijej)Li=−log⁡(efyi∑jej)

取log裏面的值就是這組數據正確分類的Softmax值,它佔的比重越大,這個樣本的Loss也就越小,這種定義符合我們的要求

2.計算上非常非常的方便

當我們對分類的Loss進行改進的時候,我們要通過梯度下降,每次優化一個step大小的梯度,這個時候我們就要求Loss對每個權重矩陣的偏導,然後應用鏈式法則。那麼這個過程的第一步,就是求Loss對score的偏導 (下面公式推導部分對於求偏導符號就用求導符號代替)

我們首先定義

Pyi=efyijejPyi=efyi∑jej 是選到yi的概率

Li=log(efyijej)Li=−log⁡(efyi∑jej)是我們之前提到的交叉熵 
那麼我們求Loss對score的偏導就是

Lifyi=ln(efyijej)∂Li∂fyi=−ln⁡(efyi∑jej)′ 
=1jejefyi(efyijej)=1jejefyi(1jfyiejjej)=−1∗∑jejefyi∗(efyi∑jej)′=−1∗∑jejefyi∗(1−∑j≠fyiej∑jej)′

=1jejefyi(1)jfyiej(1)1(jej)2(jej)=−1∗∑jejefyi∗(−1)∗∑j≠fyiej∗(−1)∗1(∑jej)2∗(∑jej)′

=1jejefyi(1)jfyiej(1)1(jej)2efyi=−1∗∑jejefyi∗(−1)∗∑j≠fyiej∗(−1)∗1(∑jej)2∗efyi 
=jfyiejjej=−∑j≠fyiej∑jej 
=(1Pfyi)=Pfyi1=−(1−Pfyi)=Pfyi−1

最後結果的形式非常的簡單,只要將算出來的概率的向量對應的真正結果的那一維減1,就可以了

舉個例子,通過若干層的計算,最後得到的某個訓練樣本的向量的分數是[ 1, 5, 3 ], 
那麼概率分別就是[e1e1+e3+e5,e5e1+e3+e5,e3e1+e3+e5]=[0.015,0.866,0.117][e1e1+e3+e5,e5e1+e3+e5,e3e1+e3+e5]=[0.015,0.866,0.117],如果這個樣本正確的分類是第二個的話,那麼計算出來的偏導就是[0.015,0.8661,0.117]=[0.015,0.134,0.117][0.015,0.866−1,0.117]=[0.015,−0.134,0.117],是不是很簡單!!然後再根據這個進行back propagation就可以了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章