CNN的一些基本知識,以後有需要可以看看

主要是知乎上的一個,機器之心寫的不錯,容易理解。

from https://www.zhihu.com/question/52668301

作者:機器之心
鏈接:https://www.zhihu.com/question/52668301/answer/131573702
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

第一層——數學部分


CNN 的第一層通常是卷積層(Convolutional Layer)。首先需要了解卷積層的輸入內容是什麼。如上所述,輸入內容爲一個 32 x 32 x 3 的像素值數組。現在,解釋卷積層的最佳方法是想象有一束手電筒光正從圖像的左上角照過。假設手電筒光可以覆蓋 5 x 5 的區域,想象一下手電筒光照過輸入圖像的所有區域。在機器學習術語中,這束手電筒被叫做過濾器(filter,有時候也被稱爲神經元(neuron)或核(kernel)),被照過的區域被稱爲感受野(receptive field)。過濾器同樣也是一個數組(其中的數字被稱作權重或參數)。重點在於過濾器的深度必須與輸入內容的深度相同(這樣才能確保可以進行數學運算),因此過濾器大小爲 5 x 5 x 3。現在,以過濾器所處在的第一個位置爲例,即圖像的左上角。當篩選值在圖像上滑動(卷積運算)時,過濾器中的值會與圖像中的原始像素值相乘(又稱爲計算點積)。這些乘積被加在一起(從數學上來說,一共會有 75 個乘積)。現在你得到了一個數字。切記,該數字只是表示過濾器位於圖片左上角的情況。我們在輸入內容上的每一位置重複該過程。(下一步將是將過濾器右移 1 單元,接着再右移 1 單元,以此類推。)輸入內容上的每一特定位置都會產生一個數字。過濾器滑過所有位置後將得到一個 28 x 28 x 1 的數組,我們稱之爲激活映射(activation map)或特徵映射(feature map)。之所以得到一個 28 x 28 的數組的原因在於,在一張 32 x 32 的輸入圖像上,5 x 5 的過濾器能夠覆蓋到 784 個不同的位置。這 784 個位置可映射爲一個 28 x 28 的數組。


(注意:包括上圖在內的一些圖片來自於 Micheal Nielsen 的 「神經網絡與深度學習( Neural Networks and Deep Learning)」一書。我強烈推薦這本書。這本書可免費在線瀏覽:Neural networks and deep learning


當我們使用兩個而不是一個 5 x 5 x 3 的過濾器時,輸出總量將會變成 28 x 28 x 2。採用的過濾器越多,空間維度( spatial dimensions)保留得也就越好。數學上而言,這就是卷積層上發生的事情。


第一層——高層次角度


不過,從高層次角度而言卷積是如何工作的?每個過濾器可以被看成是特徵標識符( feature identifiers)。這裏的特徵指的是例如直邊緣、原色、曲線之類的東西。想一想所有圖像都共有的一些最簡單的特徵。假設第一組過濾器是 7 x 7 x 3 的曲線檢測器。(在這一節,爲了易於分析,暫且忽略該過濾器的深度爲 3 個單元,只考慮過濾器和圖像的頂層層面。)作爲曲線過濾器,它將有一個像素結構,在曲線形狀旁時會產生更高的數值(切記,我們所討論的過濾器不過是一組數值!)

左圖:過濾器的像素表示;右圖:曲線檢測器過濾器的可視化;對比兩圖可以看到數值和形狀的對應


回到數學角度來看這一過程。當我們將過濾器置於輸入內容的左上角時,它將計算過濾器和這一區域像素值之間的點積。拿一張需要分類的照片爲例,將過濾器放在它的左上角。

素值相乘。切記,我們要做的是將過濾器與圖像的原始像素值相乘。

左圖:感受野的可視化;右圖:感受野的像素表示 * 過濾器的像素表示


簡單來說,如果輸入圖像上某個形狀看起來很像過濾器表示的曲線,那麼所有點積加在一起將會得出一個很大的值!讓我們看看移動過濾器時會發生什麼。

這個值小了很多!這是因爲圖像的這一部分和曲線檢測器過濾器不存在對應。記住,這個卷積層的輸出是一個激活映射(activation map)。因此,在這個帶有一個過濾器卷積的例子裏(當篩選值爲曲線檢測器),激活映射將會顯示出圖像裏最像曲線的區域。在該例子中,28 x 28 x 1 的激活映射的左上角的值爲 6600。高數值意味着很有可能是輸入內容中的曲線激活了過濾器。激活地圖右上角的值將會是 0,因爲輸入內容中沒有任何東西能激活過濾器(更簡單地說,原始圖片中的這一區域沒有任何曲線)。這僅僅是一組檢測右彎曲線的過濾器。還有其它檢測左彎曲線或直線邊緣的過濾器。過濾器越多,激活映射的深度越大,我們對輸入內容的瞭解也就越多。


聲明:我在本小節中描繪的過濾器(filter)只是爲了描述卷積中的數學過程。在下圖中你可以看到訓練後的網絡中第一個卷積層的過濾器的實際可視化。儘管如此,主要觀點仍舊不變。當在輸入內容中尋找特定特徵時,第一層上的過濾器在輸入圖像上進行卷積運算和「激活」(即計算高數值)。


上圖來自於斯坦福大學由 Andrej Karpathy 和 Justin Johnson 授課的 CS 231N 課程,推薦給渴望更深層理解 CNN 的人們:CS231n: Convolutional Neural Networks for Visual Recognition


網絡中的更深處


在傳統卷積神經網絡架構中,卷積層之間還有其它類型的層。我強烈建議有興趣的人閱讀和它們有關的材料,並理解相應的功能和作用;但總的來說,它們提供的非線性和維度保留有助於提高網絡的穩健性(robustness)並控制過擬合。一個典型的 CNN 結構看起來是這樣的:


輸入→卷積→ReLU→卷積→ReLU→池化→ReLU→卷積→ReLU→池化→全連接


我們稍後再來討論關鍵的最後一層,先回顧一下學到了哪些。我們討論了過濾器是如何在第一個卷積層檢測特徵的。它們檢測邊緣和曲線一類的低級特徵。正如想象的那樣,爲了預測出圖片內容的分類,網絡需要識別更高級的特徵,例如手、爪子與耳朵的區別。第一個卷積層的輸出將會是一個 28 x 28 x 3 的數組(假設我們採用三個 5 x 5 x 3 的過濾器)。當我們進入另一卷積層時,第一個卷積層的輸出便是第二個卷積層的輸入。解釋這一點有些困難。第一層的輸入是原始圖像,而第二卷積層的輸入正是第一層輸出的激活映射。也就是說,這一層的輸入大體描繪了低級特徵在原始圖片中的位置。在此基礎上再採用一組過濾器(讓它通過第 2 個卷積層),輸出將是表示了更高級的特徵的激活映射。這類特徵可以是半圓(曲線和直線的組合)或四邊形(幾條直線的組合)。隨着進入網絡越深和經過更多卷積層後,你將得到更爲複雜特徵的激活映射。在網絡的最後,可能會有一些過濾器會在看到手寫筆跡或粉紅物體等時激活。如果你想知道更多關於可視化卷積網絡中過濾器的內容,可以查看 Matt Zeiler 和 Rob Fergus 的一篇討論該問題的頗爲傑出的研究論文。在 YouTube 上,Jason Yosinski 有一段視頻十分視覺化地呈現了這一過程(如下)。有趣的是,越深入網絡,過濾器的感受野越大,意味着它們能夠處理更大範圍的原始輸入內容(或者說它們可以對更大區域的像素空間產生反應)。


完全連接層


檢測高級特徵之後,網絡最後的完全連接層就更是錦上添花了。簡單地說,這一層處理輸入內容(該輸入可能是卷積層、ReLU 層或是池化層的輸出)後會輸出一個 N 維向量,N 是該程序必須選擇的分類數量。例如,如果你想得到一個數字分類程序,如果有 10 個數字,N 就等於 10。這個 N 維向量中的每一數字都代表某一特定類別的概率。例如,如果某一數字分類程序的結果矢量是 [0 .1 .1 .75 0 0 0 0 0 .05],則代表該圖片有 10% 的概率是 1、10% 的概率是 2、75% 的概率是 3、還有 5% 的概率是 9(注:還有其他表現輸出的方式,這裏只展示了 softmax 的方法)。完全連接層觀察上一層的輸出(其表示了更高級特徵的激活映射)並確定這些特徵與哪一分類最爲吻合。例如,如果該程序預測某一圖像的內容爲狗,那麼激活映射中的高數值便會代表一些爪子或四條腿之類的高級特徵。同樣地,如果程序測定某一圖片的內容爲鳥,激活映射中的高數值便會代表諸如翅膀或鳥喙之類的高級特徵。大體上來說,完全連接層觀察高級特徵和哪一分類最爲吻合和擁有怎樣的特定權重,因此當計算出權重與先前層之間的點積後,你將得到不同分類的正確概率。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章