在上篇《CNN卷積神經網絡學習筆記2:網絡結構》中,已經介紹了CNN的網絡結構的詳細構成,我們已經可以初始化一個自己的CNN網絡了,接下來就是要用訓練得到一個確定的CNN的模型,也就是確定CNN的參數。
CNN本質上就是人工神經網絡的一種,只是在前幾層的處理上有所不同,我們可以把卷積核看成是人工神經網絡裏的權值W,而採樣層實質上也是一種卷積運算。所以可以基於人工神經網絡的權值更新的方法來推導CNN裏的權值更新公式。人工神經網絡裏是用反向傳播算法將誤差層層回傳,利用梯度下降法更新每一層的權值,CNN中也是類似的。所以這裏先對傳統的BP算法做個概述,然後再推廣到CNN中。
1,BP算法
1.1 Feedforward Pass前向傳播
首先定義平方誤差代價函數:
其中N是樣本個數,c是label的維度,對於分類問題,意味着這些樣本能分爲c類。
定義第l層的輸出爲:
這裏f是激活函數,
上式就是前向傳播的公式,每一層對輸入(也就是上一層的輸出)做運算,得到輸出結果,這樣將樣本信息逐層傳遞,最後輸出一個預測值(predict label)。
1.2 Backpropagation Pass反向傳播
預測值與真實值(label)之間必然是存在誤差的,反向傳播就是要把這個誤差信息回傳給每一層,讓這些層修改他們的權值,使得CNN更精準。
BP算法中是用梯度下降法更新權值的,梯度下降法的更新公式如下:
梯度下降法細節可以參考這裏:
http://ufldl.stanford.edu/wiki/index.php/Gradient_checking_and_advanced_optimization
其中
爲了求取單個樣本的誤差代價函數對參數的偏導,這裏定義節點靈敏度(sensitivities)
其中的u是
對於參數中的偏置b,因爲
每層的靈敏度是不一樣的,可以算得:
注意這裏y也是b的函數,
進一步求得誤差代價函數E對參數中的權值W的偏導:
至此,我們得到了每一層利用梯度下降進行權值更新時需要的梯度,也就是(2),(4),可以看到他們都和靈敏度有關,而靈敏度可由(3)式計算。
在(3)式中,
從靈敏度下手:
所以反向傳播其實是通過靈敏度層層回傳誤差信息,如下就是反向傳播的核心公式:
以上是對經典的BP算法做一個概述,CNN中把權值W換成卷積核k,按照(1)(2)(3)(4)(5)式就可以得到CNN的權值更新公式。
2,CNN中卷積層權值更新推導
2.1 對照(1)式計算l層的輸出
在CNN中,對於卷積層的每一種輸出的特徵圖
其中,Mj表示選擇的輸入特徵圖組合,
2.2 對照(5)式計算靈敏度
因爲l+1層是採樣層,所以相當於也是做卷積,例如做scale=2的下采樣,就是用2*2的每個值爲1/4的卷積核卷積圖像,所以這裏的權值W實際上就是這個2*2的卷積核,它的值是
2.3 對照(2)式計算誤差代價函數對偏置b的偏導
也就是對層l中的靈敏度中所有節點求和,這裏(u,v)代表靈敏度矩陣中的元素位置:
2.4 對照(4)式計算誤差代價函數對卷積核k的偏導:
這裏
3,CNN中下采樣層權值更新推導
3.1 對照(1)式計算l層的輸出
在CNN中,對於採樣層的每一種輸出特徵圖
down表示下采樣,這裏的
3.2 對照(5)式計算靈敏度
3.3 對照(2)式計算誤差代價函數對偏置b的偏導
這裏和卷積層的b是一樣的:
至此我們就得到了CNN的權值更新公式。
下一篇中討論一個簡單的CNN實現。
Reference
《Notes on Convolutional Neural Networks》
http://cogprints.org/5869/1/cnn_tutorial.pdf
以及它的中文翻譯:
http://blog.csdn.net/zouxy09/article/details/9993371