不懂卷積神經(jīng)網(wǎng)絡(luò)?別怕,看完這幾張萌圖你就明白了!
這篇文章用最簡明易懂的方式解釋了卷積神經(jīng)網(wǎng)絡(luò)(CNN)的基本原理,并繞開了里面的數(shù)學(xué)理論。
同時,如果想對從頭開始構(gòu)建CNN網(wǎng)絡(luò)之類的問題感興趣,作者推薦去讀《 Artificial Intelligence for Humans Volume 3: Deep Learning and Neural Networks》中第10章節(jié)的內(nèi)容。
不多說了,開始CNN之旅——
網(wǎng)絡(luò)結(jié)構(gòu)
CNN的模型通常建立在前饋神經(jīng)網(wǎng)絡(luò)模型之上,它的結(jié)構(gòu)你也應(yīng)該不陌生。不同是的,“隱藏層”將被以下這些層取代:
- 卷積層(Convolutional Layers)
- 池化層(Pooling Layers)
全連接層(稠密層,Dense Layers)
結(jié)構(gòu)類似下圖:
卷積
在此階段,輸入圖像被一個grid掃描,并作為輸入傳遞到網(wǎng)絡(luò)。之后,這個網(wǎng)絡(luò)將一層卷積層應(yīng)用于輸入的圖像,將它分割成包含3張圖像的三維立方體結(jié)構(gòu)。這3三張圖像個框架分別呈現(xiàn)原圖的紅色、綠色和藍(lán)色信息。
隨后,它將卷積濾波器(也稱神經(jīng)元)應(yīng)用到圖像中,和用PhotoShop中的濾鏡突出某些特征相似。例如在動畫片《Doc And Mharti》中,用羅伯茨交叉邊緣增強濾波器處理過的效果如下圖所示:
原圖
處理后
可以想象,擁有100多個不同濾波器的神經(jīng)網(wǎng)絡(luò)篩選復(fù)雜特征的能力有多強大,這將大大助力它識別現(xiàn)實世界中事物。一旦神經(jīng)網(wǎng)絡(luò)已經(jīng)將卷積濾波器應(yīng)用到圖像中,我們就能得到特征/激活圖。
特征圖譜會被指定區(qū)域內(nèi)的特定神經(jīng)元激活,比如我們將邊緣檢測濾波器添加到下面左圖中,則它的激活圖如右圖所示:
這些點代表0的行(表明這些區(qū)域可能是邊緣)。在二維數(shù)組中,“30”的值表明圖像區(qū)域存在邊緣的可能性很高。
激活層
當(dāng)我們有了激活圖,就能在其中讓激活函數(shù)大顯身手了,我們用研究人員的***函數(shù)——ReLU激活函數(shù)(修正線性單元)舉個例子。然而,一些研究人員仍然認(rèn)為用Sigmoid函數(shù)或雙曲切線能得到提供***的訓(xùn)練結(jié)果,但我不這么認(rèn)為。
使用激活層是在系統(tǒng)中引入非線性,這樣可以提高輸入和輸出的一般性。ReLU(x)函數(shù)只返回max(0、x)或簡單地返回激活圖中的負(fù)權(quán)值。
池化層
之后的***做法通常是在特征圖中應(yīng)用***池化(或任何其他類型的池)。應(yīng)用***池化層的原理是掃描小型grid中的圖像,用一個包含給定grid中***值的單個單元替換每個grid:
這樣做的重要原因之一是,一旦我們知道給定特征在一個給定的輸入?yún)^(qū)域,我們可以忽略特征的確切位置將數(shù)據(jù)普遍化,減少過擬合。舉個例子,即使訓(xùn)練精度達到99%,但拿到?jīng)]見過的新數(shù)據(jù)上測試時,它的精確度也只有50%。
輸出層
***池化層后我們講講剩下的另一個激活圖,這是傳遞給全連接網(wǎng)絡(luò)的一部分信息。它包含一個全連接層,將上一層中每個神經(jīng)元的輸出簡單映射到全連接層的一個神經(jīng)元上,并將softmax函數(shù)應(yīng)用到輸出中,就是和我們之前提到的ReLU函數(shù)類似的激活函數(shù)。
因為我們將用神經(jīng)網(wǎng)絡(luò)將圖片分類,因此這里使用了softmax函數(shù)。softmax輸出返回列表的概率求和為1,每個概率代表給定圖像屬于特定輸出類的概率。但后來涉及到圖像預(yù)測和修復(fù)任務(wù)時,線性激活函數(shù)的效果就比較好了。
值得注意的是,講到這里我們只考慮了單卷積層和單池層的簡單情況,如果要實現(xiàn)***精度通常需要它們多層堆疊。經(jīng)過每個完整的迭代后,通過網(wǎng)絡(luò)反向根據(jù)計算損失更新權(quán)重。