1. 程式人生 > >不懂卷積神經網路?別怕,看完這幾張萌圖你就明白了

不懂卷積神經網路?別怕,看完這幾張萌圖你就明白了

這篇文章用最簡明易懂的方式解釋了卷積神經網路(CNN)的基本原理,並繞開了裡面的數學理論。

同時,如果想對從頭開始構建CNN網路之類的問題感興趣,作者推薦去讀《 Artificial Intelligence for Humans Volume 3: Deep Learning and Neural Networks》中第10章節的內容。

不多說了,開始CNN之旅——

網路結構

CNN的模型通常建立在前饋神經網路模型之上,它的結構你也應該不陌生。不同是的,“隱藏層”將被以下這些層取代:

  • 卷積層(Convolutional Layers)
  • 池化層(Pooling Layers)
  • 全連線層(稠密層,Dense Layers)

結構類似下圖:

 

 

卷積

在此階段,輸入影象被一個grid掃描,並作為輸入傳遞到網路。之後,這個網路將一層卷積層應用於輸入的影象,將它分割成包含3張影象的三維立方體結構。這3三張影象個框架分別呈現原圖的紅色、綠色和藍色資訊。

隨後,它將卷積濾波器(也稱神經元)應用到影象中,和用PhotoShop中的濾鏡突出某些特徵相似。例如在動畫片《Doc And Mharti》中,用羅伯茨交叉邊緣增強濾波器處理過的效果如下圖所示:

 

 

△ 原圖

 

 

△ 處理後

可以想象,擁有100多個不同濾波器的神經網路篩選複雜特徵的能力有多強大,這將大大助力它識別現實世界中事物。一旦神經網路已經將卷積濾波器應用到影象中,我們就能得到特徵/啟用圖。

特徵圖譜會被指定區域內的特定神經元啟用,比如我們將邊緣檢測濾波器新增到下面左圖中,則它的啟用圖如右圖所示:

 

 

△ 這些點代表0的行(表明這些區域可能是邊緣)。在二維陣列中,“30”的值表明影象區域存在邊緣的可能性很高

啟用層

當我們有了啟用圖,就能在其中讓啟用函式大顯身手了,我們用研究人員的首選函式——ReLU啟用函式(修正線性單元)舉個例子。然而,一些研究人員仍然認為用Sigmoid函式或雙曲切線能得到提供最佳的訓練結果,但我不這麼認為。

使用啟用層是在系統中引入非線性,這樣可以提高輸入和輸出的一般性。ReLU(x)函式只返回max(0、x)或簡單地返回啟用圖中的負權值。

池化層

之後的最佳做法通常是在特徵圖中應用最大池化(或任何其他型別的池)。應用最大池化層的原理是掃描小型grid中的影象,用一個包含給定grid中最高值的單個單元替換每個grid:

 

 

這樣做的重要原因之一是,一旦我們知道給定特徵在一個給定的輸入區域,我們可以忽略特徵的確切位置將資料普遍化,減少過擬合。舉個例子,即使訓練精度達到99%,但拿到沒見過的新資料上測試時,它的精確度也只有50%。

輸出層

最大池化層後我們講講剩下的另一個啟用圖,這是傳遞給全連線網路的一部分資訊。它包含一個全連線層,將上一層中每個神經元的輸出簡單對映到全連線層的一個神經元上,並將softmax函式應用到輸出中,就是和我們之前提到的ReLU函式類似的啟用函式。

因為我們將用神經網路將圖片分類,因此這裡使用了softmax函式。softmax輸出返回列表的概率求和為1,每個概率代表給定影象屬於特定輸出類的概率。但後來涉及到影象預測和修復任務時,線性啟用函式的效果就比較好了。

值得注意的是,講到這裡我們只考慮了單卷積層和單池層的簡單情況,如果要實現最佳精度通常需要它們多層堆疊。經過每個完整的迭代後,通過網路反向根據計算損失更新權重。

原文地址:https://authomaton.blogspot.co.uk/2017/10/machine-learning-but-funner-02.html