一文讓你入門CNN,附3份深度學習視訊資源

機器學習演算法與Python學習發表於2018-03-10
CNN簡介
文末附三份深度學習視訊資源
後臺回覆關鍵詞(
20180310

目錄:

  1. 一些視訊資源和文章

  2. CNN簡介

  3. 影象即四維張量?

  4. 卷積的定義

  5. CNN如何工作

  6. 最大池化與降取樣

  7. 交流層

  8. 一些資源


卷積網路對影象進行物體辨識,可識別人臉、人類個體、道路標誌、茄子、鴨嘴獸以及視覺資料中諸多其他方面的內容。卷積網路與運用光學字元辨識進行的文字分析有重合之處,但也可用於對離散文字單元以及聲音形式的文字進行分析。


卷積網路(ConvNets)在影象辨識上的效能,是如今全球對深度學習產生興趣的重要原因。卷積網路正推動機器視覺的大幅進步,在包括自動駕駛汽車、機器人、無人機和對視覺障礙人士的診治方面,均具有顯而易見的應用價值。


影象即四維張量?

卷積網路採集影象,並將之處理為張量。張量是具有附加維度的數字矩陣。由於難以對張量進行形象描述,以下將通過類比進行解釋。標量是普通數字,比如7;向量是一串數字(例如:[7,8,9]);而矩陣是像電子表格一樣,包含多個行列的數字矩形網格。從幾何學角度來說,如果標量是零維定點,那麼向量就是一維直線,矩陣是二維平面,一堆矩陣就是三維立方體。當這些矩陣的每個元素都附著大量的特徵對映圖時,便進入了四維空間,下面是一個2x2矩陣示例:

[ 1, 2 ][ 5, 8 ]

張量涵括了二維平面以上的維度。陣列按立方體排列的三維張量很容易想象。所示為水平呈現的2x3x2張量(想象各二元陣列的底元素沿Z軸延伸以直觀把握三維陣列的命名原因):

640?wx_fmt=png&wxfrom=5&wx_lazy=1

上述張量可以用程式碼表示為:[[[2,3],[3,5],[4,7]],[[3,4],[4,6],[5,8]]].請見示意圖:

640?wx_fmt=gif

換言之,張量的形成原理為陣列巢狀陣列。這種巢狀可以無限持續下去,形成遠超我們空間想象所能企及的、任意數量的維度。四維張量,即是用巢狀層次更深的陣列取代上述各標量。卷積網路對四維張量的處理如下所示(請注意巢狀陣列)。

640?wx_fmt=gif

Python Numpy中NDArray和 “張量” 同義互換使用。張量的維度(1,2,3...n)稱為“階”,也就是說,第五階張量具有五個維度。


影象的寬度和高度很容易理解。由於顏色的編碼方式,必須有一個“深度”。例如,根據紅-綠-藍(RGB)編碼,可生成三層深度的影象。每一層也叫作一個“通道”。通過卷積,只需根據時間本身的脈絡即可生成存在於第四維的一堆特徵對映圖(見下文詳述)。(所謂特徵,即影象的細節資訊,如直線或曲線等。卷積網路為特徵建立對映圖。)卷積網路將影象按照四維體而非二維面進行處理。上述概念將在下文深入闡述。


卷積的定義

英文中的 to convolve 詞源為拉丁文 convolvere,意為“卷在一起”。從數學角度說,卷積是指用來計算一個函式通過另一個函式時,兩個函式有多少重疊的積分。卷積可以視為通過相乘的方式將兩個函式進行混合。

640?wx_fmt=gif

取自:Mathworld. "The green curve shows the convolution of the blue and red curves as a function of t, the position indicated by the vertical green line. The gray region indicates the product g(tau)f(t-tau) as a function of t, so its area as a function of t is precisely the convolution."


設想在圖表中間有一條既高且窄的鐘形曲線。曲線下的區域是積分。設想該曲線附近有第二條較短較寬的鐘形曲線從圖表左側向右側緩慢漂移。這兩個函式沿X軸各點的重疊部分之積,即是其的卷積。所以在一定意義上,兩個函式是被“卷在了一起”。


靜態的底層函式是得到分析的輸入影象,而動態的另一個函式被稱為過濾器,因為該函式會獲取影象的訊號。兩個函式通過乘法產生聯絡。若想以矩陣而非鐘形曲線的方式對卷積進行想象,請見標題“卷積演示”下Andrej Karpathy的極佳動畫演示。


我們還需理解,在卷積網路中,一張影象需經過多個過濾器的掃描,每個過濾器獲取一個不同的訊號。可以想象卷積網路中較早的一層在經過水平線過濾器、垂直線過濾器和對角線過濾器的掃描後,建立了影象邊緣的對映圖。


卷積網路將這些過濾器獲取的影象特徵空間片段逐一製成圖譜;也就是說,卷積網路為特徵出現的各處均建立一張對映圖。通過研究特徵空間的不同比例,卷積網路可以輕易構建可擴縮且穩健的特徵工程。(請注意,卷積網路分析影象的方式不同於RBM。RBM將各影象視為整體進行特徵的重建和識別,而卷積網路對影象片段,亦即“特徵對映圖”進行分析。)


因此,卷積網路執行的是一種搜尋。想象有小型放大鏡於較大的影象上從左向右滑動,一遍後再從左邊重新開始(如打字機一般)。舉例說,該移動視窗僅能識別一截短垂直線。三個暗畫素相互堆疊。移動視窗將“垂直線辨識”過濾器在影象的實際畫素上進行移動,以尋求匹配。


每次成功的匹配將被繪製於該視覺元素特定的特徵空間裡。在該空間裡,每條垂直線匹配的位置都會得到完整記錄,類似鳥類觀測員在地圖上將最近觀測到大藍鷺的地理位置用大頭針進行標記。卷積網路需要在單一影象上執行很多、很多次搜尋——無論是水平線,還是對角線,有多少待查的視覺元素,就需要搜尋多少次。


卷積網路在輸入時,不止僅卷積這項操作。


在經過卷積層處理後,輸入資訊會經過一次非線性轉換,如tanh或者 rectified linear 單元。如此,可以將輸入值壓縮至-1到1之間。


CNN如何執行

首先,卷積網路認知影象的方式不同於人類。因此,在影象被卷積網路採集、處理時,需要以不同方式思考其含義。


卷積網路將影象視為體,也即三維物體,而非僅用寬度和高度測量的平面。這是因為,彩色數字影象具有紅-綠-藍(RGB)編碼;通過將這三色混合,生成人類肉眼可見的色譜。卷積網路將這些影象作為彼此獨立、逐層堆疊的三層色彩進行收集。


故而,卷積網路以矩形接收正常色彩的影象。這一矩形的寬度和高度由其畫素點進行衡量,深度則包含三層,每層代表RGB中的一個字母。這些深度層被稱為通道。

我們以輸入量和輸出量來描述經過卷積網路處理的影象,在數學中以多維矩陣表示為:30x30x3。每一層的維度會發生變化,原因詳見下文。


需要特別注意影象體各維度的精確測量結果,因為這些結果是用來處理影象的線性代數運算的基礎。


對影象的各畫素來說,R、G、B的強度將會以數字進行表示。該數字將是三個堆疊二維矩陣之一的元素。影象體由這些二維矩陣一起構成。


這些數字是輸入卷積網路的最初原始感官特徵,卷積網路意在上述數字中尋找顯著訊號,從而更精確地對影象進行分類。(就像我們討論過的其他前饋網路一樣。)


卷積網路並非對畫素進行逐個處理,而是將包含多畫素的方形片塊經掃描進行處理。該過濾器是同樣方形的矩陣,尺寸小於影象,與片塊等大,也可稱為。熟悉支援向量機的讀者對此不會陌生。這一過濾器的工作是在畫素間尋找圖案。

640?wx_fmt=gif

感謝Andrej Karpathy提供這一極佳的動畫演示。


設想有兩個矩陣,一個30x30,另一個3x3。也就是說,過濾器覆蓋了影象通道表面積的十分之一。


我們使用這塊影象通道得到過濾器的點積。如果兩個矩陣在相同位置均具有較高的值,則點積輸出會很高。反之,則輸出會很低。如此,通過一個單值(即點積輸出)便可以確定底層影象的畫素圖案是否符合過濾器所表示的畫素圖案。


設想過濾器表示的是一條水平線,其中第二行的值較高,第一、三行的值較低。現從底層影象左上角開始,逐步在影象上移動過濾器直至到達右上角。移動的幅度稱為步幅。可每次以一列為單位向右移動過濾器,也可選擇更大的步幅。


在每一步獲取一個點積,並將點積結果置於被稱為啟用對映圖的第三個矩陣中。啟用對映圖上的寬度(或列數)與過濾器在底層影象上移動的步數一致。因為步幅越大,步數越小,所以步幅大則啟用對映圖小。這點之所以重要,是因為卷積網路在各層處理並生成的矩陣的尺寸,與計算成本及所需時間是呈正比的。步幅較大,則所需時間和計算量較小。


置於前三行上的過濾器將經過這三行,而後再經過影象上的第4~6行。若步幅為三,那麼生成的點積矩陣為10x10。代表水平線的相同過濾器也可用於底層影象的所有三個通道,亦即R、G和B。三個10x10的啟用對映圖可以疊加,因此底層影象三個通道上水平線的總體啟用對映圖也是10x10。


由於影象上不同指向的線非常多,而且影象包含許多不同的形狀和畫素圖案,因此需要使用其他過濾器掃描底層影象,以搜尋這些圖案。舉例說,可以在畫素中搜尋96種不同圖案。這96種圖案可構成96張啟用對映圖,生成10x10x96的新體。在下圖中,我們對輸入影象、核心和輸出的啟用對映圖重新作了標明。

640?wx_fmt=png

我們剛才描述的即是卷積。可以把卷積想象為訊號處理中的一種奇特乘法。也可將兩個矩陣生成點積想象為兩個函式。影象就是底層函式,而過濾器就是在其上“捲過”的函式。

640?wx_fmt=gif

影象的主要問題在於其高維度,原因是對高維度的處理時間和運算能力成本很高。卷積網路就是為了通過各種方式降低影象的維度而設計的。過濾器步幅即是減少維度的一種方法,另一種方法是降取樣。

最大池化與降取樣

卷積網路的下一層有三個名稱:最大池化、降取樣和二次抽樣。如卷積的方法一樣,將啟用對映圖每次一個片塊地輸入降取樣層。最大池化僅取影象一個片塊的最大值,將之置於存有其他片塊最大值的矩陣中,並放棄啟用對映圖中所載的其他資訊。

640?wx_fmt=png

僅保留影象中與各特徵(最大值)相關性最大的位置。這些最大值一起構成了一個較低維度的空間。


這一步驟會損失關於較低值的許多資訊。這也激發了對替代方法的研究。不過,正因為資訊的損失,降取樣也有所需儲存空間和處理過程較少的優勢。


交流層

下圖是另一種顯示典型卷積網路所涉轉換順序的方式。

640?wx_fmt=png

從左至右:

  • 為採集特徵而得到掃描的實際輸入影象。淺灰色矩形是掃描影象的過濾器。

  • 逐層疊堆的啟用對映圖;每一層為一個得到使用的過濾器。較大的矩形是待降取樣的片塊。

  • 通過降取樣壓縮的啟用對映圖。

  • 通過使過濾器掃描首個已被降取樣的對映圖堆而得到的一組新啟用對映圖。

  • 壓縮第二組啟用對映圖的第二次降取樣。

  • 一節點一標記對輸出進行分類的完全連線層。


隨著資訊損失增多,由卷積網路處理的圖案變得更為抽象,與人類肉眼所能識別圖案之間的差異也變得更大。故而,如果隨著卷積網路的深入發展,以致無法簡單地用直覺進行理解,也不必擔心。


一些學習資源

1. 紐約大學教授、Facebook研究主管Yann Lecun對機器視覺任務中常用的卷積網路使用的推動和發展貢獻良多。
http://yann.lecun.com/exdb/publis/pdf/lecun-iscas-10.pdf

2. Andrej Karpathy的史丹佛大學課程講授卷積網路,相當精彩。我們強烈推薦將之作為卷積網路重要概念的入門。(包括Python練習。)
https://cs231n.github.io/

3. 深度學習視訊資源:後臺回覆關鍵詞(20180310)

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png


歡迎分享給他人讓更多的人受益


近期熱文

機器學習彙總,珍藏版!

10個Python面試常問的問題

大福利!Google機器學習零基礎線上課程釋出,免費!有中文版!

長文 | LSTM和迴圈神經網路基礎教程(PDF下載)

加入微信機器學習交流

請新增微信:guodongwe1991

備註姓名-單位-研究方向


廣告、商業合作

請新增微信:guodongwe1991

(備註:商務合作)


相關文章