這篇文章用最簡明易懂的方式解釋了卷積神經網絡(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
— 完 —