0 前言
來寫一個softmax求導的推導過程,不僅可以給自己理清思路,還可以造福大衆,豈不美哉~
softmax經常被添加在分類任務的神經網絡中的輸出層,神經網絡的反向傳播中關鍵的步驟就是求導,從這個過程也可以更深刻地了解反向傳播的過程,還可以對梯度傳播的問題有更多的思考。
1 softmax 函數
softmax(柔性最大值)函數,一般在神經網絡中, softmax可以作為分類任務的輸出層。其實可以認為softmax輸出的是幾個類别選擇的機率,比如我有一個分類任務,要分為三個類,softmax函數可以根據它們相對的大小,輸出三個類别選取的機率,并且機率和為1。
softmax函數的公式是這種形式:

S i S_i Si代表的是第i個神經元的輸出。
ok,其實就是在輸出後面套一個這個函數,在推導之前,我們統一一下網絡中的各個表示符号,避免後面突然出現一個什麼符号懵逼推導不下去了。
首先是神經元的輸出,一個神經元如下圖:
神經元的輸出設為:
其中 w i j w_{ij} wij是第i 個神經元的第j 個權重,b是偏移值。 Z i Z_i Zi表示該網絡的第i 個輸出。
給這個輸出加上一個softmax函數,那就變成了這樣:
a i a_i ai代表softmax的第i個輸出值,右側就是套用了softmax函數。
2 損失函數 loss function
在神經網絡反向傳播中,要求一個損失函數,這個損失函數其實表示的是真實值與網絡的估計值的誤差,知道誤差了,才能知道怎樣去修改網絡中的權重。
損失函數可以有很多形式,這裡用的是交叉熵函數,主要是由于這個求導結果比較簡單,易于計算,并且交叉熵解決某些損失函數學習緩慢的問題。交叉熵的函數是這樣的:
其中 y i y_i yi表示真實的分類結果。
到這裡可能嵌套了好幾層,不過不要擔心,下面會一步步推導,強烈推薦在紙上寫一寫,有時候光看看着看着就迷糊了,自己邊看邊推導更有利于了解~
3 最後的準備
在我最開始看softmax推導的時候,有時候看到一半不知道是怎麼推出來的,其實主要是因為一些求導法則忘記了,唉~
是以這裡把基礎的求導法則和公式貼出來~有些忘記的朋友可以先大概看一下:
4 推導過程
好了,這下正式開始~
首先,我們要明确一下我們要求什麼,我們要求的是我們的loss對于神經元輸出 z i z_i zi的梯度,即:
根據複合函數求導法則:
參考文章:簡單易懂的softmax交叉熵損失函數求導