魏凱峰:計(jì)算機(jī)視覺、深度學(xué)習(xí)、機(jī)器學(xué)習(xí)愛好者,CSDN博客專家“AI之路”。 我們知道卷積神經(jīng)網(wǎng)絡(luò)(CNN)在圖像領(lǐng)域的應(yīng)用已經(jīng)非常廣泛了,一般一個(gè)CNN網(wǎng)絡(luò)主要包含卷積層,池化層(pooling),全連接層,損失層等。雖然現(xiàn)在已經(jīng)開源了很多深度學(xué)習(xí)框架(比如MxNet,Caffe等),訓(xùn)練一個(gè)模型變得非常簡單,但是你對這些層具體是怎么實(shí)現(xiàn)的了解嗎?你對softmax,softmax loss,cross entropy了解嗎?相信很多人不一定清楚。雖然網(wǎng)上的資料很多,但是質(zhì)量參差不齊,常??吹醚刍潄y。為了讓大家少走彎路,特地整理了下這些知識點(diǎn)的來龍去脈,希望不僅幫助自己鞏固知識,也能幫到他人理解這些內(nèi)容。 這一篇主要介紹全連接層和損失層的內(nèi)容,算是網(wǎng)絡(luò)里面比較基礎(chǔ)的一塊內(nèi)容。先理清下從全連接層到損失層之間的計(jì)算。來看下面這張圖,來自參考資料1(自己實(shí)在懶得畫圖了)。 這張圖的等號左邊部分就是全連接層做的事,W是全連接層的參數(shù),我們也稱為權(quán)值,X是全連接層的輸入,也就是特征。從圖上可以看出特征X是N*1的向量,這是怎么得到的呢?這個(gè)特征就是由全連接層前面多個(gè)卷積層和池化層處理后得到的,假設(shè)全連接層前面連接的是一個(gè)卷積層,這個(gè)卷積層的輸出是100個(gè)特征(也就是我們常說的feature map的channel為100),每個(gè)特征的大小是4*4,那么在將這些特征輸入給全連接層之前會(huì)將這些特征flat成N*1的向量(這個(gè)時(shí)候N就是100*4*4=1600)。解釋完X,再來看W,W是全連接層的參數(shù),是個(gè)T*N的矩陣,這個(gè)N和X的N對應(yīng),T表示類別數(shù),比如你是7分類,那么T就是7。我們所說的訓(xùn)練一個(gè)網(wǎng)絡(luò),對于全連接層而言就是尋找最合適的W矩陣。因此全連接層就是執(zhí)行WX得到一個(gè)T*1的向量(也就是圖中的logits[T*1]),這個(gè)向量里面的每個(gè)數(shù)都沒有大小限制的,也就是從負(fù)無窮大到正無窮大。然后如果你是多分類問題,一般會(huì)在全連接層后面接一個(gè)softmax層,這個(gè)softmax的輸入是T*1的向量,輸出也是T*1的向量(也就是圖中的prob[T*1],這個(gè)向量的每個(gè)值表示這個(gè)樣本屬于每個(gè)類的概率),只不過輸出的向量的每個(gè)值的大小范圍為0到1。 現(xiàn)在你知道softmax的輸出向量是什么意思了,就是概率,該樣本屬于各個(gè)類的概率! 那么softmax執(zhí)行了什么操作可以得到0到1的概率呢?先來看看softmax的公式(以前自己看這些內(nèi)容時(shí)候?qū)揭埠芊锤?,不過靜下心來看就好了): 公式非常簡單,前面說過softmax的輸入是WX,假設(shè)模型的輸入樣本是I,討論一個(gè)3分類問題(類別用1,2,3表示),樣本I的真實(shí)類別是2,那么這個(gè)樣本I經(jīng)過網(wǎng)絡(luò)所有層到達(dá)softmax層之前就得到了WX,也就是說WX是一個(gè)3*1的向量,那么上面公式中的aj就表示這個(gè)3*1的向量中的第j個(gè)值(最后會(huì)得到S1,S2,S3);而分母中的ak則表示3*1的向量中的3個(gè)值,所以會(huì)有個(gè)求和符號(這里求和是k從1到T,T和上面圖中的T是對應(yīng)相等的,也就是類別數(shù)的意思,j的范圍也是1到T)。因?yàn)閑^x恒大于0,所以分子永遠(yuǎn)是正數(shù),分母又是多個(gè)正數(shù)的和,所以分母也肯定是正數(shù),因此Sj是正數(shù),而且范圍是(0,1)。如果現(xiàn)在不是在訓(xùn)練模型,而是在測試模型,那么當(dāng)一個(gè)樣本經(jīng)過softmax層并輸出一個(gè)T*1的向量時(shí),就會(huì)取這個(gè)向量中值最大的那個(gè)數(shù)的index作為這個(gè)樣本的預(yù)測標(biāo)簽。 因此我們訓(xùn)練全連接層的W的目標(biāo)就是使得其輸出的WX在經(jīng)過softmax層計(jì)算后其對應(yīng)于真實(shí)標(biāo)簽的預(yù)測概率要最高。 舉個(gè)例子:假設(shè)你的WX=[1,2,3],那么經(jīng)過softmax層后就會(huì)得到[0.09,0.24,0.67],這三個(gè)數(shù)字表示這個(gè)樣本屬于第1,2,3類的概率分別是0.09,0.24,0.67。 ———————————–華麗的分割線—————————————— 弄懂了softmax,就要來說說softmax loss了。 那softmax loss是什么意思呢?如下: 首先L是損失。Sj是softmax的輸出向量S的第j個(gè)值,前面已經(jīng)介紹過了,表示的是這個(gè)樣本屬于第j個(gè)類別的概率。yj前面有個(gè)求和符號,j的范圍也是1到類別數(shù)T,因此y是一個(gè)1*T的向量,里面的T個(gè)值,而且只有1個(gè)值是1,其他T-1個(gè)值都是0。那么哪個(gè)位置的值是1呢?答案是真實(shí)標(biāo)簽對應(yīng)的位置的那個(gè)值是1,其他都是0。所以這個(gè)公式其實(shí)有一個(gè)更簡單的形式: 當(dāng)然此時(shí)要限定j是指向當(dāng)前樣本的真實(shí)標(biāo)簽。 來舉個(gè)例子吧。假設(shè)一個(gè)5分類問題,然后一個(gè)樣本I的標(biāo)簽y=[0,0,0,1,0],也就是說樣本I的真實(shí)標(biāo)簽是4,假設(shè)模型預(yù)測的結(jié)果概率(softmax的輸出)p=[0.1,0.15,0.05,0.6,0.1],可以看出這個(gè)預(yù)測是對的,那么對應(yīng)的損失L=-log(0.6),也就是當(dāng)這個(gè)樣本經(jīng)過這樣的網(wǎng)絡(luò)參數(shù)產(chǎn)生這樣的預(yù)測p時(shí),它的損失是-log(0.6)。那么假設(shè)p=[0.15,0.2,0.4,0.1,0.15],這個(gè)預(yù)測結(jié)果就很離譜了,因?yàn)檎鎸?shí)標(biāo)簽是4,而你覺得這個(gè)樣本是4的概率只有0.1(遠(yuǎn)不如其他概率高,如果是在測試階段,那么模型就會(huì)預(yù)測該樣本屬于類別3),對應(yīng)損失L=-log(0.1)。那么假設(shè)p=[0.05,0.15,0.4,0.3,0.1],這個(gè)預(yù)測結(jié)果雖然也錯(cuò)了,但是沒有前面那個(gè)那么離譜,對應(yīng)的損失L=-log(0.3)。我們知道log函數(shù)在輸入小于1的時(shí)候是個(gè)負(fù)數(shù),而且log函數(shù)是遞增函數(shù),所以-log(0.6) < -log(0.3) < -log(0.1)。簡單講就是你預(yù)測錯(cuò)比預(yù)測對的損失要大,預(yù)測錯(cuò)得離譜比預(yù)測錯(cuò)得輕微的損失要大。 ———————————–華麗的分割線———————————– 理清了softmax loss,就可以來看看cross entropy了。 corss entropy是交叉熵的意思,它的公式如下: 是不是覺得和softmax loss的公式很像。當(dāng)cross entropy的輸入P是softmax的輸出時(shí),cross entropy等于softmax loss。Pj是輸入的概率向量P的第j個(gè)值,所以如果你的概率是通過softmax公式得到的,那么cross entropy就是softmax loss。這是我自己的理解,如果有誤請糾正。 參考資料1: http://eli./2016/the-softmax-function-and-its-derivative/ |
|