深度學習基礎課:卷積神經網路與卷積層的前向傳播推導
大家好~本課程為“深度學習基礎班”的線上課程,帶領同學從0開始學習全連線和卷積神經網路,進行數學推導,並且實現可以執行的Demo程式
線上課程資料:
本節課錄影回放1
加QQ群,獲得ppt等資料,與群主交流討論:106047770
本系列文章為線上課程的覆盤,每上完一節課就會同步釋出對應的文章
本課程系列文章可進入索引檢視:
深度學習基礎課系列文章索引
回顧相關課程內容
-
如何使用全連線神經網路識別手寫數字?
- 網路結構是什麼?
為什麼要學習本課
-
全連線神經網路用於影象識別任務有什麼問題?
-
卷積神經網路是怎樣解決這些問題的?
-
Relu啟用函式是什麼?
-
如何推導卷積層的前向傳播?
主問題:卷積神經網路是什麼?
為什麼引入卷積神經網路?
- 全連線神經網路用於影象識別任務有什麼問題?
答:
1、引數數量太多
考慮一個輸入10001000畫素的圖片,輸入層有10001000=100萬節點。假設第一個隱藏層有100個節點,那麼僅這一層就有(10001000+1)100=1億引數!
而且影象只擴大一點,引數數量就會多很多,因此它的擴充套件性很差。
2、沒有利用畫素之間的位置資訊
對於影象識別任務來說,每個畫素和其周圍畫素的聯絡是比較緊密的,和離得很遠的畫素的聯絡可能就很小了。如果一個神經元和上一層所有神經元相連,那麼就相當於對於一個畫素來說,把影象的所有畫素都等同看待,這不符合前面的假設。當我們完成每個連線權重的學習之後,最終可能會發現,有大量的權重,它們的值都是很小的(也就是這些連線其實無關緊要)。努力學習大量並不重要的權重,這樣的學習必將是非常低效的。
3、網路層數限制
我們知道網路層數越多其表達能力越強,但是通過梯度下降方法訓練深度全連線神經網路很困難,因為全連線神經網路的梯度很難傳遞超過3層。因此,我們不可能得到一個很深的全連線神經網路,也就限制了它的能力。
- 卷積神經網路是怎樣解決這些問題的?
答:
1、區域性連線
這個是最容易想到的,每個神經元不再和上一層的所有神經元相連,而只和一小部分神經元相連。這樣就減少了很多引數。
2、權值共享
一組連線可以共享同一個權重,而不是每個連線有一個不同的權重,這樣又減少了很多引數。
3、下采樣
可以使用池化(Pooling)來減少每層的樣本數,進一步減少引數數量,同時還可以提升模型的魯棒性。
主問題:卷積神經網路是什麼?
-
如圖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啟用函式
- 請實現Relu啟用函式
答:待實現的程式碼為:ReluActivator,實現後的程式碼為:ReluActivator_answer
主問題:如何推導卷積層的前向傳播?
-
假設有一個55的影象,使用一個33的filter進行卷積,想得到一個3*3的Feature Map,如下圖所示:
-
使用下列公式計算卷積:
-
\(a_{0,0}=?\)
答: -
\(a_{0,1}=?\)
答: -
可以依次計算出Feature Map中所有元素的值。下面的動畫顯示了整個Feature Map的計算過程: