1. 程式人生 > 其它 >深度學習基礎課:卷積神經網路與卷積層的前向傳播推導

深度學習基礎課:卷積神經網路與卷積層的前向傳播推導

大家好~本課程為“深度學習基礎班”的線上課程,帶領同學從0開始學習全連線和卷積神經網路,進行數學推導,並且實現可以執行的Demo程式

線上課程資料:
本節課錄影回放1

加QQ群,獲得ppt等資料,與群主交流討論:106047770

本系列文章為線上課程的覆盤,每上完一節課就會同步釋出對應的文章

本課程系列文章可進入索引檢視:
深度學習基礎課系列文章索引

目錄

回顧相關課程內容

  • 如何使用全連線神經網路識別手寫數字?

    • 網路結構是什麼?

為什麼要學習本課

  • 全連線神經網路用於影象識別任務有什麼問題?

  • 卷積神經網路是怎樣解決這些問題的?

  • Relu啟用函式是什麼?

  • 如何推導卷積層的前向傳播?

主問題:卷積神經網路是什麼?

為什麼引入卷積神經網路?

  • 全連線神經網路用於影象識別任務有什麼問題?

答:

1、引數數量太多

考慮一個輸入10001000畫素的圖片,輸入層有10001000=100萬節點。假設第一個隱藏層有100個節點,那麼僅這一層就有(10001000+1)100=1億引數!
而且影象只擴大一點,引數數量就會多很多,因此它的擴充套件性很差。

2、沒有利用畫素之間的位置資訊

對於影象識別任務來說,每個畫素和其周圍畫素的聯絡是比較緊密的,和離得很遠的畫素的聯絡可能就很小了。如果一個神經元和上一層所有神經元相連,那麼就相當於對於一個畫素來說,把影象的所有畫素都等同看待,這不符合前面的假設。當我們完成每個連線權重的學習之後,最終可能會發現,有大量的權重,它們的值都是很小的(也就是這些連線其實無關緊要)。努力學習大量並不重要的權重,這樣的學習必將是非常低效的。

3、網路層數限制

我們知道網路層數越多其表達能力越強,但是通過梯度下降方法訓練深度全連線神經網路很困難,因為全連線神經網路的梯度很難傳遞超過3層。因此,我們不可能得到一個很深的全連線神經網路,也就限制了它的能力。

  • 卷積神經網路是怎樣解決這些問題的?

答:

1、區域性連線

這個是最容易想到的,每個神經元不再和上一層的所有神經元相連,而只和一小部分神經元相連。這樣就減少了很多引數。

2、權值共享

一組連線可以共享同一個權重,而不是每個連線有一個不同的權重,這樣又減少了很多引數。

3、下采樣

可以使用池化(Pooling)來減少每層的樣本數,進一步減少引數數量,同時還可以提升模型的魯棒性。

主問題:卷積神經網路是什麼?

圖1
  • 如圖1所示,一個卷積神經網路由若干卷積層、池化層、全連線層組成

  • 常用架構模式為:INPUT -> [[CONV]N -> POOL?]M -> [FC]*K

  • 也就是N個卷積層疊加,然後(可選)疊加一個池化層,重複這個結構M次,最後疊加K個全連線層

  • 圖1的N、M、K為多少?
    答:N=1, M=2, K=2

  • 與全連線神經網路相比,卷積神經網路有什麼不同?
    全連線神經網路:

  • 什麼是Filter?Filter與卷積層是什麼關係?
    答:Filter是卷積核,是一組引數,用來提取特徵到Feature Map中。Filter的寬度和高度一般是相等的。
    卷積層包含多個Filter

  • Filter的數量與Feature Map的數量有什麼關係?
    答:卷積層包含的Filter的數量和卷積層輸出的Feature Map的數量是相等的,一一對應的

  • 如何理解Feature Map?
    答:Feature Map儲存了Filter提取的特徵。如一個Filter為提取影象邊緣的卷積核,那麼對應的Feature Map就儲存了影象邊緣的特徵

  • 池化層在做什麼?
    答:下采樣,即將Feature Map縮小

  • 全連線層跟Feature Maps如何連線?
    答:全連線層的神經元跟所有的Feature Map的畫素一一對應,如Feature Maps有5個,每個有30個畫素資料,那麼與其連線的全連線層就有150個神經元

  • 請整體描述圖1卷積神經網路的前向傳播過程?

主問題:Relu啟用函式是什麼?

  • Relu的定義是什麼?
    答:\(f(x)=max(0,x)\)

  • 與Sigmoid相比,Relu有什麼優勢?
    答:

1、速度快

2、減輕梯度消失問題

全連線隱藏層的誤差項公式如下,它會乘以啟用函式的導數:

而Sigmoid啟用函式的導數的圖形如下所示:

可知它的導數的最大值為\(\frac{1}{4}\),所以第一個全連線隱藏層的誤差項會至少衰減為原來的\(\frac{1}{4}\),上一個全連線隱藏層的誤差項則至少衰減為原來的\(\frac{1}{16}\),以此類推,導致層數越多越容易出現梯度消失的問題

而Relu的導數為1,所以不會導致誤差項的衰減

3、稀疏性

通過對大腦的研究發現,大腦在工作的時候只有大約5%的神經元是啟用的。有論文聲稱人工神經網路在15%-30%的啟用率時是比較理想的。因為relu函式在輸入小於0時是完全不啟用的,因此可以獲得一個更低的啟用率。

任務:實現Relu啟用函式

主問題:如何推導卷積層的前向傳播?

  • 假設有一個55的影象,使用一個33的filter進行卷積,想得到一個3*3的Feature Map,如下圖所示:

  • 使用下列公式計算卷積:

\[a_{i,j} = f(\sum_{m=0}^2 \sum_{n=0}^2 w_{m,n}x_{i+m,j+n} + w_b) \] \[對影象的每個畫素進行編號,用x_{i,j}表示影象的第i行第j列元素;\\ 對filter的每個權重進行編號,用w_{m,n}來表示第m行第n列權重,用w_b表示filter的偏置項; \\ 對Feature Map的每個元素進行編號,用a_{i,j}表示Feature Map的第i行第j列元素; \\ 用f表示啟用函式 \]
  • \(a_{0,0}=?\)
    答:

  • \(a_{0,1}=?\)
    答:

  • 可以依次計算出Feature Map中所有元素的值。下面的動畫顯示了整個Feature Map的計算過程: