-
1 # 北航秦曾昌
-
2 # 深夜最科技
一些廢話
什麼是深度學習?以下我的理解:深度學習就是利用多層神經網路提取特徵的過程。BP神經網路和卷積神經網路都是深度學習演算法,兩者相比,BP神經網路更簡單,是學習卷積神經網路的基礎,推薦初學者從BP開始學起。近幾年以來,卷積神經網路在計算機視覺、語言識別和自然語言處理等領域大放異彩,目前也有很多非常優秀的卷積神經網路框架,如Torch、TensorFlow、Caffe,它們都集成了現成的工具箱,使用者不用關心具體的細節就能直接呼叫。
我們學習卷積神經網路,絕不僅僅是學習怎麼使用,而是要理解實現原理,並學會如何改進神經網路以提升效能。工具箱雖然好用,但是卻阻斷了我們對卷積神經網路結構和演算法實現的認識。因此我建議真正的學習者不要過多依賴工具箱,而是在理解原理的基礎上自己動手編寫程式碼,經過這樣一個過程相信你對卷積神經網路的認識會達到一個新的高度。本文也將在介紹原理之後為讀者帶來卷積神經網路的python實現。
BP神經網路的侷限性
從理論上來講,BP神經網路幾乎能解決所有深度學習問題,但是在處理複雜問題時,BP神經網路往往會力不從心。前文神經網路的設計以及python實現中用python構建了一個BP神經網路,並實現了對手寫數字的識別,在那個例子中,每個數字樣本是28×28的灰度影象,由於BP神經網路中輸入層只能接收一維的輸入,我們將輸入層和隱藏層的神經元數量分別設定為784和100,兩層之間的權重矩陣大小為100×784,試想如果輸入是500×500大小的影象,權重矩陣的大小將呈指數級增長,將極大增加計算量。
卷積神經網路的重要概念
卷積神經網路的第一個重要概念是區域性感知野:每個神經元只需要對影象的區域性特徵進行感知,然後將這些區域性的特徵進行組合得到圖片的全域性特徵。其實這也是受人類視覺神經系統的啟發,人類在識別影象時,大腦皮層的神經只對區域性的刺激做出反應,說明人類對影象的認知也是從區域性到整體的過程。
卷積神經網路的第二個重要概念是權值共享:卷積神經網路使用卷積操作提取影象中的特徵,同一個卷積核在影象上滑動提取同一種特徵,如果想要提取多個特徵就使用多個卷積核。之所以稱之為“權值共享”,是因為同一個卷積核在影象的多個區域性之間滑動,某一區域性提取的特徵可以用在其他區域,或者說影象的特徵與位置無關。透過權值共享能大大降低神經網路的計算量。
卷積神經網路的第三個重要概念是池化:這個名詞乍聽起來很唬人,其實非常好理解。一言以蔽之,就是對影象進行壓縮處理,具體的操作是將卷積後的影象劃分成若干個區域,取每個區域的最大值或平均值構成新的影象。池化後的影象大小顯著縮小,但是仍保留了原先的特徵。其實這也是對人類視覺神經的模擬,一張圖片即使被壓縮到原來的十分之一大小,也不會影響我們的辨認。
小結
卷積神經網路絕不是一兩篇文章能解釋清楚的,本文只是簡要地介紹了卷積神經網路的基本原理和幾個重要概念。但是因水平有限,有些概念可能並沒有完全解釋清楚(比如卷積和權值共享),相信結合演算法之後會有助於理解。下篇文章將介紹卷積神經網路的具體操作,如卷積、激勵、池化,以及python實現,請保持關注。
回覆列表
卷積神經網路是一種以卷積操作為主的神經網路,常常用於提取影象特徵,可以用作影象分類,語義分割,影象生成等任務中。在實際中,我們想要應用卷積網路來解決一個具體問題,就需要設計出合適的卷積神經網路架構。也就是需要確定出網路模型的超引數,如網路的層數、卷積核大小、卷積核個數等等。
最簡單直接的就是對這些超引數進行單純的網格搜尋(grid search),但是由於搜尋空間很大,這種方法常常需要反覆的試驗和測試效果,以及調參經驗,這就會耗費很多時間。
因此更為常用的方法則是借鑑前人的經驗,對已有的網路架構進行稍加改進來應用於解決新問題。如果想要從頭設計一個網路,也有一些現成的設計經驗和方法以供參考。
1. 選擇卷積神經網路的層數——從較少層數的簡單模型開始測試,逐漸增加網路的深度和複雜度。我們在這裡主要是進行深度的擴充套件,因為試驗證明增加深度比增加寬度效果更好。
2. 加入跨層連結——增加跨層連結不僅使得卷積提取的特徵能夠更好的組合,此外在反向傳播時,跨層連結能夠讓梯度資訊有效的傳遞,從而加速收斂。
3. 卷積核大小的選擇——通常會選取3*3或1*1大小的卷積核,透過堆疊多個3*3大小的卷積可以實現5*5、7*7的卷積效果,同時減少引數。1*1卷積則可以進行特徵的降維。
4. 步長的選擇——一般來說步長為1可以保持卷積之後的尺寸不變,若步長大於1則會進行下采樣(downsample),成倍的減小特徵圖大小;而步長為1/2則是轉置卷積為上取樣(upsample),即成倍的增加捲積圖大小。
5. 池化層的引數的選擇——使用大小為2*2的maxpooling,此外還可以使用全域性池化(global pooling)使得分類輸出不受影象尺寸不同影響。
6. 啟用函式的選取——最常用的就是Relu或者LeakyRelu。
7. Normalization的選擇——Normalization是為了解決層狀網路中出現的Internal Covariate Shift的問題。其中Batch Normalization往往適合於分類問題;Instance Normalization則用於影象生成;還可以使用更為通用的Group Normalization。