一文讓你入門CNN,附3份深度學習視頻資源
CNN簡介
文末附三份深度學習視頻資源
後台回復關鍵詞(
20180310
)
目錄:
一些視頻資源和文章
CNN簡介
圖像即四維張量?
卷積的定義
CNN如何工作
最大池化與降採樣
交流層
一些資源
卷積網路對圖像進行物體辨識,可識別人臉、人類個體、道路標誌、茄子、鴨嘴獸以及視覺數據中諸多其他方面的內容。卷積網路與運用光學字元辨識進行的文本分析有重合之處,但也可用於對離散文本單元以及聲音形式的文本進行分析。
卷積網路(ConvNets)在圖像辨識上的效能,是如今全球對深度學習產生興趣的重要原因。卷積網路正推動機器視覺的大幅進步,在包括自動駕駛汽車、機器人、無人機和對視覺障礙人士的診治方面,均具有顯而易見的應用價值。
圖像即四維張量?
卷積網路採集圖像,並將之處理為張量。張量是具有附加維度的數字矩陣。由於難以對張量進行形象描述,以下將通過類比進行解釋。標量是普通數字,比如7;矢量是一串數字(例如:[7,8,9]);而矩陣是像電子表格一樣,包含多個行列的數字矩形網格。從幾何學角度來說,如果標量是零維定點,那麼矢量就是一維直線,矩陣是二維平面,一堆矩陣就是三維立方體。當這些矩陣的每個元素都附著大量的特徵映射圖時,便進入了四維空間,下面是一個2x2矩陣示例:
[ 1, 2 ][ 5, 8 ]
張量涵括了二維平面以上的維度。數組按立方體排列的三維張量很容易想像。所示為水平呈現的2x3x2張量(想像各二元數組的底元素沿Z軸延伸以直觀把握三維數組的命名原因):
上述張量可以用代碼表示為:[[[2,3],[3,5],[4,7]],[[3,4],[4,6],[5,8]]].請見示意圖:
換言之,張量的形成原理為數組嵌套數組。這種嵌套可以無限持續下去,形成遠超我們空間想像所能企及的、任意數量的維度。四維張量,即是用嵌套層次更深的數組取代上述各標量。卷積網路對四維張量的處理如下所示(請注意嵌套數組)。
Python Numpy中NDArray和 「張量」 同義互換使用。張量的維度(1,2,3...n)稱為「階」,也就是說,第五階張量具有五個維度。
圖像的寬度和高度很容易理解。由於顏色的編碼方式,必須有一個「深度」。例如,根據紅-綠-藍(RGB)編碼,可生成三層深度的圖像。每一層也叫作一個「通道」。通過卷積,只需根據時間本身的脈絡即可生成存在於第四維的一堆特徵映射圖(見下文詳述)。(所謂特徵,即圖像的細節信息,如直線或曲線等。卷積網路為特徵創建映射圖。)卷積網路將圖像按照四維體而非二維面進行處理。上述概念將在下文深入闡述。
卷積的定義
英文中的 to convolve 詞源為拉丁文 convolvere,意為「卷在一起」。從數學角度說,卷積是指用來計算一個函數通過另一個函數時,兩個函數有多少重疊的積分。卷積可以視為通過相乘的方式將兩個函數進行混合。
取自: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的強度將會以數字進行表示。該數字將是三個堆疊二維矩陣之一的元素。圖像體由這些二維矩陣一起構成。
這些數字是輸入卷積網路的最初原始感官特徵,卷積網路意在上述數字中尋找顯著信號,從而更精確地對圖像進行分類。(就像我們討論過的其他前饋網路一樣。)
卷積網路並非對像素進行逐個處理,而是將包含多像素的方形片塊經掃描進行處理。該過濾器是同樣方形的矩陣,尺寸小於圖像,與片塊等大,也可稱為。熟悉支持向量機的讀者對此不會陌生。這一過濾器的工作是在像素間尋找圖案。
感謝Andrej Karpathy提供這一極佳的動畫演示。
設想有兩個矩陣,一個30x30,另一個3x3。也就是說,過濾器覆蓋了圖像通道表面積的十分之一。
我們使用這塊圖像通道得到過濾器的點積。如果兩個矩陣在相同位置均具有較高的值,則點積輸出會很高。反之,則輸出會很低。如此,通過一個單值(即點積輸出)便可以確定底層圖像的像素圖案是否符合過濾器所表示的像素圖案。
設想過濾器表示的是一條水平線,其中第二行的值較高,第一、三行的值較低。現從底層圖像左上角開始,逐步在圖像上移動過濾器直至到達右上角。移動的幅度稱為步幅。可每次以一列為單位向右移動過濾器,也可選擇更大的步幅。
在每一步獲取一個點積,並將點積結果置於被稱為激活映射圖的第三個矩陣中。激活映射圖上的寬度(或列數)與過濾器在底層圖像上移動的步數一致。因為步幅越大,步數越小,所以步幅大則激活映射圖小。這點之所以重要,是因為卷積網路在各層處理並生成的矩陣的尺寸,與計算成本及所需時間是呈正比的。步幅較大,則所需時間和計算量較小。
置於前三行上的過濾器將經過這三行,而後再經過圖像上的第4~6行。若步幅為三,那麼生成的點積矩陣為10x10。代表水平線的相同過濾器也可用於底層圖像的所有三個通道,亦即R、G和B。三個10x10的激活映射圖可以疊加,因此底層圖像三個通道上水平線的總體激活映射圖也是10x10。
由於圖像上不同指向的線非常多,而且圖像包含許多不同的形狀和像素圖案,因此需要使用其他過濾器掃描底層圖像,以搜索這些圖案。舉例說,可以在像素中搜索96種不同圖案。這96種圖案可構成96張激活映射圖,生成10x10x96的新體。在下圖中,我們對輸入圖像、內核和輸出的激活映射圖重新作了標明。
我們剛才描述的即是卷積。可以把卷積想像為信號處理中的一種奇特乘法。也可將兩個矩陣生成點積想像為兩個函數。圖像就是底層函數,而過濾器就是在其上「卷過」的函數。
圖像的主要問題在於其高維度,原因是對高維度的處理時間和運算能力成本很高。卷積網路就是為了通過各種方式降低圖像的維度而設計的。過濾器步幅即是減少維度的一種方法,另一種方法是降採樣。
最大池化與降採樣
卷積網路的下一層有三個名稱:最大池化、降採樣和二次抽樣。如卷積的方法一樣,將激活映射圖每次一個片塊地輸入降採樣層。最大池化僅取圖像一個片塊的最大值,將之置於存有其他片塊最大值的矩陣中,並放棄激活映射圖中所載的其他信息。
僅保留圖像中與各特徵(最大值)相關性最大的位置。這些最大值一起構成了一個較低維度的空間。
這一步驟會損失關於較低值的許多信息。這也激發了對替代方法的研究。不過,正因為信息的損失,降採樣也有所需存儲空間和處理過程較少的優勢。
交流層
下圖是另一種顯示典型卷積網路所涉轉換順序的方式。
從左至右:
為採集特徵而得到掃描的實際輸入圖像。淺灰色矩形是掃描圖像的過濾器。
逐層疊堆的激活映射圖;每一層為一個得到使用的過濾器。較大的矩形是待降採樣的片塊。
通過降採樣壓縮的激活映射圖。
通過使過濾器掃描首個已被降採樣的映射圖堆而得到的一組新激活映射圖。
壓縮第二組激活映射圖的第二次降採樣。
一節點一標記對輸出進行分類的完全連接層。
隨著信息損失增多,由卷積網路處理的圖案變得更為抽象,與人類肉眼所能識別圖案之間的差異也變得更大。故而,如果隨著卷積網路的深入發展,以致無法簡單地用直覺進行理解,也不必擔心。
一些學習資源
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)
歡迎分享給他人讓更多的人受益
近期熱文
機器學習匯總,珍藏版!
10個Python面試常問的問題
大福利!Google機器學習零基礎在線課程發布,免費!有中文版!
長文 | LSTM和循環神經網路基礎教程(PDF下載)
加入微信機器學習交流
群
請添加微信:guodongwe1991
備註姓名-單位-研究方向
廣告、商業合作
請添加微信:guodongwe1991
(備註:商務合作)

