卷積神經網絡中的權值更新也是使用誤差的反向傳播算法。損失函數一般使用最小平方誤差函數。由於卷積網絡中存在兩部分區域:卷積區和全連接區,它們在計算損失時有所不同我們將其分開進行討論。
1、全連接網絡的權值更新
這一部分與經典的人工神經網絡不同之處在於多了一個偏置值。我們主要對多出的這個偏置值的更新進行分析即可,其他的權值變化和人工神經網絡的方法類似。
對於全連接區的第l層的輸出函數為:
第n個訓練樣例的誤差損失為:
由於在計算輸出時有兩類參數:權向量w和基值b。現在分別對其計算。我們對其使用梯度下降算法。設網絡共有L層
1)對基值b,(其實在每層,b是一個向量)
A)對於第L層損失函數對基的偏導數為:
由於每層都有多個特征圖,每個特征圖都對應一個基值,因為上面的其實求偏導數實際上是對基向量的偏導數。
為了方便表述,我們將誤差對基的導數定義為靈敏度,其表達式為:
2)對權向量w,(在每層,w是一個矩陣)
A)對於第L層的權值,我們有:
B)對於第l層的權值,求偏導數:
所以權值的改變量為:
2、卷積區的權值更新
由於卷積層和抽樣層的計算方式有所不同,我們分別對其進行分析:
1)卷積層誤差項分析
由於當前層的權值通過輸出作用於下一層的神經元而產生影響,所以在計算誤差函數對權值求導時需要使用鏈接法。首先卷積層的輸出為:
由於卷積層的下一層為抽樣層,那么首先需要知道在下一層哪些神經元與該卷積層的節點i的聯系,然后根據原來的采樣方式進行誤差分析。由於采樣層在從卷積層采樣時,同一個結點不會被重復采樣,因而,卷積層的一個局部感受野對應采樣層中的神經元的一個輸入。
假設我們現在分析的卷積層是第l層,則其下一層為l+1層(為池化層)。我們假設第l+1層的誤差項為:,則第l層的節點j的誤差項為:
上式並未考慮到第l層到下一層的權值:
注:為了簡便,本人對所有的矩陣,向量運算進行了簡化,只把它看成一個單一變量來處理。
其中:Ups (x):對x進行上采樣,此處表示下一層的誤差項中x的貢獻值。
其具體操作要根據前面的pooling的方法,因為下一層的pooling層的每個節點由l層的多個節點共同計算得出,pooling層每個節點的誤差敏感值也是由卷積層中多個節點的誤差敏感值共同產生的。
A)若前面使用mean-pooling方法,則將下一層的誤差項除以下一層所用的濾波器的大小。假如下一層的濾波器的大小為k*k,則:
B)若前面使用max-pooling方法,則將需要記錄前向傳播過程中pooling區域中最大值的位置,然后判斷當前的結點是否在最大位置上,若在最大位置上則直接將當前的下一層的誤差值賦值過來即可,否則其值賦0。
有了上面了誤差損失項,現在我們開始計算損失函數對基的偏導數和對權向量的偏導數:
A)基的偏導數
損失函數對基的偏導數為:
B)權值的變化量
損失函數對權值的偏導數為:
2)池化層(抽樣層)誤差項分析
對於采樣層,其輸出值計算公式為:
其中down(xj)為神經元j的下采樣。
在這里我們向上面卷積層一樣,需要先計算出誤差項,然后通過誤差項就可以計算得到其他權值和偏置。
由於采樣層的下一層為卷積層,采樣層的每個節點可能被卷積多次。假如當前的采樣層為第l層,我們需要計算第j個結點的神經元的誤差,則我們首先需要找到第l+1層中哪些神經元用到過結點j,這需要我們在將l層卷積到l+1層的時候保存神經元的映射過程,因為在計算反向傳播誤差時需要用到。先假設第l+1層中用到結點j的神經元的集合個數為M,
則第l層的誤差項為:
現在我們可以很輕松的對訓練偏置和位移偏置的導數:
總結
上面的關於卷積區的權值的更新需要用到矩陣,向量的內積等操作,在文中大部分地方故意將此進行了弱化,以便於表達式的精簡。
其實在上面誤差的分析過程中,最核心的步驟就是求解誤差項(又稱靈敏度),其他的計算都是以此為基礎。誤差項的求解首先要分析需要計算的結點j與下一層的哪個或哪些節點節點有關聯,因為結點j是通過下一層與該節點相連的神經元來影響最終的輸出結果,這也就需要保存每一層節點與上一層節點之間的聯系,以便在反向計算誤差時方便使用。
總之,卷積神經網絡的誤差分析其核心思想與人工神經網絡類似,都是通過反向逐層影響的方法來分析誤差。
參考文獻:
[1] Bouvrie J. Notes on Convolutional Neural Networks[J]. Neural Nets, 2006.
[2] zouxy09, http://blog.csdn.net/zouxy09/article/details/9993371
[3] loujiayu, http://www.cnblogs.com/loujiayu/p/3545155.html?utm_source=tuicool