卷積神經網絡的直觀解釋

什麼是卷積神經網絡,爲什麼它們很重要?

卷積神經網絡(ConvNetsCNN)是神經網絡的一個類別,在圖像識別和分類等領域已被證明非常有效。除了機器人和自駕車的視覺驅動之外,ConvNets已經成功地識別了面部,物體和交通標誌。

屏幕截圖2017-05-28 at 11.41.55 PM.png

圖1:源[1]

在上圖1中,ConvNet能夠識別場景,系統能夠建議相關字幕(“足球運動員正在踢足球”),而圖2顯示了ConvNets用於識別日常物體,人類和動物。最近,ConvNets在幾種自然語言處理任務(例如句子分類)中也是有效的。

屏幕截圖2016-08-07 at 4.17.11 PM.png

圖2:源[2]

因此,ConvNets是當今大多數機器學習從業者的重要工具。然而,瞭解ConvNets和學習首次使用它們有時可能是一個令人恐懼的體驗。這個博文的主要目的是開發一個對卷積神經網絡如何在圖像上工作的理解。

如果你是一般的神經網絡新手,我會推薦閱讀這篇關於多層感知器的簡短教程以瞭解它們的工作原理,然後再繼續。多層感知器在這篇文章中被稱爲“完全連接的層”。

LeNet架構(20世紀90年代)

LeNet是第一個卷積神經網絡之一,有助於推動深度學習領域。 自1988年以來,Yann LeCun的這項開創性工作被評爲LeNet5之後的許多成功迭代[3]。當時LeNet架構主要用於字符識別任務,如閱讀郵政編碼,數字等。

下面,我們將展開LeNet架構如何學習識別圖像的直覺。近年來提出了幾種新的架構,即LeNet的改進,但是他們都使用LeNet的主要概念,如果您對前者有一個清晰的瞭解,那麼相對來說更容易理解。

屏幕截圖2016-08-07在4.59.29 PM.png

圖3:簡單的ConvNet。來源[5]

圖3中 的卷積神經網絡在體系結構與原始LeNet類似,將輸入圖像分爲四類:狗,貓,船或鳥(原LeNet主要用於字符識別任務)。從上圖可以看出,在接收到船隻圖像作爲輸入時,網絡正確地分配了所有四個類別中船的最高概率(0.94)。輸出層中所有概率的總和應爲一(本文後面將會解釋)。

ConvNet有四個主要操作,如圖3所示:

  1. 卷積
  2. 非線性度(ReLU)
  3. 集合或子抽樣
  4. 分類(完全連接層)

這些操作是每個卷積神經網絡的基本構建塊,因此瞭解這些工作是如何發展ConvNets的良好理解的重要一步。我們將嘗試瞭解下面這些操作背後的直覺。

圖像是像素值的矩陣

本質上,每個圖像可以表示爲像素值的矩陣。

8 gif.gif

圖4:每個圖像是像素值的矩陣。來源[ 6 ]

通道是用於指代圖像的某個分量的常規術語。來自標準數碼相機的圖像將有三個通道 - 紅色,綠色和藍色 - 您可以將其中的三個2d矩陣(每種顏色一個)堆疊起來,每個像素的像素值範圍爲0到255。

灰度圖像,另一方面,只有一個信道。爲了這個帖子的目的,我們只會考慮灰度圖像,所以我們將有一個單一的2d矩陣表示一個圖像。矩陣中每個像素的值範圍爲0到255 - 零表示黑色,255表示白色。

卷積步驟

ConvNets從“卷積”運算符中導出其名稱ConvNet的主要目的是從輸入圖像中提取特徵。卷積通過使用小平方的輸入數據學習圖像特徵來保持像素之間的空間關係。我們不會在這裏介紹卷積的數學細節,但會嘗試瞭解它對圖像的有效性。

如上所述,每個圖像可以被認爲是像素值的矩陣。考慮像素值僅爲0和1的5 x 5圖像(請注意,對於灰度圖像,像素值範圍爲0到255,下面的綠色矩陣是像素值僅爲0和1的特殊情況):

屏幕截圖2016-07-24 at 11.25.13 PM

另外,考慮另外3×3的矩陣,如下所示:

屏幕截圖2016-07-24 at 11.25.24 PM

然後,可以如下面的圖5中的動畫所示計算5×5圖像和3×3矩陣的卷積Convolution_schematic

圖5:卷積運算。輸出矩陣稱爲卷積特徵或特徵圖。來源[ 7 ]

花點時間瞭解上面的計算是如何進行的。我們將原始圖像(綠色)上的橙色矩陣滑過1像素(也稱爲“stride”),對於每個位置,我們計算元素乘法(在兩個矩陣之間),並加上乘法輸出以得到最終的整數輸出矩陣的單個元素(粉紅色)。請注意,3×3矩陣在每個步幅中只能看到輸入圖像的一部分。

在CNN術語中,3×3矩陣稱爲“過濾器”或“內核”或“特徵檢測器”,通過將圖像上的濾鏡滑動並計算點積形成的矩陣稱爲“卷積特徵”或“激活地圖”或“功能地圖”重要的是要注意,濾波器作爲來自原始輸入圖像的特徵檢測器。

從上面的動畫可以看出,濾波器矩陣的不同值將爲相同的輸入圖像產生不同的特徵圖。例如,考慮以下輸入圖像:

111.png

在下表中,我們可以看到上述圖像與不同濾鏡的卷積效果。如圖所示,我們可以通過在卷積運算之前更改濾波器矩陣的數值來執行邊緣檢測,銳化和模糊等操作[8] - 這意味着不同的濾波器可以檢測圖像中的不同特徵,例如邊緣,曲線等。更多這樣的例子可以在這裏的8.2.4節中找到

屏幕截圖2016-08-05 at 11.03.00 PM.png

瞭解卷積操作的另一個好方法是通過查看下面圖6的動畫

giphy.gif

圖6:卷積操作。來源[ 9 ]

一個過濾器(具有紅色輪廓)在輸入圖像上滑動(卷積運算)以產生一個特徵圖。另一個濾鏡(帶有綠色輪廓)在同一圖像上的卷積給出了不同的特徵圖,如圖所示。重要的是要注意,卷積運算捕獲原始圖像中的本地依賴關係。還要注意這兩個不同濾鏡如何從相同的原始圖像中生成不同的特徵圖。記住,上面的圖像和上面的兩個過濾器只是數字矩陣,我們在上面討論過。

在實踐中,CNN的學習訓練過程中對自己的這些過濾器的值(雖然我們還需要指定參數,如過濾器數量過濾器大小網絡架構的訓練過程之前等)。我們擁有的濾鏡數量越多,圖像特徵越多,網絡變得越來越難以識別圖像中的圖像。

特徵圖(卷積特徵)的大小由在卷積步驟執行之前需要決定的三個參數[ 4 ] 控制

  • 深度:深度對應於我們用於卷積運算的濾波器數。圖7所示的網絡中,我們使用三個不同的濾波器來執行原始船隻圖像的卷積,從而產生如圖所示的三個不同的特徵圖。您可以將這三個特徵圖視爲堆疊的2d矩陣,因此,特徵圖的“深度”將爲3。

屏幕截圖2016-08-10 at 3.42.35 AM

圖7
  • Stride: Stride是我們通過輸入矩陣滑動我們的濾波器矩陣的像素數。當步幅爲1時,我們一次移動一個像素的濾鏡。當步幅爲2時,當我們滑動它們時,濾鏡會一次跳過2像素。具有更大的步幅將產生較小的特徵圖。
  • 零填充:有時,在邊框周圍用零填充輸入矩陣是方便的,所以我們可以將濾波器應用於輸入圖像矩陣的邊界元素。零填充的一個很好的特點是它允許我們控制特徵圖的大小。添加零填充也稱爲寬卷積不使用零填充將是窄卷積這已經在[ 14 ]中得到了解釋

引入非線性(ReLU)

上面的圖3中的每個卷積操作之後,已經使用了稱爲ReLU的附加操作ReLU代表整流線性單元,是非線性運算。其輸出由下式給出:

屏幕截圖2016-08-10 at 2.23.48 AM.png

圖8:ReLU操作

ReLU是元素操作(每像素應用),並將特徵圖中的所有負像素值替換爲零。ReLU的目的是在ConvNet中引入非線性,因爲我們希望ConvNet學習的大多數真實世界數據將是非線性的(卷積是一個線性運算 - 元素矩陣乘法和加法,所以我們通過引入諸如ReLU的非線性函數來解釋非線性)。

ReLU操作可以從下面的圖9清楚地看出它顯示了ReLU操作應用於 上面圖6中獲得的特徵圖之一此處的輸出特徵圖也稱爲“整流”特徵圖。

屏幕截圖2016-08-07在6.18.19 PM.png

圖9:ReLU操作。來源[ 10 ]

也可以使用其他非線性函數(如tanhsigmoid)來代替ReLU,但是在大多數情況下,ReLU已被發現表現更好。

合流步驟

空間池(也稱爲二次採樣或下采樣)降低了每個特徵圖的維數,但保留了最重要的信息。空間彙總可以是不同的類型:最大,平均,和等。

在Max Pooling的情況下,我們定義一個空間鄰域(例如,一個2×2窗口),並從該窗口內的整流特徵圖中獲取最大的元素。而不是使用最大的元素,我們也可以取平均值(Average Pooling)或該窗口中所有元素的總和。在實踐中,Max Pooling已經顯示出更好的效果。

圖10  顯示了通過使用2×2窗口的整流功能圖(卷積+ ReLU操作後獲得)上的最大池操作的示例。

屏幕截圖2016-08-10 at 3.38.39 AM.png

圖10:最大池。來源[4]

我們將2 x 2窗口滑動2個單元格(也稱爲“stride”),並在每個區域中取最大值。如圖10所示,這降低了我們的特徵圖的維數。

圖11所示的網絡中池操作分別應用於每個特徵圖(注意,由於這一點,我們從三個輸入圖中得到三個輸出圖)。

屏幕截圖2016-08-07在6.19.37 PM.png

圖11:彙總應用於整改功能地圖

圖12  顯示了在上圖9中的ReLU操作後,我們收到的整流功能圖集中的效果 。

屏幕截圖2016-08-07在6.11.53 PM.png

圖12:池。來源[10]

池的功能是逐步減少輸入表示的空間大小[4]。特別是彙集

  • 使得輸入表示(特徵維度)更小更易於管理
  • 減少網絡中的參數和計算次數,因此控制過擬合[4]
  • 使得網絡對輸入圖像中的小變換,失真和轉換不變(輸入中的小失真不會改變Pooling的輸出 - 因爲我們在本地鄰域中取最大/平均值)。
  • 幫助我們達到我們的形象的幾乎不變量的不變表示(確切的術語是“等量的”)。這是非常強大的,因爲我們可以檢測圖像中的對象,無論它們位於何處(詳見[18]和[19])。

到目前爲止的故事

屏幕截圖2016-08-08 at 2.26.09 AM.png

圖13

到目前爲止,我們已經看到了卷積,ReLU和Pooling如何工作。重要的是要了解這些層是任何CNN的基本構件。如圖13所示,我們有兩組卷積,ReLU和Pooling層 - 第二卷卷層使用六個濾鏡對第一個Pooling Layer的輸出進行卷積,以產生總共六個特徵圖。然後將ReLU單獨應用於所有這六個特徵圖。然後我們分別對六個整流特徵圖中的每一個執行Max Pooling操作。

這些層一起從圖像中提取有用的特徵,在我們的網絡中引入非線性,並減少特徵維度,同時旨在使特徵與縮放和平移具有一些等同性[18]。

第二個集合層的輸出作爲完全連接層的輸入,我們將在下一節討論。

完全連接層

完全連接層是傳統的多層感知器,它在輸出層中使用softmax激活功能(其他分類器,如SVM也可以使用,但是會在這篇文章中堅持softmax)。術語“完全連接”意味着上一層中的每個神經元連接到下一層的每個神經元。 如果您不熟悉多層感知器,我建議您閱讀這篇文章

卷積層和彙集層的輸出代表輸入圖像的高級特徵。完全連接層的目的是使用這些功能將輸入圖像分類爲基於訓練數據集的各種類別。例如,我們設定執行的圖像分類任務具有四個可能的輸出,如下面的圖14所示(請注意,圖14未顯示完全連接的圖層中的節點之間的連接)

屏幕截圖2016-08-06 at 12.34.02 AM.png

圖14:完全連接的層 - 每個節點連接到相鄰層中的每個其他節點

除了分類之外,添加完全連接的層也是學習這些特徵的非線性組合的(通常)便宜的方式。來自卷積層和層疊層的大多數特徵對於分類任務可能是好的,但是這些特徵的組合可能更好[11]。

來自完全連接層的輸出概率的總和爲1.通過使用Softmax作爲完全連接層的輸出層中的激活功能來確保Softmax函數採用任意實值分數的向量,並將其壓縮到零和一之間的值向量,總和爲1。

把它放在一起 - 使用反向傳播訓練

如上所述,Convolution + Pooling層作爲輸入圖像的特徵提取器,而完全連接的層用作分類器。

請注意,在下面的圖15中,由於輸入圖像是船,所以Boat類的目標概率爲1,而對於其他三個類,目標概率爲0,即

  • 輸入圖像=船
  • 目標矢量= [0,0,1,0]

屏幕截圖2016-08-07在9.15.21 PM.png

圖15:培訓ConvNet

卷積網絡的整體訓練過程可概述如下:

  • 步驟1:我們用隨機值初始化所有過濾器和參數/權重
  • 步驟2:網絡採用訓練圖像作爲輸入,通過正向傳播步驟(卷積,ReLU和池操作以及完全連接層中的正向傳播),並找到每個類的輸出概率。
    • 讓我們說上面的船圖像的輸出概率是[0.2,0.4,0.1,0.3]
    • 由於權重被隨機分配給第一訓練樣本,輸出概率也是隨機的。
  • 步驟3:計算輸出層的總誤差(所有4個類的總和)
    •  總誤差=Σ½(目標概率 - 輸出概率)²
  • 步驟4:使用反向傳播來計算相對於網絡中所有權重的錯誤梯度,並使用梯度下降來更新所有過濾器值/權重和參數值以最小化輸出錯誤。
    • 權重與其對總錯誤的貢獻成比例地進行調整。
    • 當再次輸入相同的圖像時,輸出概率現在可以是[0.1,0.1,0.7,0.1],這更接近目標矢量[0,0,1,0]。
    • 這意味着網絡已經學會了通過調整其權重/濾波器來正確地分類該特定圖像,使得輸出誤差降低。
    • 濾波器數量,濾波器大小,網絡架構等參數在步驟1之前已被修復,在訓練過程中不改變,只有濾波器矩陣和連接權重的值得到更新。
  • 步驟5:對訓練集中的所有圖像重複步驟2-4。

上述步驟訓練ConvNet - 這實質上意味着ConvNet的所有權重和參數現在已經被優化,以正確地對訓練集中的圖像進行分類。

當ConvNet中輸入新的(不可見的)圖像時,網絡將通過正向傳播步驟並輸出每個類的概率(對於新圖像,輸出概率使用已優化的權重計算,以正確分類所有以前的培訓示例)。如果我們的訓練集足夠大,網絡將(希望)推廣到新的圖像,並將其分類爲正確的類別。

注1:上述步驟過於簡單,避免了數學細節,爲培訓過程提供了直覺。參見[4]和[12]的數學公式和透徹的理解。

注2:在上面的例子中,我們使用了兩組交替的卷積和池層。但請注意,這些操作可以在單個ConvNet中重複任意次數。事實上,一些最好的ConvNets今天有數十個卷積和池層!此外,在每個卷積層之後沒有必要具有池化層。下面圖16可以看出,在進行彙總操作之前,我們可以連續進行多次卷積+重新執行操作。還要注意ConvNet的每一層如下圖16所示。

car.png

圖16:源[ 4 ]

可視化卷積神經網絡

一般來說,我們擁有的卷積步驟越多,我們的網絡就越能複雜地識別。例如,在圖像分類中,ConvNet可以學習檢測第一層中原始像素的邊緣,然後使用邊緣來檢測第二層中的簡單形狀,然後使用這些形狀來阻止更高級的特徵,如面部形狀在較高層[14]。這在下面的圖17被證明- 這些特徵是使用卷積深層信念網絡學習的,並且該圖被包括在此僅僅是爲了演示這個想法(這僅僅是一個例子:現實生活卷積濾波器可以檢測到對人類沒有意義的對象) 。

屏幕截圖2016-08-10在12.58.30 PM.png

圖17:卷積深層信仰網絡的學習特徵。來源[21]

亞當·哈雷(Adam Harley)創建了一個在MNIST數據庫上訓練的卷積神經網絡的驚人可視化手寫數字[13]。我強烈推薦玩弄它來了解CNN如何工作的細節。

我們將在下面看到如何爲輸入“8”工作的網絡。請注意,圖18的可視化不會單獨顯示ReLU操作。

conv_all.png

圖18:可視化通過手寫數字訓練的ConvNet。來源[13]

輸入圖像包含1024個像素(32×32圖像),並且通過六個唯一的5×5(步幅1)濾波器與輸入圖像的卷積形成第一卷積層(卷積層1)。如圖所示,使用六個不同的濾鏡產生深度六的特徵圖。

卷積層1之後是彙集層1,它在卷積層1中的六個特徵圖中分別進行2×2最大池(帶有步幅2)。您可以將鼠標指針移動到池層中的任何像素上,並觀察2 x 2網格在前一個卷積層中形成(如圖19所示)。您將注意到,2 x 2網格中具有最大值(最亮的像素)的像素將會進入“池”層。

屏幕截圖2016-08-06 at 12.45.35 PM.png

圖19:可視化池操作。來源[13]

彙集層1之後是執行卷積運算的十五個5×5(步幅1)卷積濾波器。接下來是Pooling Layer 2,最大池數爲2×2(步幅2)。這兩層使用與上述相同的概念。

然後我們有三個完全連接(FC)層。有:

  • 第一個FC層中有120個神經元
  • 第二個FC層中有100個神經元
  • 對應於10位的第三個FC層中的10個神經元 - 也稱爲輸出層

請注意,在圖20中,輸出層中的10個節點中的每一個都連接到第2個完全連接層中的所有100個節點(因此名稱爲完全連接)。

另外,請注意,輸出層中唯一的亮點對應於“8” - 這意味着網絡正確地對我們的手寫數字進行了分類(亮點表示其輸出較高,即8個在所有其他數字中的概率最高)。

final.png

圖20:可視化細連的圖層。來源[13]

相同可視化的3D版本可在此處使用

其他ConvNet架構

卷積神經網絡始於20世紀90年代初。我們討論了LeNet,這 是最早的卷積神經網絡之一。其他一些有影響力的架構如下[3] [4]所列

  • LeNet(1990s):本文已經介紹過。
  • 20世紀90年代至2012年:從20世紀90年代末到2010年初,卷積神經網絡正在孵化。隨着越來越多的數據和計算能力的提高,卷積神經網絡可以解決的任務變得越來越有趣。
  • AlexNet(2012) - 2012年,Alex Krizhevsky(和其他人)發佈了AlexNet,這是一個更深入和更廣泛的LeNet版本,並在2012年大幅度贏得了ImageNet大型視覺識別挑戰(ILSVRC)的困難。對於以前的方法和目前CNN廣泛應用的重大突破可歸因於這項工作。
  • ZF Net(2013) - ILSVRC 2013獲獎者是Matthew Zeiler和Rob Fergus的卷積網絡。它被稱爲ZFNet(Zeiler&Fergus Net的縮寫)。這是通過調整架構超參數來改進AlexNet。
  • GoogLeNet(2014) - ILSVRC 2014獲獎者是Szegedy等人的卷積網絡來自Google。其主要貢獻是開發一個初始模塊,大大減少了網絡中的參數數量(4M,與AlexNet的60M相比)。
  • VGGNet(2014) - 2014年ILSVRC的亞軍是被稱爲VGGNet的網絡其主要貢獻在於顯示網絡的深度(層數)是良好性能的關鍵組成部分。
  • ResNet(2015) -KaimingHe(和其他人)開發的剩餘網絡是ILSVRC 2015的獲勝者。ResNets目前是迄今爲止最先進的卷積神經網絡模型,是在實踐中使用ConvNets的默認選擇(截至2016年5月)。
  • DenseNet(2016年8月) -最近由高黃(和其他)發佈,密集卷積網絡每層都以前瞻的方式直接連接到每一層。DenseNet已被證明可以在五項競爭激烈的對象識別基準測試任務上獲得先前最先進的架構的顯着改進。在這裏查看火炬實施

結論

在這篇文章中,我已經嘗試簡單地解釋卷積神經網絡背後的主要概念。有幾個細節我已經過度簡化/跳過,但希望這篇文章給你一些關於他們如何工作的直覺。

這篇文章最初來自Denny Britz的NLP理解卷積神經網絡(我建議閱讀),這裏的一些解釋是基於這篇  文章。對於一些概念更透徹的瞭解,我會鼓勵你去通過音符斯坦福大學的在ConvNets課程以及根據下文引用中提到的其他優秀的資源。如果您面對任何上述概念或有任何問題/建議,請隨時在下面發表評論。

本文中使用的所有圖像和動畫都屬於其參考文獻部分所列各自的作者。

參考

  1. karpathy / neuraltalk2:火炬中的高效圖像字幕代碼,示例
  2. Shaoqing Ren  等人,  “Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks”,2015,  arXiv:1506.01497 
  3. 神經網絡架構,Eugenio Culurciello的博客
  4. CS231n卷積神經網絡視覺識別,斯坦福
  5. Clarifai /技術
  6. 機器學習是樂趣!第3部分:深度學習和卷積神經網絡
  7. 特徵提取採用卷積,斯坦福大學
  8. 關於內核的維基百科文章(圖像處理) 
  9. 深度學習方法視覺,CVPR 2012教程 
  10. 神經網絡Rob Fergus,機器學習暑期學校2015
  11. 完全連接的層在CNN中做了什麼? 
  12. 卷積神經網絡,安德魯吉本斯基 
  13. AW Harley,“An Interactive Node-Link Visualization of Convolutional Neural Networks”,ISVC,第867-877頁,2015(鏈接)。演示
  14. 瞭解NLP的卷積神經網絡
  15. 卷積神經網絡中的反向傳播
  16. 卷積神經網絡初學者指南
  17. Vincent Dumoulin 等人,“A guide to convolution arithmetic於深度學習”,2015,arXiv:1603.07285
  18. 深度學習與普通機器學習有什麼區別?
  19. 卷積神經網絡如何能夠學習不變特徵?
  20. 深層卷積神經網絡計算機視覺分類法
  21. HongLak Lee 等人,“Convolutional Deep Belief Networks for Scalable Unsupervised Learning of Hierarchical Representations”(link

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