卷積神經網路(CNN)中卷積層與池化層如何進行BP殘差傳遞與參數更新?
卷積層的殘差BP傳導似乎與普通神經網路的傳導方式不完全相同,參數的更新具體是如何進行的?
池化層正向進行池化損失了一些信息(如2*2-&>1),逆向傳導誤差時如何從一個誤差傳導為多個誤差?另外,具體到如Tensorflow,有多個卷積層,第一層卷積得到32個特徵,第二層卷積若64個特徵,第一層到第二層的卷積是如何進行的?是第一層每一個特徵圖卷積對應第二層卷積的兩個特徵?如何保證同一個卷基層每個特徵學習到的是不同的特徵?
最近正式晉陞成TFBoys,對於Pooling的gradient也比較好奇,下面是一些總結:
Pooling Layer常用的就兩種:MaxPooling和AveragePooling1. Average Pooling的bp好算,直接求導可得,就是1/n2. Max Pooling比較有意思,forward的時候需要記錄 每個窗口內部最大元素的位置,然後bp的時候,對於窗口內最大元素的gradient是1,否則是0。原理和ReLu是一樣的。
參考:http://www.slideshare.net/kuwajima/cnnbp對於Conv Layer多個filter,我的理解是這樣的:1.第一層有32個filter,對於下一層就有32個input2.第二層的每一個filter,都會對著32個input進行一遍conv操作,得到32個output,最終的output是這32個output的疊加。參考:computer vision
關於逆向傳播前一個答案已經說清楚了,我說說卷積層。原始圖像是三個通道的話,第一層就是32個三通道的模版,分別對圖像卷積,產生32張圖像輸出。這32張圖形成32通道的輸入傳給下一層。第二層是64個32通道的濾波器,分別對前面一層的輸出進行卷積,產生64張輸出。以此類推。所以第一層的參數個數為 32 x 3 x w x h,而第二層為 64 x 32 x w x h。最後如何保證同一個卷基層每個特徵學習到的是不同的特徵:參數隨機初始化成不同的值。
對於較複雜的網路求導問題,可以將網路一部分摘下來寫成標量的形式再進行求導,你就會對整個網路的求導有一個直觀的認識。
所有網路的操作都可以看成矩陣運算,卷積可以看做兩個矩陣列向量化後求點積。
為了省事,我就畫出來,希望能有所幫助。
要想明白bp過程首先要對CNN前向計算有很好的理解,這裡就簡單闡述網路結構。
這個CNN網路,輸入大小為5*5,輸入的通道有三個。卷積核大小為3*3,卷積核數目為十個。
polling層為max-pooling,pooling後得到的10個神經元再與兩個神經元全連接,最後經過softmax function進行2分類,loss為log-loss。
下面我們要求的是對第一個卷積核的作用於R通道上的卷積操作矩陣中元素W22(三角形)求梯度。
首先假定這個樣本X屬於第2類,則從loss=-logP2,開始反向傳播過程。
空心圓為相關的元素。首先求對P2的梯度,再求對y1與y2的梯度,再分別求yi對前一層第一個空心圓的梯度並加和,再對max pooling操作時,最大的那個元素求梯度(這裡假設為中心的值),然後在輸入X上找到卷積對應的區域(折線圈住的區域),再找到卷積操作時與W22對應的元素X33。這樣就能求得對W22的梯度即loss對最大值的那個元素的梯度乘以X33。對於其他W元素或b元素都是一樣的。
推薦閱讀:
※訓練集準確率接近100%,驗證集準確率80%但是隨著訓練step增加不增也不降。算是過擬合還是欠擬合?
※caffe里的clip gradient是什麼意思?
※GPU對CNN計算的加速原理到底是怎樣的?
※對深度學習的理解達到什麼水平才能應聘大型互聯網公司的機器學習相關崗位?
※深度學習畢設有什麼好的題目?
TAG:機器學習 | 計算機視覺 | 神經網路 | 卷積 | 深度學習DeepLearning |