一、softmax函數
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(滿足概率的性質),那么我們就可以將它理解成概率,在最后選取輸出結點的時候,我們就可以選取概率最大(也就是值對應最大的)結點,作為我們的預測目標。
二、softmax相關求導
當我們對分類的Loss進行改進的時候,我們要通過梯度下降,每次優化一個step大小的梯度,這個時候我們就要求Loss對每個權重矩陣的偏導,然后應用鏈式法則。那么這個過程的第一步,就是對softmax求導傳回去,不用着急,我后面會舉例子非常詳細的說明。在這個過程中,你會發現用了softmax函數之后,梯度求導過程非常非常方便。
下面我們舉出一個簡單例子。
根據圖片網絡所示,我們能得到下面公式:
z4 = w41*o1+w42*o2+w43*o3
z5 = w51*o1+w52*o2+w53*o3
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