1. 程式人生 > >卷積神經網路系列之softmax loss對輸入的求導推導

卷積神經網路系列之softmax loss對輸入的求導推導

我們知道卷積神經網路(CNN)在影象領域的應用已經非常廣泛了,一般一個CNN網路主要包含卷積層,池化層(pooling),全連線層,損失層等。雖然現在已經開源了很多深度學習框架(比如MxNet,Caffe等),訓練一個模型變得非常簡單,但是你對損失函式求梯度是怎麼求的真的瞭解嗎?相信很多人不一定清楚。雖然網上的資料很多,但是質量參差不齊,常常看得眼花繚亂。為了讓大家少走彎路,特地整理了下這些知識點的來龍去脈,希望不僅幫助自己鞏固知識,也能幫到他人理解這些內容。

這一篇主要介紹softmax loss對輸入的求導(或者叫cross entropy loss function對輸入的求導),算是網路裡面比較難懂的一塊內容,公式較多,但是很容易看懂,需要靜下心來看。

接下來我會先介紹softmax對輸入求導的推導過程,然後給出softmax loss對輸入的求導推導。

先推導softmax對輸入的求導:
回顧下:卷積神經網路系列之softmax,softmax loss和cross entropy介紹的softmax,就是下面這個公式:
這裡寫圖片描述
N表示類別數,a表示全連線層的輸出向量,aj表示向量a的第j個值。

那麼如果將Si對aj求導,就是下面這個式子:
這裡寫圖片描述
注意到這個式子中Si的分子的指數是ai,而求導物件是aj,因此在求導的時候就存在i==j和i!=j這兩種情況。另外這裡用DjSi表示Si對aj的導數,這種表示方式後面會用到。

當i==j時

,求導的公式是下面這樣的:
這裡寫圖片描述
這個是比較基本的求導,不要覺得字元多就很難,雖然我一開始也是這麼認為的。如果不熟悉的話應該要過一下簡單的微積分(提示兩點:1、e^ai對ai的導數還是e^ai;2、∑表示e^a1+e^a2+…+e^aN,因此對∑求導時,只有e^aj對aj的導數不為0,其他都是0)

因此,化簡這個求導公式就得到下面這個式子的結果。這裡第三個等式是怎麼得到的呢?請看上面的第一個公式,也就是softmax那個公式,你就知道S是softmax的輸出。
這裡寫圖片描述

當i!=j時,求導公式和前面同理是下面這樣的:
這裡寫圖片描述

因此整合下i==j和i!=j的情況,就得到Si對aj的導數如下:
這裡寫圖片描述

——————————————–華麗的分割線———————————————–

前面介紹的是softmax對輸入的求導推導過程,我們的目的是損失函式對輸入求導,因為這個過程需要用到softmax對輸入的求導,所以就先介紹了。softmax loss的公式是下面這樣的,這個在博文:卷積神經網路系列之softmax,softmax loss和cross entropy裡也介紹過了。我們知道模型在訓練的時候先進行前向計算,得到在當前模型引數下的預測值,也就是下式的S;然後計算這次預測的損失,也就是下式的L;然後反向傳遞損失並計算梯度(這個梯度包含損失對引數的梯度和對該層輸入的梯度);最後再正向更新引數
這裡寫圖片描述

然後就是softmax對輸入的求導,這裡直接給出結論,因為在分割線之前都在推導這個求導的過程
這裡寫圖片描述

上面兩步準備好了損失函式Lsoftmax對輸入的導數,然後就可以計算損失函式對輸入的導數了。下面這個式子就是計算損失函式L對輸入xi的導數。這個式子中的第一、二個等號比較好理解。第三個等號就用到了上面pj對xi求導的結論,第三個等號結果的左半部分是i==k的時候pk對xi的導數,求導得到的pk和原來的1/pk相乘約掉了,對yk的求和由於i==k所以只剩下yi;右半部分是i!=k的時候pk對xi的導數,注意右半部分的∑底下的k!=i。第四、五個等號也比較好理解。第六個等號是將yipi合併到∑裡面。最後一個等號的成立是建立在假設∑yk=1的前提下,這個對於常見的單標籤分類任務而言都是成立的
這裡寫圖片描述
因此假設一個5分類任務,一張影象經過softmax層後得到的概率向量p是[0.1,0.2,0.25,0.4,0.05],真實標籤y是[0,0,1,0,0],那麼損失回傳時該層得到的梯度就是p-y=[0.1,0.2,-0.75,0.4,0.05]。這個梯度就指導網路在下一次forward的時候更新該層的權重引數。

綜上就是softmax loss對輸入的求導推導