softmax用於多分類過程當中,它將多個神經元的輸出,映射到(0,1)區間內,能夠當作機率來理解,從而來進行多分類!數組
假設咱們有一個數組,V,Vi表示V中的第i個元素,那麼這個元素的softmax值就是:網絡
$$ S_i = \frac{e^j }{ \sum\nolimits_{j} e^j} \tag{1}$$函數
更形象的以下圖表示:優化
softmax直白來講就是將原來輸出是3,1,-3經過softmax函數一做用,就映射成爲(0,1)的值,而這些值的累和爲1(知足機率的性質),那麼咱們就能夠將它理解成機率,在最後選取輸出結點的時候,咱們就能夠選取機率最大(也就是值對應最大的)結點,做爲咱們的預測目標。spa
當咱們對分類的Loss進行改進的時候,咱們要經過梯度降低,每次優化一個step大小的梯度,這個時候咱們就要求Loss對每一個權重矩陣的偏導,而後應用鏈式法則。那麼這個過程的第一步,就是對softmax求導傳回去,不用着急,我後面會舉例子很是詳細的說明。在這個過程當中,你會發現用了softmax函數以後,梯度求導過程很是很是方便。.net
下面咱們舉出一個簡單例子。blog
根據圖片網絡所示,咱們能獲得下面公式:圖片
z4 = w41*o1+w42*o2+w43*o3it
z5 = w51*o1+w52*o2+w53*o3im
z6 = w61*o1+w62*o2+w63*o3
z4,z5,z6分別表明結點4,5,6的輸出,01,02,03表明是結點1,2,3日後傳的輸入.
那麼咱們能夠通過softmax函數獲得:
$$a_4 = \frac{e^{z_4}}{e^{z_4} + e^{z_5} + e^{z_6}}, a_5 = \frac{e^{z_5}}{e^{z_4} + e^{z_5} + e^{z_6}}, a_6 = \frac{e^{z_6}}{e^{z_4} + e^{z_5} + e^{z_6}} \tag{2}$$
通過上面的形式化後,接下來咱們選用交叉熵做爲損失函數來推導Softmax的偏導。交叉熵的形式爲:
$$ Loss = -\sum_{i} y_i \cdot \ln a_i \tag{3}$$
其中$y$表明咱們的真實值,$a$表明咱們softmax求出的值。$i$表明的是輸出結點的標號。
爲了形式化說明,我這裏認爲訓練數據的真實輸出爲第$j$個爲1,其它均爲0,那麼Loss就變成了$Loss = - y_j \cdot \ln a_j = - \ln a_j$,累和已經去掉,如今咱們開始求導數。
參數的形式在該例子中,總共分爲w41,w42,w43,w51,w52,w53,w61,w62,w63.這些,那麼好比我要求出w41,w42,w43的偏導,就須要將Loss函數求偏導傳到結點4,而後再利用鏈式法則繼續求導便可。
舉個例子此時求w41的偏導爲:
$$
\frac{\partial Loss}{\partial w_{41}} = \frac{\partial Loss}{\partial a_{4}} \cdot \frac{\partial a_4}{\partial z_{4}} \cdot \frac{\partial z_4}{\partial w_{41}}
\\= - \frac{1}{a_4} \cdot \frac{\partial a_4}{\partial z_{4}} \cdot 1 \tag{4}
$$
上式中,只要求出$\frac{\partial a_4}{\partial z_{4}}$就能夠完成推導。這裏分爲兩種狀況:
1. 當$j=i$時:
$$ \frac{\partial a_j}{\partial z_i} = \frac{\partial}{\partial z_i}(\frac{e^{z_j}}{\sum_k e^{z_k}})
\\=\frac{(e^{z_j})' \cdot \sum_k e^{z_k} - e^{z_j} \cdot e^{z_j}}{(\sum_k e^{z_k})^2}
\\=\frac{e^{z_j}}{\sum_k e^{z_k}} - \frac{e^{z_j}}{\sum_k e^{z_k}} \cdot \frac{e^{z_j}}{\sum_k e^{z_k}}
\\=a_j \cdot (1-a_j)
\tag{5} $$
將(5)式帶入(4)中,獲得$ \frac{\partial Loss}{\partial w_{j}} = -\frac{1}{a_j} \cdot a_j \cdot (1-a_j) = a_j - 1$。
2. 當$j \neq i$時:
$$ \frac{\partial a_j}{\partial z_i} = \frac{\partial}{\partial z_i}(\frac{e^{z_j}}{\sum_k e^{z_k}})
\\=\frac{0 \cdot \sum_k e^{z_k} - e^{z_j} \cdot e^{z_i}}{(\sum_k e^{z_k})^2}
\\=- \frac{e^{z_j}}{\sum_k e^{z_k}} \cdot \frac{e^{z_i}}{\sum_k e^{z_k}}
\\=-a_j \cdot a_i
\tag{6} $$
將(6)式帶入(4)中,獲得$ \frac{\partial Loss}{\partial w_{j}} = -\frac{1}{a_j} \cdot -a_j \cdot a_i = a_i$。
OK,到此咱們已經徹底推導完Softmax部分的反向傳播。
參考:
1. https://zhuanlan.zhihu.com/p/25723112
2. https://blog.csdn.net/u014313009/article/details/51045303