卷積神經網絡系列之softmax,softmax loss和cross entropy的講解

咱們知道卷積神經網絡(CNN)在圖像領域的應用已經很是普遍了,通常一個CNN網絡主要包含卷積層,池化層(pooling),全鏈接層,損失層等。雖然如今已經開源了不少深度學習框架(好比MxNet,Caffe等),訓練一個模型變得很是簡單,可是你對這些層具體是怎麼實現的瞭解嗎?你對softmax,softmax loss,cross entropy瞭解嗎?相信不少人不必定清楚。雖然網上的資料不少,可是質量良莠不齊,經常看得眼花繚亂。爲了讓你們少走彎路,特意整理了下這些知識點的前因後果,但願不只幫助本身鞏固知識,也能幫到他人理解這些內容。git

這一篇主要介紹全鏈接層和損失層的內容,算是網絡裏面比較基礎的一塊內容。先理清下從全鏈接層到損失層之間的計算。來看下面這張圖,來自參考資料1(本身實在懶得畫圖了)。網絡

這裏寫圖片描述

這張圖的等號左邊部分就是全鏈接層作的事,W是全鏈接層的參數,咱們也稱爲權值,X是全鏈接層的輸入,也就是特徵。從圖上能夠看出特徵X是N*1的向量,這是怎麼獲得的呢?這個特徵就是由全鏈接層前面多個卷積層和池化層處理後獲得的,假設全鏈接層前面鏈接的是一個卷積層,這個卷積層的輸出是100個特徵(也就是咱們常說的feature map的channel爲100),每一個特徵的大小是4*4,那麼在將這些特徵輸入給全鏈接層以前會將這些特徵flat成N*1的向量(這個時候N就是100*4*4=1600)。解釋完X,再來看W,W是全鏈接層的參數,是個T*N的矩陣,這個N和X的N對應,T表示類別數,好比你是7分類,那麼T就是7。咱們所說的訓練一個網絡,對於全鏈接層而言就是尋找最合適的W矩陣。所以全鏈接層就是執行WX獲得一個T*1的向量(也就是圖中的logits[T*1]),這個向量裏面的每一個數都沒有大小限制的,也就是從負無窮大到正無窮大。而後若是你是多分類問題,通常會在全鏈接層後面接一個softmax層,這個softmax的輸入是T*1的向量,輸出也是T*1的向量(也就是圖中的prob[T*1],這個向量的每一個值表示這個樣本屬於每一個類的機率),只不過輸出的向量的每一個值的大小範圍爲0到1。cors

如今你知道softmax的輸出向量是什麼意思了,就是機率,該樣本屬於各個類的機率!框架

那麼softmax執行了什麼操做能夠獲得0到1的機率呢?先來看看softmax的公式(之前本身看這些內容時候對公式也很反感,不過靜下心來看就行了):函數

這裏寫圖片描述

公式很是簡單,前面說過softmax的輸入是WX,假設模型的輸入樣本是I,討論一個3分類問題(類別用1,2,3表示),樣本I的真實類別是2,那麼這個樣本I通過網絡全部層到達softmax層以前就獲得了WX,也就是說WX是一個3*1的向量,那麼上面公式中的aj就表示這個3*1的向量中的第j個值(最後會獲得S1,S2,S3);而分母中的ak則表示3*1的向量中的3個值,因此會有個求和符號(這裏求和是k從1到T,T和上面圖中的T是對應相等的,也就是類別數的意思,j的範圍也是1到T)。由於e^x恆大於0,因此分子永遠是正數,分母又是多個正數的和,因此分母也確定是正數,所以Sj是正數,並且範圍是(0,1)。若是如今不是在訓練模型,而是在測試模型,那麼當一個樣本通過softmax層並輸出一個T*1的向量時,就會取這個向量中值最大的那個數的index做爲這個樣本的預測標籤。學習

所以咱們訓練全鏈接層的W的目標就是使得其輸出的WX在通過softmax層計算後其對應於真實標籤的預測機率要最高。測試

舉個例子:假設你的WX=[1,2,3],那麼通過softmax層後就會獲得[0.09,0.24,0.67],這三個數字表示這個樣本屬於第1,2,3類的機率分別是0.09,0.24,0.67。.net

————————————————————————華麗的分割線———————————————————————-blog

弄懂了softmax,就要來講說softmax loss了。 
那softmax loss是什麼意思呢?以下:圖片

這裏寫圖片描述

首先L是損失。Sj是softmax的輸出向量S的第j個值,前面已經介紹過了,表示的是這個樣本屬於第j個類別的機率。yj前面有個求和符號,j的範圍也是1到類別數T,所以y是一個1*T的向量,裏面的T個值,並且只有1個值是1,其餘T-1個值都是0。那麼哪一個位置的值是1呢?答案是真實標籤對應的位置的那個值是1,其餘都是0。因此這個公式其實有一個更簡單的形式:

這裏寫圖片描述

固然此時要限定j是指向當前樣本的真實標籤。

來舉個例子吧。假設一個5分類問題,而後一個樣本I的標籤y=[0,0,0,1,0],也就是說樣本I的真實標籤是4,假設模型預測的結果機率(softmax的輸出)p=[0.2,0.3,0.4,0.6,0.5],能夠看出這個預測是對的,那麼對應的損失L=-log(0.6),也就是當這個樣本通過這樣的網絡參數產生這樣的預測p時,它的損失是-log(0.6)。那麼假設p=[0.2,0.3,0.4,0.1,0.5],這個預測結果就很離譜了,由於真實標籤是4,而你以爲這個樣本是4的機率只有0.1(遠不如其餘機率高,若是是在測試階段,那麼模型就會預測該樣本屬於類別5),對應損失L=-log(0.1)。那麼假設p=[0.2,0.3,0.4,0.3,0.5],這個預測結果雖然也錯了,可是沒有前面那個那麼離譜,對應的損失L=-log(0.3)。咱們知道log函數在輸入小於1的時候是個負數,並且log函數是遞增函數,因此-log(0.6) < -log(0.3) < -log(0.1)。簡單講就是你預測錯比預測對的損失要大,預測錯得離譜比預測錯得輕微的損失要大。

———————————————————————-華麗的分割線—————————————————————————-

理清了softmax loss,就能夠來看看cross entropy了。 
corss entropy是交叉熵的意思,它的公式以下:

這裏寫圖片描述

是否是以爲和softmax loss的公式很像。當cross entropy的輸入P是softmax的輸出時,cross entropy等於softmax loss。Pj是輸入的機率向量P的第j個值,因此若是你的機率是經過softmax公式獲得的,那麼cross entropy就是softmax loss。這是我本身的理解,若是有誤請糾正。

 

來自:http://blog.csdn.net/u014380165/article/details/77284921#comments

相關文章
相關標籤/搜索