卷積神經網絡(CNN)簡易教程

作者|Renu Khandelwal 編譯|VK 來源|Medium

讓我們先來了解一下我們的大腦是如何識別物體的。我們將學習什麼是CNN, CNN如何利用大腦的啓發進行物體識別,CNN是如何工作的。

讓我們來了解一下我們的大腦是如何識別圖像的

根據諾貝爾獎獲得者Hubel和Wiesel教授的說法,視覺區域V1由簡單細胞和複雜細胞組成。簡單的單元有助於特徵檢測,而複雜的單元則結合了來自小空間鄰域的多個這樣的局部特徵。空間池有助於實現平移不變特徵。

當我們看到一個新的圖像時,我們可以從左到右和從上到下掃描圖像,以瞭解圖像的不同特徵。我們的下一步是結合我們掃描的不同的局部特徵來對圖像進行分類。CNN就是這樣工作的

平移不變特徵是什麼意思?

圖像的不變性意味着,即使圖像旋轉、大小不同或在不同照明下觀看,對象也將被識別爲同一對象。

這有助於對象識別,因爲圖像表示對圖像變換(如平移、旋轉或小變形等)保持不變。

我們使用卷積神經網絡進行圖像識別和分類。

讓我們瞭解什麼是CNN,以及我們如何使用它。

CNN是什麼?

CNN是Convolutional Neural Network卷積神經網絡的縮寫,卷積神經網絡是一種專門用來處理數據的神經網絡,它的輸入形狀類似於二維的矩陣圖像。

CNN通常用於圖像檢測和分類。圖像是二維的像素矩陣,我們在其上運行CNN來識別圖像或對圖像進行分類。識別一個圖像是一個人,還是一輛車,或者只是一個地址上的數字。

和神經網絡一樣,CNN也從大腦中獲取啓發。我們使用Hubel和Wiesel提出的對象識別模型。

卷積是什麼?

卷積是一種數學運算,其中我們有一個輸入I和一個參數核K來產生一個輸出。

讓我們用圖像來解釋。

我們有一個圖像“x”,它是一個具有不同顏色通道(紅色、綠色和藍色RGB)的二維像素矩陣,我們有一個特徵檢測器或核“w”,然後應用數學運算後得到的輸出稱爲特徵圖

這個數學運算有助於計算兩個信號的相似度。

我們可能有一個特徵檢測器或濾波器來識別圖像中的邊緣,所以卷積運算將有助於我們識別圖像中的邊緣。

我們通常假設卷積函數在除存儲值的有限點集外的任何地方都爲零。

I是二維數組,K是核卷積函數

因爲卷積是可交換的,我們可以把上面的方程重新寫一下,如下圖所示。我們這樣做是爲了便於在機器學習中實現,因爲m和n的有效值範圍變化較小。這是大多數神經網絡使用的互相關函數。

以上是互相關函數

那麼,我們如何在CNN中實現它呢?

我們實現它的方式是通過卷積層

卷積層是CNN的核心構件,它有助於特徵檢測。

核K是一組可學習的過濾器,與圖像相比,它在空間上很小,但是可以擴展到整個輸入圖像的深度。

理解這一點的一個簡單方法是,如果你是一名偵探,你在黑暗中看到一幅很大的圖像或一幅畫,你將如何識別圖像?

你將使用你的手電筒和掃描整個圖像。這正是我們在卷積層中所做的。

核K是一個特徵檢測器,它相當於圖像I上的手電筒,我們正在嘗試檢測特徵並創建多個特徵圖來幫助我們識別或分類圖像。

我們有多個特徵探測器,以幫助像邊緣檢測,識別不同的形狀,彎曲或不同的顏色等事情。

這一切是如何運作的?

讓我們取一幅3通道5×5矩陣的圖像(RGB), 3通道3×3的特徵檢測器(RGB),然後以步長爲1來掃描圖像上的特徵檢測器。

當我在圖像上應用特徵檢測時,輸出矩陣或特徵圖的維數是多少?

特徵圖的維數與輸入圖像的大小(W)、特徵檢測器的大小(F)、步長(S)和圖像的填充大小(P)有關

$(W−F+2p)/S + 1$

在我們的例子中,W是輸入圖像的大小,爲5。

F是特徵檢測器接受域大小,在我們的例子中,爲3

步長(S)爲1,圖像上使用的填充大小(P)爲0。

因此,我們的特徵圖維度爲(5-3+0)/1+1=3。

因此特徵圖將是一個3*3的矩陣,有3個通道(RGB)。

下面一步一步進行解釋

我們看到5×5的輸入圖像被簡化爲3×3的特徵圖,通道爲3(RGB)

我們使用多個特徵檢測器來尋找邊緣,我們可以使用特徵檢測器來銳化圖像或模糊圖像。

如果我們不想減少特徵圖的維數,那麼我們可以使用如下所示的填充0

在這種情況下應用相同的公式,我們得到

$(W−F + 2 p) / S + 1 => (5 - 3 +2)/1 + 1= 5$,

現在輸出的尺寸將是5×5,帶有3個顏色通道(RGB)。

讓我們看看這一切是如何運作的

如果我們有一個3×3的特徵檢測器或濾波器,一個偏置單元,那麼我們首先應用如下所示的線性變換

輸出=輸入*權重+偏差

參數個數 = (3 * 3 * 3)+1 = 28

對於100個特徵檢測器或過濾器,參數的數量將是2800。

在每一個線性函數的卷積運算之後,我們應用ReLU激活函數。ReLU激活函數在卷積層中引入了非線性。

它將特徵圖中的所有負像素值替換爲零。

下圖是應用ReLU激活函數後的特徵圖變換。

現在我們已經完成了局部區域的特徵檢測,我們將結合所有這些來自空間鄰域的特徵檢測來構建圖像。

記住你是一個在黑暗中掃描圖像的偵探,你現在已經從左到右、從上到下掃描了圖像。現在我們需要結合所有的特徵來識別圖像

池化

我們現在應用池來獲得平移不變性。

平移的不變性意味着當我們少量改變輸入時,合併的輸出不會改變。這有助於檢測輸入中常見的特徵,如圖像中的邊緣或圖像中的顏色

我們使用最大池函數,它提供了比最小或平均池更好的性能。

當我們使用最大池時,它總結了整個鄰居的輸出。與原來的特徵圖相比,我們現在有更少的單元。

在我們的例子中,我們使用一個2x2的框掃描所有的特徵圖,並找到最大值。

現在我們知道卷積網絡由以下構成

  • 並行的多重卷積,輸出是線性激活函數
  • 卷積層中應用非線性函數ReLU
  • 使用像最大池這樣的池函數來彙總附近位置的統計信息。這有助於“平移不變性”
  • 我們將結果展平,然後將其輸入到全連接神經網絡

下圖是完整的卷積神經網絡

卷積使用了三個重要的思想

  • 稀疏的交互
  • 參數共享
  • 等變表示

稀疏交互或稀疏權值是通過使用小於輸入圖像的核或特徵檢測器來實現的。

如果我們有一個大小爲256 * 256的輸入圖像,那麼就很難檢測到圖像中的邊緣,因爲其可能只佔圖像中像素的一個更小的子集。如果我們使用更小的特徵檢測器,那麼當我們專注於局部特徵識別時,就可以很容易地識別邊緣。

另一個優點是計算輸出所需的操作更少,從而提高了統計效率。

參數共享用於控制CNN中使用的參數或權值的數量。

在傳統的神經網絡中,每個權值只使用一次,但是在CNN中,我們假設如果一個特徵檢測器可以用來計算一個空間位置,那麼它可以用來計算一個不同的空間位置。

當我們在CNN中共享參數時,它減少了需要學習的參數的數量,也減少了計算需求。

等變表示

這意味着目標檢測對光照、位置的變化是不變的,而內部表示對這些變化是等方差的

原文鏈接:https://medium.com/datadriveninvestor/convolutional-neural-network-cnn-simplified-ecafd4ee52c5

歡迎關注磐創AI博客站: http://panchuang.net/

sklearn機器學習中文官方文檔: http://sklearn123.com/

歡迎關注磐創博客資源彙總站: http://docs.panchuang.net/

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