Deep Learning基礎--Softmax求導過程

 

1、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(知足機率的性質),那麼咱們就能夠將它理解成機率,在最後選取輸出結點的時候,咱們就能夠選取機率最大(也就是值對應最大的)結點,做爲咱們的預測目標。spa

2、softmax相關求導

當咱們對分類的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

相關文章
相關標籤/搜索