圖示Softmax及交叉熵損失函式

hearthougan發表於2018-09-14

Softmax函式

Softmax是將神經網路得到的多個值,進行歸一化處理,使得到的值在[0,1]之間,讓結果變得可解釋。即可以將結果看作是概率,某個類別概率越大,將樣本歸為該類別的可能性也就越高。Softmax就如下圖(借鑑李宏毅老師的課件)

SoftMax

為了更加清晰的看清整個過程,我將其製作成gif,如下圖所示:

Softmax的工作過程

交叉熵:

假設pq是關於樣本集的兩個分佈,其中p是樣本集的真實分佈,q是樣本集的估計分佈,那麼按照真是分佈p來衡量識別一個樣本所需要編碼長度的期望(即,平均編碼長度):

H(p)=\sum_{i}^{n} p_{i}log\frac{1}{p_{i}}=\sum_{i}^{n}- p_{i}logp_{i}

如果用估計分佈q來表示真實分佈p的平均編碼長度,應為:

H(p,q)=\sum_{i=1}^{n}p_{i}log\frac{1}{q_{i}}=\sum_{i=1}^{n}-p_{i}logq_{i}

這是因為用q來編碼的樣本來自於真是分佈p,所以期望值H(p,q)中的概率是p_{i}。而H(p,q)就是交叉熵。

注:不瞭解什麼是編碼的請看這裡:如何理解用資訊熵來表示最短的平均編碼長度

在神經網路後面新增Softmax,真實的標籤(或者是類別)就相當於真實的分佈,經過Softmax得出的值就是預測的結果,因此可以使用交叉熵函式來作為損失函式。有了交叉熵的概念,我們就可以得出,Softmax的損失函式:

                                                                                   L=\sum- \hat{y}_{i}lny_{i}

其中y_{i}是神經元的輸出也可以作為預測結果,\hat{y}_{i}是第i個類別的真實值,\hat{y}_{i}只能取值0\: \: or\: \: 1。在Softmax中我們取以e為底的對數,因為都是e的指數形式,可以方便計算。在反向傳播的過程中,如何對交叉熵損失函式求導呢?可以先看下圖的示例,顯示瞭如何得到損失函式:

由上圖可以看到,損失函式具體形式是什麼。為了計算反向傳播,我們從最後一層開始,也就是首先要對Softmax的輸入z_{i}求導,得:

                                                             \frac{\partial L}{\partial z_{i}}=\frac{\partial L}{\partial y_{j}}\frac{\partial y_{j}}{\partial z_{i}},其中\left\{\begin{matrix} \begin{matrix} y_{j}=\frac{e^{z_{j}}}{\sum_{k}e^{z_{k}}}\\ \\ \, \, \, \, \, \, \, \, \, L=\sum_{j}\hat{y_{j}}lny_{j}\\ \end{matrix} \end{matrix}\right.

由於每個y_{j}的分母中都有z_{i}的貢獻,故我們要考慮每一個輸出值。則:

                                                            \frac{\partial L}{\partial y_{j}}=\frac{\partial[ -\sum_{j}\hat{y_{j}}logy_{j}]}{\partial y_{j}}=-\sum_{j}\frac{\hat{y_{j}}}{y_{j}}

對於\frac{\partial y_{j}}{\partial z_{i}},需要分開討論因為j=ij\neq i時的求導結果不同,故需分開討論。則

                                    \frac{\partial L}{\partial z_{i}}=\sum_{j}\frac{\partial (-\hat{y}_{j}lny_{j})}{\partial z_{i}} =\sum_{j}\frac{\partial (-\hat{y}_{j}lny_{j})}{\partial y_{j}} \frac{\partial (y_{j})}{\partial z_{i}}=\left\{\begin{matrix} \frac{\partial (-\hat{y}_{i}lny_{i})}{\partial y_{i}} \frac{ \partial (\frac{e^{z_{i}}}{\sum_{k}e^{z_{k}}})}{\partial z_{i}}&j=i \\ & \\ \sum_{j\neq i}\frac{\partial (-\hat{y}_{j}lny_{j})}{\partial y_{j}} \frac{ \partial (\frac{e^{z_{j}}}{\sum_{k}e^{z_{k}}})}{\partial z_{i}}&j\neq i \end{matrix}\right.

  • j=i時,有:

                                                        \large {\color{Magenta} \begin{matrix} {\color{Golden} \frac{\partial y_{j}}{\partial z_{i}}}=\frac{\partial y_{i}}{\partial z_{i}}=\frac{\partial [\frac{e^{z_{i}} }{\sum_{k}e^{z_{k}}}]}{\partial z_{i}}=\frac{e^{z_{i}}\sum_{k}e^{z_{k}}-(e^{z_{i}})^{2} }{ (\sum_{k}e^{z_{k}})^{2} }\\ \\ \: \: \: \: =\frac{e^{z_{i}} }{\sum_{k}e^{z_{k}} }(1-\frac{e^{z_{i}} }{\sum_{k}e^{z_{k}} })=y_{i}(1-y_{i}) \end{matrix}}

  • j\neq i

                                                       {\color{Magenta} {\color{Golden} \frac{\partial y_{j}}{\partial z_{i}}}=\frac{\partial [\frac{e^{z_{j}} }{\sum_{k}e^{z_{k}}}]}{\partial z_{i}}=\frac{0-e^{z_{j}}e^{z_{i}} }{ (\sum_{k}e^{z_{k}})^{2} }=-y_{i}y_{j}}

故,

                                                                       \large \begin{matrix} \, \, \, \, \, \, \, \, \, \, \, \, \, \, \,\, {\color{Red} \frac{\partial L}{\partial z_{i}}}=-\sum_{j}\frac{\hat{y_{j}}}{y_{j}}\frac{\partial y_{j}}{\partial z_{i}}\\ \\ \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: =-\frac{\hat{y_{i}}}{y_{i}}y_{i}(1-y_{i})+\sum_{j\neq i}\frac{\hat{y_{j}}}{y_{j}}y_{i}y_{j}\\ \\ \: \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \: \: \: \: \: \: \: \: \: \: \: =y_{i}\hat{y}_{i}-\hat{y}_{i}+\sum_{j\neq i}y_{i}\hat{y}_{i}\\ \\ \: \: \: \: \: \: \: \: \:\: \: \: \: \: \: \: \: \: \: \: \: =-\hat{y}_{i}+\sum_{j}y_{i}\hat{y}_{j}\\ \\ \; \; \; \; \; \; \;\: \: \: \: \: \: \: \: \: \: \: \: \: =-\hat{y}_{i}+y_{i}\sum_{j}\hat{y}_{j}\\ \\ \: \: \: \: \: \: ={\color{Magenta} y_{i}-\hat{y_{i}}} \end{matrix}

注:因為如果給定一個樣本\large x那麼他對應的真實標籤只有一個值為\large 1,其餘為0,故,

                                                                               \sum_{j}\hat{y}_{j}=1

Sotfmax的交叉熵損失函式,還有另外的形式:

  •                                                                  L_{i} = - \sum_{j=1}^{k} 1\left\{y_{(i)} = j\right\} \log \frac{e^{z_{j}}}{\sum_{l=1}^k e^{z_{k} }}=-\hat{y}_{i}lny_{i}
  •                                                                 \begin{matrix} L = - \frac{1}{m} \left[ \sum_{i=1}^{m} \sum_{j=1}^{k} 1\left\{y_{(i)} = j\right\} \log \frac{e^{z_{j}}}{\sum_{l=1}^k e^{z_{k} }}\right]\\ \\ \; \; \; \; \; \; \; \; \; \; \; \; =- \frac{1}{m} \left[ \sum_{i=1}^{m} \hat{y}_{i} \log \frac{e^{z_{i}}}{\sum_{l=1}^k e^{z_{k} }}\right] {\color{Magenta} =- \frac{1}{m} \left[ \sum_{i=1}^{m} \hat{y}_{i} \log y_{i}\right]} \end{matrix}

其本質是一樣的,因為1\left\{y_{(i)} = j\right\}是示性函式,只有當大括號內的值為真時才取值為1,否則為0,即1\left\{y_{(i)} = j\right\}\Leftrightarrow \hat{y_{i}}

相關文章