天天看點

CNN反向傳播和普通神經網絡的聯系和比較BP神經網絡反向傳播CNN反向傳播

BP神經網絡反向傳播

反向傳播是BP神經網絡的特點,在之前的部落格中已經粗略介紹了BP神經元以及反向傳播的特點,對反向傳播用較為直覺圖示解釋。

本部落格将重點介紹其反向傳播的傳播過程。

首先明确概念,反向傳播就是得到整個網絡的輸出對每個門單元的梯度的過程。

舉例說明, f(x1,x2,x3,x4)=(max(x1,x2)+x3)∗x4 f ( x 1 , x 2 , x 3 , x 4 ) = ( m a x ( x 1 , x 2 ) + x 3 ) ∗ x 4

那麼, dfdx1 d f d x 1 , dfdx2 d f d x 2 , dfdx3 d f d x 3 , dfdx4 d f d x 4 如何計算,含義是什麼?

1.如果 x1>x2 x 1 > x 2 , 那麼 dfdx1=x4 d f d x 1 = x 4 ,反之為0,也就是說如果 x1>x2 x 1 > x 2 ,那麼 x1 x 1 對輸出有影響,反之沒影響

2.如果 x2>x1 x 2 > x 1 , 那麼 dfdx2=x4 d f d x 2 = x 4 ,反之為0,含義與 x1 x 1 相同

3. dfdx3=x4 d f d x 3 = x 4 ,這說明 x3 x 3 的變化對整個輸出的影響與 x4 x 4 成正比

4. dfdx4=max(x1,x2)+x3 d f d x 4 = m a x ( x 1 , x 2 ) + x 3 ,這說明 x4 x 4 的變化對整個輸出的影響與 max(x1,x2)+x3 m a x ( x 1 , x 2 ) + x 3 成正比

其次,總結加法,乘法,最大值操作對梯度的作用。

1 加法門單元把輸出的梯度相等地分發給它所有的輸入

2 取最大值門單元對梯度做路由

3 乘法門單元是互相交換輸入值

根據以上方法計算梯度,我們就可以知道,應該改變哪幾個變量,才能使整個網絡的loss function值最小,這也就完成了反向傳播的過程

上述計算的梯度,我們可以借助雅可比矩陣(jacobi matrix) 存儲,雅可比矩陣的形式如下:

⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢∂y1∂x1∂y2∂x1⋮∂yn∂x1∂y1∂x2∂y2∂x2⋮∂yn∂x2⋯⋯⋱⋯∂y1∂xn∂y2∂xn⋮∂yn∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥ [ ∂ y 1 ∂ x 1 ∂ y 1 ∂ x 2 ⋯ ∂ y 1 ∂ x n ∂ y 2 ∂ x 1 ∂ y 2 ∂ x 2 ⋯ ∂ y 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ y n ∂ x 1 ∂ y n ∂ x 2 ⋯ ∂ y n ∂ x n ]

舉個例子,如果輸入 x x 為4096維向量,f=max(x,0)f=max(x,0)

1.那麼雅可比矩陣的尺寸?

4096∗4096 4096 ∗ 4096

2.這個雅可比矩陣是怎樣的?

隻有對角線上有值,其餘為0,并且如果 xi x i 小于0,那麼雅可比矩陣第i行i列的值也為0,如果 xi x i 大于0,那麼雅可比矩陣第i行i列的值為1

CNN反向傳播

有了上面的讨論之後,CNN的反向傳播就容易了解了很多,這裡我們主要讨論卷積層和pooling層的反向傳播。

卷積層

下面的圖檔引自CNN的反向傳播

CNN反向傳播和普通神經網絡的聯系和比較BP神經網絡反向傳播CNN反向傳播

事實上,卷積層跟普通的全連接配接層的不同之處就在于參數的共享,也就是說,并不是每一個輸入像素所對應的權重都不同,這主要是為了減少在圖像領域參數過多導緻的過拟合現象。而參數共享之是以可以得到很好的效果,與圖像的局部相關性有關,某一個位置的像素可能隻與周圍一定範圍内的像素相關,與距離很遠的像素關系不大。

是以基于上述分析以及對于bp鍊式法則的了解,我們可以定義後一層的誤差為 lossl l o s s l ,其中 l l 表示層數。進而求前一層的誤差lossl−1lossl−1,以及權重的導數 dfdwl d f d w l ,以及偏置的導數 dfdbl d f d b l 。

首先我們來計算誤差 lossl−1 l o s s l − 1 :

lossl−1=lossl.∗dzldal−1.∗σ′(zl−1) l o s s l − 1 = l o s s l . ∗ d z l d a l − 1 . ∗ σ ′ ( z l − 1 )

其中, zl z l 表示第 l l 層的輸入,al−1al−1表示第 l−1 l − 1 層輸出,那麼這個問題就轉換為,計算 dzldal−1 d z l d a l − 1

以上圖為例,我們計算左上角位置 (0,0) ( 0 , 0 ) 的導數,因為這個像素隻與粉色權重相乘,是以它的導數就是粉色權重。位置 (0,1) ( 0 , 1 ) 的導數,在卷積核的滑動過程中會分别與綠色權重和粉色權重相連,是以,它的導數包括了這兩部分。如果用公式來表示上述過程:

lossl−1=lossl.∗rot180(Wl).∗σ′(zl−1) l o s s l − 1 = l o s s l . ∗ r o t 180 ( W l ) . ∗ σ ′ ( z l − 1 )

權重的導數 dfdwl d f d w l ,以及偏置的導數 dfdbl d f d b l 就很容易計算了,分别為 al−1∗lossl a l − 1 ∗ l o s s l 以及 lossl l o s s l

pooling層

pooling層了解起來就更為簡單,将之前卷積層的計算公式照搬下來, dzldal−1 d z l d a l − 1 了解為對 lossl l o s s l 上采樣之後求導。

lossl−1=lossl.∗dzldal−1.∗σ′(zl−1) l o s s l − 1 = l o s s l . ∗ d z l d a l − 1 . ∗ σ ′ ( z l − 1 )

那麼這個上采樣過程就分為兩種,一種是average,一種是max。在average的計算中,将 lossl l o s s l 平分給每個位置,而max時,隻把 lossl l o s s l 放在最大位置即可,其他與卷積的計算相同

繼續閱讀