softmax函數,對數似然代價函數及求導反向傳播


1. softmax函數定義

      softmax函數為神經網絡定義了一種新的輸出層:它把每個神經元的輸入占當前層所有神經元輸入之和的比值,當作該神經元的輸出。假設人工神經網絡第$L$層的第$j$個節點的帶權輸入為

在該層應用softmax函數作為激活函數,則第$j$個節點的激活值$a^{L}_{j}$就為

      一般來說,我們只在神經網絡最后一層應用softmax函數,並把該層叫做softmax層。可以看到,softmax層的所有輸出均為正數,且總和為1,因而可以被看作是一個概率分布。因為softmax層的輸出是每個神經元的輸入占當前層所有神經元輸入之和的比值,所以某個神經元的輸出值越大,則該神經元對應的類別是真實類別的可能性更高。我們可以選取輸出值最大的神經元對應的類別,作為我們的預測結果!

      softmax層的形象表示如下圖:

      PyTorch實現softmax的代碼示例如下:

import torch
import torch.nn.functional as F
data = torch.FloatTensor([[3, 1, -3], [2, 8, 1]])
out = F.softmax(data, dim=1)   # dim=1表示對每一行求softmax
print(out)

  結果如下:

tensor([[8.7888e-01, 1.1894e-01, 2.1785e-03],
        [2.4704e-03, 9.9662e-01, 9.0880e-04]])

2. 交叉熵損失函數

       softmax層和交叉熵損失函數結合起來可解決該層參數學習緩慢的問題。交叉熵損失函數定義為

式中,$a_k$表示第$k$個神經元的輸出值,$y_k$表示第$k$個神經元對應的真實值,一般取值為0或1。值得注意的是,該損失函數的求和號是對softmax層的所有神經元求和。

3. 求導和反向傳播

交叉熵損失函數關於偏置$b_j$的偏導數

式(*)中除了$\frac{\partial a_j}{\partial z_j}$和$\frac{\partial a_k}{\partial z_j}$之外,其它均為已知,下面將推導這兩個偏導數的值

把上面兩個偏導值代入式(*)中,可得

 

同樣地,可以推導得到交叉熵損失函數關於權重$w_jk$的偏導數

 

參考資料

[1]. softmax的log似然代價函數(公式求導)

[2]. 詳解softmax函數以及相關求導過程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM