1.softmax函數
使用softmax函數主要是爲了解決多分類問題,在一個分類神經網絡中,該函數能夠將多個神經元的輸出轉換到(0,1)之間,可以當概率來理解,這樣就可以取其中最大值當做被分到哪一類。
假設一組神經元的輸出爲a[n],那麼pi就可以表示爲:
pi=∑j=1neajeai
這裏有個問題,這樣的式子,由於存在指數函數,在計算中可能會出現不穩定情況(數據可能非常非常大)
所以一般我們計算過程中是做如下變換:
pi=∑j=1neaj−max(a)eai−max(a)
因爲
∑j=1neaj−max(a)eai−max(a)=∑j=1neaj/emax(a)eai/emax(a)=∑j=1neaj−max(a)eai−max(a)
這樣就保證了數據不會計算出來太大。
計算過程圖示(搬運)如下:
2.softmax函數相關求導
一般分類任務中,我們使用交叉熵損失函數:
C=−i∑nyilnpi
然後我們要明確一下我們要求什麼,我們要求的是我們的loss對於神經元輸出ai的梯度,即:
∂ai∂C
根據鏈式求導法則:
∂ai∂C=∂pj∂C∂ai∂pj
其中∂pj∂C=∂pj∂(−∑jnyjlnpj)=−j∑nyjpj1
注意這裏的pj有兩種情況,這兩種情況的導數是不一樣的。分別是:
- j = i 時:∂ai∂pj=∂ai∂pi=∂ai∂∑k=1neakeai=(∑k=1neak)2eai∑k=1neak−eaieai=pi−pi2
- j ≠ i 時:∂ai∂pj=∂ai∂∑k=1neakeaj=(∑k=1neak)2−eajeai=−pjpi
然後兩種情況相加∂ai∂C=(−j∑yjpj1)∂ai∂pj=−piyipi(1−pi)+j≠=i∑pjyjpipj=−yi+yipi+j≠=i∑yjpi=−yi+pij∑yj
因爲∑yi=1,所以:
∂ai∂C=pi−yi
參考鏈接
[1] softmax函數詳解與推導
[2] 簡單易懂的softmax交叉熵損失函數求導