CNN卷積神經網絡學習筆記3:權值更新公式推導

     在上篇《CNN卷積神經網絡學習筆記2:網絡結構》中,已經介紹了CNN的網絡結構的詳細構成,我們已經可以初始化一個自己的CNN網絡了,接下來就是要用訓練得到一個確定的CNN的模型,也就是確定CNN的參數。
     CNN本質上就是人工神經網絡的一種,只是在前幾層的處理上有所不同,我們可以把卷積核看成是人工神經網絡裏的權值W,而採樣層實質上也是一種卷積運算。所以可以基於人工神經網絡的權值更新的方法來推導CNN裏的權值更新公式。人工神經網絡裏是用反向傳播算法將誤差層層回傳,利用梯度下降法更新每一層的權值,CNN中也是類似的。所以這裏先對傳統的BP算法做個概述,然後再推廣到CNN中。


1,BP算法

1.1 Feedforward Pass前向傳播

首先定義平方誤差代價函數:

EN=12n=1Nk=1c(tnkynk)2.

     其中N是樣本個數,c是label的維度,對於分類問題,意味着這些樣本能分爲c類。tkn 表示第n個樣本的label tn 的第k維,ykn 是第n個樣本網絡的輸出(predict label)的第k維。我們的目標是要更新網絡的權值,使得網絡輸出y與真實值t更接近,也就是最小化這個E,考慮到要考慮一個樣本,則第n個樣本的誤差函數是:
En=12k=1c(tnkynk)2.

定義第l層的輸出爲:
xl=f(ul),ul=Wlxl1+bl(1)

     這裏f是激活函數,xl1 是l-1層的輸出,也就是l層的輸入,W和b分別是l層的權值和偏置。
     上式就是前向傳播的公式,每一層對輸入(也就是上一層的輸出)做運算,得到輸出結果,這樣將樣本信息逐層傳遞,最後輸出一個預測值(predict label)。

1.2 Backpropagation Pass反向傳播

     預測值與真實值(label)之間必然是存在誤差的,反向傳播就是要把這個誤差信息回傳給每一層,讓這些層修改他們的權值,使得CNN更精準。
     BP算法中是用梯度下降法更新權值的,梯度下降法的更新公式如下:

Wlnew=WloldηEWlold.

blnew=bloldηEblold.

     梯度下降法細節可以參考這裏:
http://ufldl.stanford.edu/wiki/index.php/Gradient_checking_and_advanced_optimization
     其中η 是梯度下降的學習率(learning rate),可以看出,梯度下降法更新權值主要是利用誤差代價函數對參數的梯度,所以權值更新的目標就是讓每一層得到這樣的梯度,然後更新。
     爲了求取單個樣本的誤差代價函數對參數的偏導,這裏定義節點靈敏度(sensitivities)δ 爲誤差對輸出的變化率:
δ=Eu

其中的u是ul=Wlxl1+bl .
     對於參數中的偏置b,因爲ub=1 ,由鏈式求導法則可得:
Ebl=Eululbl=δl.(2)

     每層的靈敏度是不一樣的,可以算得:
δl=Ebl=12(yt)2bl=f(ul)(yntn).(3)

     注意這裏y也是b的函數,y=f(ul)=f(Wlxl1+b) ,所以要乘上f(ul) ,這裏的 表示每個元素相乘,因爲每個神經元連接都會有一個靈敏度δ ,所以每一層的靈敏度是一個矩陣。
     進一步求得誤差代價函數E對參數中的權值W的偏導:
EWl=EululWl=δlxl1.(4)

     至此,我們得到了每一層利用梯度下降進行權值更新時需要的梯度,也就是(2),(4),可以看到他們都和靈敏度有關,而靈敏度可由(3)式計算。
     在(3)式中,ylul 中的xl1 是不知道的,也就是說,我們不知道每一層具體的的輸入和輸出,而且這個也太難計算,那麼怎麼把誤差信息層層回傳呢?
從靈敏度下手:
δl=Eul=Eul+1ul+1ul=δl+1(Wl+1xl+b)ul=δl+1(Wl+1f(ul)+b)ul=δl+1Wl+1f(ul).

     所以反向傳播其實是通過靈敏度層層回傳誤差信息,如下就是反向傳播的核心公式:
δl=δl+1Wl+1f(ul).(5)

以上是對經典的BP算法做一個概述,CNN中把權值W換成卷積核k,按照(1)(2)(3)(4)(5)式就可以得到CNN的權值更新公式。

2,CNN中卷積層權值更新推導

2.1 對照(1)式計算l層的輸出

在CNN中,對於卷積層的每一種輸出的特徵圖xj 有:

xlj=f(iMjxl1iklij+bj).

其中,Mj表示選擇的輸入特徵圖組合,kij 是輸入的第i種特徵圖和輸出的第j種特徵圖之間的連接所用的卷積核,bj 是第j種特徵圖對應的偏置,f是激活函數。

2.2 對照(5)式計算靈敏度

δlj=δl+1jWl+1jf(ul)=βl+1jup(δl+1j)f(ul).

     因爲l+1層是採樣層,所以相當於也是做卷積,例如做scale=2的下采樣,就是用2*2的每個值爲1/4的卷積核卷積圖像,所以這裏的權值W實際上就是這個2*2的卷積核,它的值是βj 。up表示上採樣操作,因爲l+1採樣層的靈敏度矩陣是l層靈敏度矩陣的尺寸的1/4(scale=2時),所以這裏要對l+1層的靈敏度矩陣做上採樣,使它們尺寸一致。

2.3 對照(2)式計算誤差代價函數對偏置b的偏導

也就是對層l中的靈敏度中所有節點求和,這裏(u,v)代表靈敏度矩陣中的元素位置:

Ebj=u,v(δlj)u,v

2.4 對照(4)式計算誤差代價函數對卷積核k的偏導:

Eklij=u,v(δlj)u,v(pl1i)uv.

     這裏(pl1i)uvxl1i 在做卷積時,與kij 做卷積的每一個patch,(u,v)是patch中心,輸出特徵圖中(u,v)位置的值,是由輸入特徵圖中(u,v)位置的patch和卷積核kij 卷積所得的值。

3,CNN中下采樣層權值更新推導

3.1 對照(1)式計算l層的輸出

在CNN中,對於採樣層的每一種輸出特徵圖xj 有:

xlj=f(βljdown(xl1j)+blj).

down表示下采樣,這裏的β 是乘性偏置,b是加性偏置,一般cnn網絡中沒有這個β

3.2 對照(5)式計算靈敏度

δlj=δl+1jWl+1jf(ul)=f(ulj)conv2(δl+1j,rot180(kl+1j),full).

3.3 對照(2)式計算誤差代價函數對偏置b的偏導

這裏和卷積層的b是一樣的:

Ebj=u,v(δlj)u,v.

至此我們就得到了CNN的權值更新公式。
下一篇中討論一個簡單的CNN實現。


Reference
《Notes on Convolutional Neural Networks》
http://cogprints.org/5869/1/cnn_tutorial.pdf
以及它的中文翻譯:
http://blog.csdn.net/zouxy09/article/details/9993371

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章