卷積神經網路使用基於梯度的學習方法進行監督訓練,實踐中,一般使用隨機梯度下降(機器學習中幾種常見的梯度下降方式)的版本,對於每個訓練樣本均更新一次權值,誤差函式使用誤差平方和函式,誤差方式採用平方誤差代價函式。
注:本文主要按照參考文獻中內容來寫的,其中某些部分加入了自己解釋,此文內容不斷更新充實中,直到讓人可以看完之後完全了解卷積神經網路的計算過程。
1.1 前向傳播中樣本的誤差以及每層的輸出
全連線區的第l層(l來表示當前層)的輸出函式為:
全部訓練集上的誤差只是每個訓練樣本的誤差的總和,先考慮對於乙個樣本的bp。則對於第n個樣本的誤差,表示為:
其中tk表示第n個樣本對應的標籤的第k維,yk表示第n個樣本對應的網路輸出的第k個輸出。
1.2 反向傳播中樣本的權值更新
權值更新具體來說就是,對乙個給定的神經元,得到它的輸入,然後用這個神經元的delta(即δ)來進行縮放。用向量的形式表述就是,對於第l層,誤差對於該層每乙個權值(組合為矩陣)的導數是該層的輸入(等於上一層的輸出)與該層的靈敏度(該層每個神經元的δ組合成乙個向量的形式)的叉乘。然後得到的偏導數乘以乙個負學習率就是該層的神經元的權值的更新了:
a)對於第l層的權值,我們有:
b)對於第l層的權值,求偏導數:
在乙個卷積層,上一層的特徵maps被乙個可學習的卷積核進行卷積,然後通過乙個啟用函式,就可以得到輸出特徵map,每乙個輸出map可能是組合卷積多個輸入maps的值。首先卷積層的輸出為:
上面的*號實質是讓卷積核k在第l-1層所有關聯的feature maps上做卷積運算。
由於卷積層的下一層為抽樣層,那麼首先需要知道在下一層哪些神經元與該卷積層的節點i的聯絡,然後根據原來的取樣方式進行誤差分析。由於取樣層在從卷積層取樣時,同乙個結點不會被重複取樣(注意這裡不會重複取樣,就是不會有重疊區域,這裡和卷積操作時的滑窗操作不相同),因而,卷積層的乙個區域性感受野對應取樣層中的神經元的乙個輸入。
假設我們現在分析的卷積層是第l層,則其下一層為l+1層(為池化層)。採用的是一對一非重疊取樣。則第l層的節點j的誤差項為:
上式並未考慮到第l層到下一層的權值:
其中:ups (x):對x進行上取樣,此處表示下一層的誤差項中x的貢獻值。
接下來我們需要知道這個ups()是怎麼得到的。其具體操作要根據前面的pooling的方法,因為下一層的pooling層的每個節點由l層的多個節點共同計算得出,pooling層每個節點的誤差敏感值也是由卷積層中多個節點的誤差敏感值共同產生的,常見的取樣方式有最大池化與平均池化兩種。
a)若前面使用mean-pooling方法,則將下一層的誤差項除以下一層所用的濾波器的大小。假如下一層的濾波器的大小為k*k,則:
mean-pooling時的unsample操作可以使用matalb中的函式kron()來實現,因為是採用的矩陣kronecker乘積。c=kron(a, b)表示的是矩陣b分別與矩陣a中每個元素相乘,然後將相乘的結果放在c中對應的位置。
b)若前面使用max-pooling方法,則將需要記錄前向傳播過程中pooling區域中最大值的位置,然後判斷當前的結點是否在最大位置上,若在最大位置上則直接將當前的下一層的誤差值賦值過來即可,否則其值賦0。也就是說原convolution區塊中輸出最大值的那個neuron進行反向傳播,其他neuron對權值更新的貢獻算做0。
有了上面了誤差損失項,現在我們開始計算損失函式對基的偏導數和對權向量的偏導數(也就是所謂的梯度計算):
a)基的偏導數,損失函式對基的偏導數為:
b)權值的變化量,損失函式對權值的偏導數為:
對於取樣層,其輸出值計算公式為:
其中down(xj)為神經元j的下取樣。
在這裡我們向上面卷積層一樣,需要先計算出誤差項,然後通過誤差項就可以計算得到其他權值和偏置。
由於取樣層的下一層為卷積層,取樣層的每個節點可能被卷積多次。假如當前的取樣層為第l層,我們需要計算第j個結點的神經元的誤差,則我們首先需要找到第l+1層中哪些神經元用到過結點j,這需要我們在將l層卷積到l+1層的時候儲存神經元的對映過程,因為在計算反向傳播誤差時需要用到。先假設第l+1層中用到結點j的神經元的集合個數為m,
則第l層的誤差項為:
現在我們可以很輕鬆的對訓練偏置和位移偏置的導數:
主要參考文獻:
網路程式設計深入淺出
不為人知的網路程式設計 一 tcp協議中的疑難雜症 上篇 不為人知的網路程式設計 二 tcp協議中的疑難雜症 下篇 不為人知的網路程式設計 三 關閉tcp連線時為什麼會time wait close wait 不為人知的網路程式設計 四 深入研究分析tcp的異常關閉 不為人知的網路程式設計 五 ud...
8分鐘帶你深入淺出搞懂NGINXc
nginx是一款輕量級的web伺服器 反向 伺服器,由於它的記憶體占用少,啟動極快,高併發能力強,在網際網路專案中廣泛應用。反向 伺服器?經常聽人說到一些術語,如反向 那麼什麼是反向 什麼又是正向 呢?由於防火牆的原因,我們並不能直接訪問谷歌,那麼我們可以借助vpn來實現,這就是乙個簡單的正向 的例...
淺聊卷積神經網路的發展
卷積神經網路的發展主要是為了解決人類視覺問題,不過現在其它方向也都會使用。發展歷程主要從lenet5 alexnet vgg goolenet resnet等。上世界80年代發明了卷積層,但由於硬體限制無法構建複雜網路,直到後面90年代才開始有實踐。1998年lecun提出卷積層 池化層和完全連線層...