近日,Dishashree Gupta 在 AnalyTIcsvidhya 上發(fā)表了一篇題為《Architecture of ConvoluTIonal Neural Networks (CNNs) demysTIfied》的文章,對用于圖像識別和分類的卷積神經(jīng)網(wǎng)絡架構作了深度揭秘;作者在文中還作了通盤演示,期望對 CNN 的工作機制有一個深入的剖析。
引言
先坦白地說,有一段時間我無法真正理解深度學習。我查看相關研究論文和文章,感覺深度學習異常復雜。我嘗試去理解神經(jīng)網(wǎng)絡及其變體,但依然感到困難。
接著有一天,我決定一步一步,從基礎開始。我把技術操作的步驟分解開來,并手動執(zhí)行這些步驟(和計算),直到我理解它們?nèi)绾喂ぷ?。這相當費時,且令人緊張,但是結果非凡。
現(xiàn)在,我不僅對深度學習有了全面的理解,還在此基礎上有了好想法,因為我的基礎很扎實。隨意地應用神經(jīng)網(wǎng)絡是一回事,理解它是什么以及背后的發(fā)生機制是另外一回事。
今天,我將與你共享我的心得,展示我如何上手卷積神經(jīng)網(wǎng)絡并最終弄明白了它。我將做一個通盤的展示,從而使你對 CNN 的工作機制有一個深入的了解。
在本文中,我將會討論 CNN 背后的架構,其設計初衷在于解決圖像識別和分類問題。同時我也會假設你對神經(jīng)網(wǎng)絡已經(jīng)有了初步了解。
1. 機器如何看圖?人類大腦是一非常強大的機器,每秒內(nèi)能看(捕捉)多張圖,并在意識不到的情況下就完成了對這些圖的處理。但機器并非如此。機器處理圖像的第一步是理解,理解如何表達一張圖像,進而讀取圖片。
簡單來說,每個圖像都是一系列特定排序的圖點(像素)。如果你改變像素的順序或顏色,圖像也隨之改變。舉個例子,存儲并讀取一張上面寫著數(shù)字 4 的圖像。
基本上,機器會把圖像打碎成像素矩陣,存儲每個表示位置像素的顏色碼。在下圖的表示中,數(shù)值 1 是白色,256 是最深的綠色(為了簡化,我們示例限制到了一種顏色)。
一旦你以這種格式存儲完圖像信息,下一步就是讓神經(jīng)網(wǎng)絡理解這種排序與模式。
2. 如何幫助神經(jīng)網(wǎng)絡識別圖像?表征像素的數(shù)值是以特定的方式排序的。
假設我們嘗試使用全連接網(wǎng)絡識別圖像,該如何做?
全連接網(wǎng)絡可以通過平化它,把圖像當作一個數(shù)組,并把像素值當作預測圖像中數(shù)值的特征。明確地說,讓網(wǎng)絡理解理解下面圖中發(fā)生了什么,非常的艱難。
即使人類也很難理解上圖中表達的含義是數(shù)字 4。我們完全丟失了像素的空間排列。
我們能做什么呢?可以嘗試從原圖像中提取特征,從而保留空間排列。
案例 1
這里我們使用一個權重乘以初始像素值。
現(xiàn)在裸眼識別出這是「4」就變得更簡單了。但把它交給全連接網(wǎng)絡之前,還需要平整化(flatten) 它,要讓我們能夠保留圖像的空間排列。
案例 2
現(xiàn)在我們可以看到,把圖像平整化完全破壞了它的排列。我們需要想出一種方式在沒有平整化的情況下把圖片饋送給網(wǎng)絡,并且還要保留空間排列特征,也就是需要饋送像素值的 2D/3D 排列。
我們可以嘗試一次采用圖像的兩個像素值,而非一個。這能給網(wǎng)絡很好的洞見,觀察鄰近像素的特征。既然一次采用兩個像素,那也就需要一次采用兩個權重值了。
希望你能注意到圖像從之前的 4 列數(shù)值變成了 3 列。因為我們現(xiàn)在一次移用兩個像素(在每次移動中像素被共享),圖像變的更小了。雖然圖像變小了,我們?nèi)阅茉诤艽蟪潭壬侠斫膺@是「4」。而且,要意識到的一個重點是,我們采用的是兩個連貫的水平像素,因此只會考慮水平的排列。
這是我們從圖像中提取特征的一種方式。我們可以看到左邊和中間部分,但右邊部分看起來不那么清楚。主要是因為兩個問題:
1. 圖片角落左邊和右邊是權重相乘一次得到的。
2. 左邊仍舊保留,因為權重值高;右邊因為略低的權重,有些丟失。
現(xiàn)在我們有兩個問題,需要兩個解決方案。
案例 3





