天天看點

softmax交叉熵損失函數求導0 前言1 softmax 函數2 損失函數 loss function3 最後的準備4 推導過程

0 前言

來寫一個softmax求導的推導過程,不僅可以給自己理清思路,還可以造福大衆,豈不美哉~

softmax經常被添加在分類任務的神經網絡中的輸出層,神經網絡的反向傳播中關鍵的步驟就是求導,從這個過程也可以更深刻地了解反向傳播的過程,還可以對梯度傳播的問題有更多的思考。

1 softmax 函數

softmax(柔性最大值)函數,一般在神經網絡中, softmax可以作為分類任務的輸出層。其實可以認為softmax輸出的是幾個類别選擇的機率,比如我有一個分類任務,要分為三個類,softmax函數可以根據它們相對的大小,輸出三個類别選取的機率,并且機率和為1。

softmax函數的公式是這種形式:

softmax交叉熵損失函數求導0 前言1 softmax 函數2 損失函數 loss function3 最後的準備4 推導過程

S i S_i Si​代表的是第i個神經元的輸出。

ok,其實就是在輸出後面套一個這個函數,在推導之前,我們統一一下網絡中的各個表示符号,避免後面突然出現一個什麼符号懵逼推導不下去了。

首先是神經元的輸出,一個神經元如下圖:

softmax交叉熵損失函數求導0 前言1 softmax 函數2 損失函數 loss function3 最後的準備4 推導過程

神經元的輸出設為:

softmax交叉熵損失函數求導0 前言1 softmax 函數2 損失函數 loss function3 最後的準備4 推導過程

其中 w i j w_{ij} wij​是第i 個神經元的第j 個權重,b是偏移值。 Z i Z_i Zi​表示該網絡的第i 個輸出。

給這個輸出加上一個softmax函數,那就變成了這樣:

softmax交叉熵損失函數求導0 前言1 softmax 函數2 損失函數 loss function3 最後的準備4 推導過程

a i a_i ai​代表softmax的第i個輸出值,右側就是套用了softmax函數。

2 損失函數 loss function

在神經網絡反向傳播中,要求一個損失函數,這個損失函數其實表示的是真實值與網絡的估計值的誤差,知道誤差了,才能知道怎樣去修改網絡中的權重。

損失函數可以有很多形式,這裡用的是交叉熵函數,主要是由于這個求導結果比較簡單,易于計算,并且交叉熵解決某些損失函數學習緩慢的問題。交叉熵的函數是這樣的:

softmax交叉熵損失函數求導0 前言1 softmax 函數2 損失函數 loss function3 最後的準備4 推導過程

其中 y i y_i yi​表示真實的分類結果。

到這裡可能嵌套了好幾層,不過不要擔心,下面會一步步推導,強烈推薦在紙上寫一寫,有時候光看看着看着就迷糊了,自己邊看邊推導更有利于了解~

3 最後的準備

在我最開始看softmax推導的時候,有時候看到一半不知道是怎麼推出來的,其實主要是因為一些求導法則忘記了,唉~

是以這裡把基礎的求導法則和公式貼出來~有些忘記的朋友可以先大概看一下:

softmax交叉熵損失函數求導0 前言1 softmax 函數2 損失函數 loss function3 最後的準備4 推導過程
softmax交叉熵損失函數求導0 前言1 softmax 函數2 損失函數 loss function3 最後的準備4 推導過程

4 推導過程

好了,這下正式開始~

首先,我們要明确一下我們要求什麼,我們要求的是我們的loss對于神經元輸出 z i z_i zi​的梯度,即:

softmax交叉熵損失函數求導0 前言1 softmax 函數2 損失函數 loss function3 最後的準備4 推導過程

根據複合函數求導法則:

softmax交叉熵損失函數求導0 前言1 softmax 函數2 損失函數 loss function3 最後的準備4 推導過程
softmax交叉熵損失函數求導0 前言1 softmax 函數2 損失函數 loss function3 最後的準備4 推導過程
softmax交叉熵損失函數求導0 前言1 softmax 函數2 損失函數 loss function3 最後的準備4 推導過程

softmax交叉熵損失函數求導0 前言1 softmax 函數2 損失函數 loss function3 最後的準備4 推導過程
參考文章:簡單易懂的softmax交叉熵損失函數求導

繼續閱讀