softmax函數及交叉熵損失函數求導

1.softmax函數

使用softmax函數主要是爲了解決多分類問題,在一個分類神經網絡中,該函數能夠將多個神經元的輸出轉換到(0,1)之間,可以當概率來理解,這樣就可以取其中最大值當做被分到哪一類。
假設一組神經元的輸出爲a[n]a[n],那麼pip_i就可以表示爲:
pi=eaij=1neajp_{i}=\frac{e^{a_i}}{\sum_{j=1}^{n} e^{a_j}}
這裏有個問題,這樣的式子,由於存在指數函數,在計算中可能會出現不穩定情況(數據可能非常非常大)
所以一般我們計算過程中是做如下變換:
pi=eaimax(a)j=1neajmax(a)p_{i}=\frac{e^{a_i-max(a)}}{\sum_{j=1}^{n} e^{a_j-max(a)}}
因爲
eaimax(a)j=1neajmax(a)=eai/emax(a)j=1neaj/emax(a)=eaimax(a)j=1neajmax(a)\frac{e^{a_i-max(a)}}{\sum_{j=1}^{n} e^{a_j-max(a)}}=\frac{e^{a_i}/e^{max(a)}}{\sum_{j=1}^{n} e^{a_j}/e^{max(a)}}=\frac{e^{a_i-max(a)}}{\sum_{j=1}^{n} e^{a_j-max(a)}}
這樣就保證了數據不會計算出來太大。
計算過程圖示(搬運)如下:在這裏插入圖片描述

2.softmax函數相關求導

一般分類任務中,我們使用交叉熵損失函數:
C=inyilnpi C=-\sum_{i}^n y_{i} \ln p_{i}
然後我們要明確一下我們要求什麼,我們要求的是我們的lossloss對於神經元輸出aia_i的梯度,即:
Cai \frac{\partial C}{\partial a_{i}}
根據鏈式求導法則:
Cai=Cpjpjai \frac{\partial C}{\partial a_{i}}=\frac{\partial C}{\partial p_{j}} \frac{\partial p_{j}}{\partial a_{i}}
其中Cpj=(jnyjlnpj)pj=jnyj1pj\frac{\partial C}{\partial p_{j}}=\frac{\partial\left(-\sum_{j}^{n} y_{j} \ln p_{j}\right)}{\partial p_{j}}=-\sum_{j}^{n} y_{j} \frac{1}{p_{j}}
注意這裏的pjp_j有兩種情況,這兩種情況的導數是不一樣的。分別是:

  1. j = i 時:pjai=piai=eaik=1neakai=eaik=1neakeaieai(k=1neak)2=pipi2\frac{\partial p_{j}}{\partial a_{i}} = \frac{\partial p_{i}}{\partial a_{i}} = \frac{\partial{ \frac{e^{a_i}}{\sum_{k=1}^{n} e^{a_k}}}}{\partial a_{i}} = \frac{{e^{a_i}}{\sum_{k=1}^{n} e^{a_k}}-e^{a_i}e^{a_i}}{({\sum_{k=1}^{n} e^{a_k}})^2} = p_i-{p_i}^2
  2. j ≠ i 時:pjai=eajk=1neakai=eajeai(k=1neak)2=pjpi\frac{\partial p_{j}}{\partial a_{i}} = \frac{\partial{ \frac{e^{a_j}}{\sum_{k=1}^{n} e^{a_k}}}}{\partial a_{i}} = \frac{-e^{a_j}e^{a_i}}{({\sum_{k=1}^{n} e^{a_k}})^2} = -p_jp_i

然後兩種情況相加Cai=(jyj1pj)pjai=yipipi(1pi)+j=iyjpjpipj=yi+yipi+j=iyjpi=yi+pijyj\frac{\partial C}{\partial a_{i}}=\left(-\sum_{j} y_{j} \frac{1}{p_{j}}\right) \frac{\partial p_{j}}{\partial a_{i}}=-\frac{y_{i}}{p_{i}} p_{i}\left(1-p_{i}\right)+\sum_{j =\neq i} \frac{y_{j}}{p_{j}} p_{i} p_{j}=-y_{i}+y_{i} p_{i}+\sum_{j =\neq i} y_{j} p_{i}=-y_{i}+p_{i} \sum_{j} y_{j}
因爲yi=1\sum y_i = 1,所以:
Cai=piyi\frac{\partial C}{\partial a_{i}}=p_{i}-y_{i}

參考鏈接

[1] softmax函數詳解與推導
[2] 簡單易懂的softmax交叉熵損失函數求導

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