直白介绍卷积神经网络(CNN)
?什么是卷積神經(jīng)網(wǎng)絡(luò),它為何重要?
卷積神經(jīng)網(wǎng)絡(luò)(也稱(chēng)作?ConvNets?或?CNN)是神經(jīng)網(wǎng)絡(luò)的一種,它在圖像識(shí)別和分類(lèi)等領(lǐng)域已被證明非常有效。 卷積神經(jīng)網(wǎng)絡(luò)除了為機(jī)器人和自動(dòng)駕駛汽車(chē)的視覺(jué)助力之外,還可以成功識(shí)別人臉,物體和交通標(biāo)志。
圖1
如圖1所示,卷積神經(jīng)網(wǎng)絡(luò)能夠識(shí)別圖片的場(chǎng)景并且提供相關(guān)標(biāo)題(“足球運(yùn)動(dòng)員正在踢足球”),圖2則是利用卷積神經(jīng)網(wǎng)絡(luò)識(shí)別日常物品、人類(lèi)和動(dòng)物的例子。最近,卷積神經(jīng)網(wǎng)絡(luò)在一些自然語(yǔ)言處理任務(wù)(如語(yǔ)句分類(lèi))中也發(fā)揮了很大作用。
圖2
因此,卷積神經(jīng)網(wǎng)絡(luò)是當(dāng)今大多數(shù)機(jī)器學(xué)習(xí)實(shí)踐者的重要工具。但是,理解卷積神經(jīng)網(wǎng)絡(luò)并開(kāi)始嘗試運(yùn)用著實(shí)是一個(gè)痛苦的過(guò)程。本文的主要目的是了解卷積神經(jīng)網(wǎng)絡(luò)如何處理圖像。
對(duì)于剛接觸神經(jīng)網(wǎng)絡(luò)的人,我建議大家先閱讀這篇關(guān)于多層感知機(jī)的簡(jiǎn)短教程?,了解其工作原理之后再繼續(xù)閱讀本文。多層感知機(jī)即本文中的“完全連接層”。
?LeNet 框架(20世紀(jì)90年代)
LeNet 是最早推動(dòng)深度學(xué)習(xí)領(lǐng)域發(fā)展的卷積神經(jīng)網(wǎng)絡(luò)之一。這項(xiàng)由 Yann LeCun 完成的開(kāi)創(chuàng)性工作自1988年以來(lái)多次成功迭代之后被命名為?LeNet5。當(dāng)時(shí) LeNet 框架主要用于字符識(shí)別任務(wù),例如閱讀郵政編碼,數(shù)字等。
接下來(lái),我們將直觀(guān)地了解 LeNet 框架如何學(xué)習(xí)識(shí)別圖像。 近年來(lái)有人提出了幾種基于 LeNet 改進(jìn)的新框架,但是它們的基本思路與 LeNet 并無(wú)差別,如果您清楚地理解了 LeNet,那么對(duì)這些新的框架理解起來(lái)就相對(duì)容易很多。
圖3: 一個(gè)簡(jiǎn)單的卷積神經(jīng)網(wǎng)絡(luò)
圖3中的卷積神經(jīng)網(wǎng)絡(luò)在結(jié)構(gòu)上與原始的 LeNet 類(lèi)似,并將輸入圖像分為四類(lèi):狗,貓,船或鳥(niǎo)(原始的 LeNet 主要用于字符識(shí)別任務(wù))。 從上圖可以看出,接收船只圖像作為輸入時(shí),神經(jīng)網(wǎng)絡(luò)在四個(gè)類(lèi)別中正確地給船只分配了最高概率值(0.94)。輸出層中所有概率的總和應(yīng)該是1(之后會(huì)做解釋)。
圖3?的卷積神經(jīng)網(wǎng)絡(luò)中有四個(gè)主要操作:
卷積
非線(xiàn)性變換(ReLU)
池化或子采樣
分類(lèi)(完全連接層)
這些操作是所有卷積神經(jīng)網(wǎng)絡(luò)的基本組成部分,因此了解它們的工作原理是理解卷積神經(jīng)網(wǎng)絡(luò)的重要步驟。下面我們將嘗試直觀(guān)地理解每個(gè)操作。
?一張圖片就是一個(gè)由像素值組成的矩陣?
實(shí)質(zhì)上,每張圖片都可以表示為由像素值組成的矩陣。
圖4: 每張圖片就是一個(gè)像素矩陣
通道(channel)是一個(gè)傳統(tǒng)術(shù)語(yǔ),指圖像的一個(gè)特定成分。標(biāo)準(zhǔn)數(shù)碼相機(jī)拍攝的照片具有三個(gè)通道——紅,綠和藍(lán)——你可以將它們想象為三個(gè)堆疊在一起的二維矩陣(每種顏色一個(gè)),每個(gè)矩陣的像素值都在0到255之間。
而灰度圖像只有一個(gè)通道。 鑒于本文的科普目的,我們只考慮灰度圖像,即一個(gè)代表圖像的二維矩陣。矩陣中每個(gè)像素值的范圍在0到255之間——0表示黑色,255表示白色。
卷積?
卷積神經(jīng)網(wǎng)絡(luò)的名字來(lái)源于“卷積”運(yùn)算。在卷積神經(jīng)網(wǎng)絡(luò)中,卷積的主要目的是從輸入圖像中提取特征。通過(guò)使用輸入數(shù)據(jù)中的小方塊來(lái)學(xué)習(xí)圖像特征,卷積保留了像素間的空間關(guān)系。我們?cè)谶@里不會(huì)介紹卷積的數(shù)學(xué)推導(dǎo),但會(huì)嘗試?yán)斫馑侨绾翁幚韴D像的。
正如前文所說(shuō),每個(gè)圖像可以被看做像素值矩陣。考慮一個(gè)像素值僅為0和1的5 × 5大小的圖像(注意,對(duì)于灰度圖像,像素值范圍從0到255,下面的綠色矩陣是像素值僅為0和1的特殊情況):
另外,考慮另一個(gè) 3×3 矩陣,如下圖所示:
上述5 x 5圖像和3 x 3矩陣的卷積計(jì)算過(guò)程如圖5中的動(dòng)畫(huà)所示:
圖5:卷積操作。輸出矩陣稱(chēng)作“卷積特征”或“特征映射”
我們來(lái)花點(diǎn)時(shí)間理解一下上述計(jì)算是如何完成的。將橙色矩陣在原始圖像(綠色)上以每次1個(gè)像素的速率(也稱(chēng)為“步幅”)移動(dòng),對(duì)于每個(gè)位置,計(jì)算兩個(gè)矩陣相對(duì)元素的乘積并相加,輸出一個(gè)整數(shù)并作為最終輸出矩陣(粉色)的一個(gè)元素。注意,3 × 3矩陣每個(gè)步幅僅能“看到”輸入圖像的一部分。
在卷積神經(jīng)網(wǎng)路的術(shù)語(yǔ)中,這個(gè)3 × 3矩陣被稱(chēng)為“過(guò)濾器”或“核”或“特征探測(cè)器”,通過(guò)在圖像上移動(dòng)過(guò)濾器并計(jì)算點(diǎn)積得到的矩陣被稱(chēng)為“卷積特征”或“激活映射”或“特征映射”。重要的是要注意,過(guò)濾器的作用就是原始輸入圖像的特征檢測(cè)器。
從上面的動(dòng)畫(huà)可以明顯看出,對(duì)于同一張輸入圖像,不同的過(guò)濾器矩陣將會(huì)產(chǎn)生不同的特征映射。例如,考慮如下輸入圖像:
在下表中,我們可以看到上圖在不同過(guò)濾器下卷積的效果。如圖所示,只需在卷積運(yùn)算前改變過(guò)濾器矩陣的數(shù)值就可以執(zhí)行邊緣檢測(cè),銳化和模糊等不同操作 [8] —— 這意味著不同的過(guò)濾器可以檢測(cè)圖像的不同特征,例如邊緣, 曲線(xiàn)等。更多此類(lèi)示例可在?這里?8.2.4節(jié)中找到。
另一個(gè)理解卷積操作的好方法可以參考下面文字:
一個(gè)過(guò)濾器(紅色邊框)在輸入圖像上移動(dòng)(卷積操作)以生成特征映射。在同一張圖像上,另一個(gè)過(guò)濾器(綠色邊框)的卷積生成了不同的特征圖,如圖所示。需要注意到,卷積操作捕獲原始圖像中的局部依賴(lài)關(guān)系很重要。還要注意這兩個(gè)不同的過(guò)濾器如何從同一張?jiān)紙D像得到不同的特征圖。請(qǐng)記住,以上圖像和兩個(gè)過(guò)濾器只是數(shù)值矩陣。
實(shí)際上,卷積神經(jīng)網(wǎng)絡(luò)在訓(xùn)練過(guò)程中會(huì)自己學(xué)習(xí)這些過(guò)濾器的值(盡管在訓(xùn)練過(guò)程之前我們?nèi)孕枰付ㄖT如過(guò)濾器數(shù)目、大小,網(wǎng)絡(luò)框架等參數(shù))。我們擁有的過(guò)濾器數(shù)目越多,提取的圖像特征就越多,我們的網(wǎng)絡(luò)在識(shí)別新圖像時(shí)效果就會(huì)越好。
特征映射(卷積特征)的大小由我們?cè)趫?zhí)行卷積步驟之前需要決定的三個(gè)參數(shù)[4]控制:
深度:深度對(duì)應(yīng)于我們用于卷積運(yùn)算的過(guò)濾器數(shù)量。在圖6所示的網(wǎng)絡(luò)中,我們使用三個(gè)不同的過(guò)濾器對(duì)初始的船圖像進(jìn)行卷積,從而生成三個(gè)不同的特征圖??梢詫⑦@三個(gè)特征地圖視為堆疊的二維矩陣,因此,特征映射的“深度”為3。
圖6
步幅:步幅是我們?cè)谳斎刖仃嚿弦苿?dòng)一次過(guò)濾器矩陣的像素?cái)?shù)量。當(dāng)步幅為1時(shí),我們一次將過(guò)濾器移動(dòng)1個(gè)像素。當(dāng)步幅為2時(shí),過(guò)濾器每次移動(dòng)2個(gè)像素。步幅越大,生成的特征映射越小。
零填充:有時(shí),將輸入矩陣邊界用零來(lái)填充會(huì)很方便,這樣我們可以將過(guò)濾器應(yīng)用于輸入圖像矩陣的邊界元素。零填充一個(gè)很好的特性是它允許我們控制特征映射的大小。添加零填充也稱(chēng)為寬卷積,而不使用零填充是為窄卷積。 這在[14]中有清楚的解釋。
?非線(xiàn)性部分介紹(ReLU)
如上文圖3所示,每次卷積之后,都進(jìn)行了另一項(xiàng)稱(chēng)為 ReLU 的操作。ReLU 全稱(chēng)為修正線(xiàn)性單元(Rectified Linear Units),是一種非線(xiàn)性操作。 其輸出如下圖所示:
圖7: ReLU 函數(shù)
ReLU 是一個(gè)針對(duì)元素的操作(應(yīng)用于每個(gè)像素),并將特征映射中的所有負(fù)像素值替換為零。ReLU 的目的是在卷積神經(jīng)網(wǎng)絡(luò)中引入非線(xiàn)性因素,因?yàn)樵趯?shí)際生活中我們想要用神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的數(shù)據(jù)大多數(shù)都是非線(xiàn)性的(卷積是一個(gè)線(xiàn)性運(yùn)算 —— 按元素進(jìn)行矩陣乘法和加法,所以我們希望通過(guò)引入 ReLU 這樣的非線(xiàn)性函數(shù)來(lái)解決非線(xiàn)性問(wèn)題)。
從圖8可以很清楚地理解 ReLU 操作。它展示了將 ReLU 作用于某個(gè)特征映射得到的結(jié)果。這里的輸出特征映射也被稱(chēng)為“修正”特征映射。
圖8: ReLU 操作
其他非線(xiàn)性函數(shù)諸如?tanh?或?sigmoid?也可以用來(lái)代替 ReLU,但是在大多數(shù)情況下,ReLU 的表現(xiàn)更好。
?池化?
空間池化(也稱(chēng)為子采樣或下采樣)可降低每個(gè)特征映射的維度,并保留最重要的信息??臻g池化有幾種不同的方式:最大值,平均值,求和等。
在最大池化的情況下,我們定義一個(gè)空間鄰域(例如,一個(gè)2 × 2窗口),并取修正特征映射在該窗口內(nèi)最大的元素。當(dāng)然我們也可以取該窗口內(nèi)所有元素的平均值(平均池化)或所有元素的總和。在實(shí)際運(yùn)用中,最大池化的表現(xiàn)更好。
圖9展示了通過(guò)2 × 2窗口在修正特征映射(卷積+ ReLU 操作后得到)上應(yīng)用最大池化操作的示例。
圖9: 最大池化
我們將2 x 2窗口移動(dòng)2個(gè)單元格(也稱(chēng)為“步幅”),并取每個(gè)區(qū)域中的最大值。如圖9所示,這樣就降低了特征映射的維度。
在圖10所示的網(wǎng)絡(luò)中,池化操作分別應(yīng)用于每個(gè)特征映射(因此,我們從三個(gè)輸入映射中得到了三個(gè)輸出映射)。
圖10: 在修正特征映射上應(yīng)用池化
圖11展示了我們對(duì)圖8中經(jīng)過(guò) ReLU 操作之后得到的修正特征映射應(yīng)用池化之后的效果。
圖11: 池化
池化的作用是逐步減少輸入的空間大小[4]。具體來(lái)說(shuō)有以下四點(diǎn):
使輸入(特征維度)更小,更易于管理
減少網(wǎng)絡(luò)中的參數(shù)和運(yùn)算次數(shù),因此可以控制過(guò)擬合?[4]
使網(wǎng)絡(luò)對(duì)輸入圖像微小的變換、失真和平移更加穩(wěn)健(輸入圖片小幅度的失真不會(huì)改池化的輸出結(jié)果 —— 因?yàn)槲覀內(nèi)×肃徲虻淖畲笾?平均值)。
可以得到尺度幾乎不變的圖像(確切的術(shù)語(yǔ)是“等變”)。這是非常有用的,這樣無(wú)論圖片中的物體位于何處,我們都可以檢測(cè)到,(詳情參閱[18]和[19])。
至此…
圖12
目前為止,我們已經(jīng)了解了卷積,ReLU 和池化的工作原理。這些是卷積神經(jīng)網(wǎng)絡(luò)的基本組成部分,理解這一點(diǎn)很重要。如圖13所示,我們有兩個(gè)由卷積,ReLU 和 Pooling 組成的中間層 —— 第二個(gè)卷積層使用六個(gè)過(guò)濾器對(duì)第一層的輸出執(zhí)行卷積,生成六個(gè)特征映射。然后將 ReLU 分別應(yīng)用于這六個(gè)特征映射。接著,我們對(duì)六個(gè)修正特征映射分別執(zhí)行最大池化操作。
這兩個(gè)中間層的作用都是從圖像中提取有用的特征,在網(wǎng)絡(luò)中引入非線(xiàn)性因素,同時(shí)對(duì)特征降維并使其在尺度和平移上等變[18]。
第二個(gè)池化層的輸出即完全連接層的輸入,我們將在下一節(jié)討論。
?完全連接層?
完全連接層是一個(gè)傳統(tǒng)的多層感知器,它在輸出層使用 softmax 激活函數(shù)(也可以使用其他分類(lèi)器,比如 SVM,但在本文只用到了 softmax)。“完全連接”這個(gè)術(shù)語(yǔ)意味著前一層中的每個(gè)神經(jīng)元都連接到下一層的每個(gè)神經(jīng)元。 如果對(duì)多層感知器不甚了解,我建議您閱讀這篇文章。
卷積層和池化層的輸出代表了輸入圖像的高級(jí)特征。完全連接層的目的是利用這些基于訓(xùn)練數(shù)據(jù)集得到的特征,將輸入圖像分為不同的類(lèi)。例如,我們要執(zhí)行的圖像分類(lèi)任務(wù)有四個(gè)可能的輸出,如圖13所示(請(qǐng)注意,圖14沒(méi)有展示出完全連接層中節(jié)點(diǎn)之間的連接)
圖13: 完全連接層——每個(gè)節(jié)點(diǎn)都與相鄰層的其他節(jié)點(diǎn)連接
除分類(lèi)之外,添加完全連接層也是一個(gè)(通常來(lái)說(shuō))比較簡(jiǎn)單的學(xué)習(xí)這些特征非線(xiàn)性組合的方式。卷積層和池化層得到的大部分特征對(duì)分類(lèi)的效果可能也不錯(cuò),但這些特征的組合可能會(huì)更好[11]。
完全連接層的輸出概率之和為1。這是因?yàn)槲覀冊(cè)谕耆B接層的輸出層使用了 softmax 激活函數(shù)。Softmax 函數(shù)取任意實(shí)數(shù)向量作為輸入,并將其壓縮到數(shù)值在0到1之間,總和為1的向量。
?正式開(kāi)始——使用反向傳播進(jìn)行訓(xùn)練?
如上所述,卷積+池化層用來(lái)從輸入圖像提取特征,完全連接層用來(lái)做分類(lèi)器。
注意,在圖14中,由于輸入圖像是船,對(duì)于船類(lèi)目標(biāo)概率為1,其他三個(gè)類(lèi)為0
輸入圖像 = 船
目標(biāo)向量 = [0, 0, 1, 0]
圖14:訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)
卷積網(wǎng)絡(luò)的整體訓(xùn)練過(guò)程概括如下:
步驟1:用隨機(jī)值初始化所有過(guò)濾器和參數(shù)/權(quán)重
步驟2:神經(jīng)網(wǎng)絡(luò)將訓(xùn)練圖像作為輸入,經(jīng)過(guò)前向傳播步驟(卷積,ReLU 和池化操作以在完全連接層中的前向傳播),得到每個(gè)類(lèi)的輸出概率。
假設(shè)上面船只圖像的輸出概率是 [0.2,0.4,0.1,0.3]
由于權(quán)重是隨機(jī)分配給第一個(gè)訓(xùn)練樣本,因此輸出概率也是隨機(jī)的。
步驟3:計(jì)算輸出層的總誤差(對(duì)所有4個(gè)類(lèi)進(jìn)行求和)
總誤差=∑ ?(目標(biāo)概率 – 輸出概率)2
步驟4:使用反向傳播計(jì)算網(wǎng)絡(luò)中所有權(quán)重的誤差梯度,并使用梯度下降更新所有過(guò)濾器值/權(quán)重和參數(shù)值,以最小化輸出誤差。
根據(jù)權(quán)重對(duì)總誤差的貢獻(xiàn)對(duì)其進(jìn)行調(diào)整。
當(dāng)再次輸入相同的圖像時(shí),輸出概率可能就變成了 [0.1,0.1,0.7,0.1],這更接近目標(biāo)向量 [0,0,1,0]。
這意味著網(wǎng)絡(luò)已經(jīng)學(xué)會(huì)了如何通過(guò)調(diào)整其權(quán)重/過(guò)濾器并減少輸出誤差的方式對(duì)特定圖像進(jìn)行正確分類(lèi)。
過(guò)濾器數(shù)量、大小,網(wǎng)絡(luò)結(jié)構(gòu)等參數(shù)在步驟1之前都已經(jīng)固定,并且在訓(xùn)練過(guò)程中不會(huì)改變 —— 只會(huì)更新濾器矩陣和連接權(quán)值。
步驟5:對(duì)訓(xùn)練集中的所有圖像重復(fù)步驟2-4。
?
通過(guò)以上步驟就可以訓(xùn)練出卷積神經(jīng)網(wǎng)絡(luò) —— 這實(shí)際上意味著卷積神經(jīng)網(wǎng)絡(luò)中的所有權(quán)重和參數(shù)都已經(jīng)過(guò)優(yōu)化,可以對(duì)訓(xùn)練集中的圖像進(jìn)行正確分類(lèi)。
當(dāng)我們給卷積神經(jīng)網(wǎng)絡(luò)中輸入一個(gè)新的(未見(jiàn)過(guò)的)圖像時(shí),網(wǎng)絡(luò)會(huì)執(zhí)行前向傳播步驟并輸出每個(gè)類(lèi)的概率(對(duì)于新圖像,計(jì)算輸出概率所用的權(quán)重是之前優(yōu)化過(guò),并能夠?qū)τ?xùn)練集完全正確分類(lèi)的)。如果我們的訓(xùn)練集足夠大,神經(jīng)網(wǎng)絡(luò)會(huì)有很好的泛化能力(但愿如此)并將新圖片分到正確的類(lèi)里。
注1:為了給大家提供一個(gè)直觀(guān)的訓(xùn)練過(guò)程,上述步驟已經(jīng)簡(jiǎn)化了很多,并且忽略了數(shù)學(xué)推導(dǎo)過(guò)程。如果想要數(shù)學(xué)推導(dǎo)以及對(duì)卷積神經(jīng)網(wǎng)絡(luò)透徹的理解,請(qǐng)參閱 [4] 和 [12]。
注2:上面的例子中,我們使用了兩組交替的卷積和池化層。但請(qǐng)注意,這些操作可以在一個(gè)卷積神經(jīng)網(wǎng)絡(luò)中重復(fù)執(zhí)行多次。實(shí)際上,現(xiàn)在效果最好的一些卷積神經(jīng)網(wǎng)絡(luò)都包含幾十個(gè)卷積和池化層! 另外,每個(gè)卷積層之后的池化層不是必需的。從下面的圖15中可以看出,在進(jìn)行池化操作之前,我們可以連續(xù)進(jìn)行多個(gè)卷積 + ReLU 操作。另外請(qǐng)注意圖16卷積神經(jīng)網(wǎng)絡(luò)的每一層是如何展示的。
圖15
?卷積神經(jīng)網(wǎng)絡(luò)的可視化?
一般來(lái)說(shuō),卷積步驟越多,神經(jīng)網(wǎng)絡(luò)能夠?qū)W習(xí)識(shí)別的特征就更復(fù)雜。例如,在圖像分類(lèi)中,卷積神經(jīng)網(wǎng)絡(luò)在第一層可能會(huì)學(xué)習(xí)檢測(cè)原始像素的邊緣,然后在第二層利用這些邊緣檢測(cè)簡(jiǎn)單形狀,然后在更高級(jí)的層用這些形狀來(lái)檢測(cè)高級(jí)特征,例如面部形狀 [14]。圖16演示了這個(gè)過(guò)程 —— 這些特征是使用卷積深度信念網(wǎng)絡(luò)學(xué)習(xí)的,這張圖片只是為了演示思路(這只是一個(gè)例子:實(shí)際上卷積過(guò)濾器識(shí)別出來(lái)的對(duì)象可能對(duì)人來(lái)說(shuō)并沒(méi)有什么意義)。
圖16: 卷積深度信念網(wǎng)絡(luò)學(xué)習(xí)特征
Adam Harley 創(chuàng)建了一個(gè)基于 MNIST 手寫(xiě)數(shù)字?jǐn)?shù)據(jù)集 [13]訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)的可視化。我強(qiáng)烈推薦大家?使用它來(lái)了解卷積神經(jīng)網(wǎng)絡(luò)的工作細(xì)節(jié)。
我們?cè)谙聢D中可以看到神經(jīng)網(wǎng)絡(luò)對(duì)于輸入數(shù)字“8”的具體操作細(xì)節(jié)。請(qǐng)注意,圖18中并未單獨(dú)顯示ReLU操作。
圖17:基于手寫(xiě)數(shù)字訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)的可視化
輸入圖像包含 1024 個(gè)像素點(diǎn)(32 × 32 圖像),第一個(gè)卷積層(卷積層1)由六個(gè)不同的5 × 5(步幅為1)過(guò)濾器與輸入圖像卷積而成。如圖所示,使用六個(gè)不同的過(guò)濾器得到深度為六的特征映射。
卷積層1之后是池化層1,它在卷積層1中的六個(gè)特征映射上分別進(jìn)行2 × 2最大池化(步幅為2)。將鼠標(biāo)指針移動(dòng)到池化層的任意像素上,可以觀(guān)察到它來(lái)自于2 x 2網(wǎng)格在前一個(gè)卷積層中的作用(如圖18所示)。注意到2 x 2網(wǎng)格中具有最大值(最亮的那個(gè))的像素點(diǎn)會(huì)被映射到池化層。
圖18:池化操作可視化
池化層1之后是十六個(gè)執(zhí)行卷積操作的5 × 5(步幅為1)卷積過(guò)濾器。然后是執(zhí)行2 × 2最大池化(步幅為2)的池化層2。 這兩層的作用與上述相同。
然后有三個(gè)完全連接(FC)層:
第一個(gè)FC層中有120個(gè)神經(jīng)元
第二個(gè)FC層中有100個(gè)神經(jīng)元
第三個(gè)FC層中的10個(gè)神經(jīng)元對(duì)應(yīng)于10個(gè)數(shù)字 —— 也稱(chēng)為輸出層
注意,在圖19中,輸出層的10個(gè)節(jié)點(diǎn)每一個(gè)都連接到第二個(gè)完全連接層中的全部100個(gè)節(jié)點(diǎn)(因此稱(chēng)為完全連接)。
另外,注意為什么輸出層中唯一明亮的節(jié)點(diǎn)是’8’ —— 這意味著神經(jīng)網(wǎng)絡(luò)對(duì)我們的手寫(xiě)數(shù)字進(jìn)行了正確分類(lèi)(節(jié)點(diǎn)亮度越高表示它的輸出更高,即8在所有數(shù)字中具有最高的概率)。
圖19:完全連接層可視化
該可視化系統(tǒng)的 3D 版本在此。
?其他卷積神經(jīng)網(wǎng)絡(luò)框架?
卷積神經(jīng)網(wǎng)絡(luò)始于20世紀(jì)90年代初。我們已經(jīng)討論了LeNet,它是最早的卷積神經(jīng)網(wǎng)絡(luò)之一。下面列出了其他一些有影響力的神經(jīng)網(wǎng)絡(luò)框架 [3] [4]。
LeNet (20世紀(jì)90年代):本文已詳述。
20世紀(jì)90年代到2012年:從20世紀(jì)90年代后期到2010年初,卷積神經(jīng)網(wǎng)絡(luò)正處于孵化期。隨著越來(lái)越多的數(shù)據(jù)和計(jì)算能力的提升,卷積神經(jīng)網(wǎng)絡(luò)可以解決的任務(wù)變得越來(lái)越有趣。
AlexNet(2012)?– 2012年,Alex Krizhevsky(和其他人)發(fā)布了?AlexNet,它是提升了深度和廣度版本的 LeNet,并在2012年以巨大優(yōu)勢(shì)贏得了 ImageNet 大規(guī)模視覺(jué)識(shí)別挑戰(zhàn)賽(ILSVRC)。這是基于之前方法的重大突破,目前 CNN 的廣泛應(yīng)用都要?dú)w功于 AlexNet。
ZF Net(2013)?– 2013年 ILSVRC 獲獎(jiǎng)?wù)邅?lái)自 Matthew Zeiler 和 Rob Fergus 的卷積網(wǎng)絡(luò)。它被稱(chēng)為?ZFNet(Zeiler 和 Fergus Net 的簡(jiǎn)稱(chēng))。它在 AlexNet 的基礎(chǔ)上通過(guò)調(diào)整網(wǎng)絡(luò)框架超參數(shù)對(duì)其進(jìn)行了改進(jìn)。
GoogLeNet(2014)?– 2014年 ILSVRC 獲獎(jiǎng)?wù)呤?Google 的?Szegedy 等人的卷積網(wǎng)絡(luò)。其主要貢獻(xiàn)是開(kāi)發(fā)了一個(gè)初始模塊,該模塊大大減少了網(wǎng)絡(luò)中的參數(shù)數(shù)量(4M,而 AlexNet 有60M)。
VGGNet(2014)?– 2014年 ILSVRC 亞軍是名為?VGGNet?的網(wǎng)絡(luò)。其主要貢獻(xiàn)在于證明了網(wǎng)絡(luò)深度(層數(shù))是影響性能的關(guān)鍵因素。
ResNets(2015)?– 何凱明(和其他人)開(kāi)發(fā)的殘差網(wǎng)絡(luò)是2015年 ILSVRC 的冠軍。ResNets 是迄今為止最先進(jìn)的卷積神經(jīng)網(wǎng)絡(luò)模型,并且是大家在實(shí)踐中使用卷積神經(jīng)網(wǎng)絡(luò)的默認(rèn)選擇(截至2016年5月)。
DenseNet(2016年8月)?– 最近由黃高等人發(fā)表,密集連接卷積網(wǎng)絡(luò)的每一層都以前饋方式直接連接到其他層。 DenseNet 已經(jīng)在五項(xiàng)競(jìng)爭(zhēng)激烈的對(duì)象識(shí)別基準(zhǔn)測(cè)試任務(wù)中證明自己比之前最先進(jìn)的框架有了顯著的改進(jìn)。具體實(shí)現(xiàn)請(qǐng)參考這個(gè)網(wǎng)址。
?結(jié)論?
本文中,我嘗試著用一些簡(jiǎn)單的術(shù)語(yǔ)解釋卷積神經(jīng)網(wǎng)絡(luò)背后的主要概念,同時(shí)簡(jiǎn)化/略過(guò)了幾個(gè)細(xì)節(jié)部分,但我希望這篇文章能夠讓你直觀(guān)地理解其工作原理。
本文最初是受 Denny Britz 《理解卷積神經(jīng)網(wǎng)絡(luò)在自然語(yǔ)言處理上的運(yùn)用》這篇文章的啟發(fā)(推薦閱讀),文中的許多解釋是基于這篇文章的。為了更深入地理解其中一些概念,我鼓勵(lì)您閱讀斯坦福大學(xué)卷積神經(jīng)網(wǎng)絡(luò)課程的筆記以及一下參考資料中提到的其他很棒的資源。如果您對(duì)上述概念的理解遇到任何問(wèn)題/建議,請(qǐng)隨時(shí)在下面留言。
文中所使用的所有圖像和動(dòng)畫(huà)均屬于其各自的作者,陳列如下。
參考
karpathy/neuraltalk2: Efficient Image Captioning code in Torch,?Examples
Shaoqing Ren, et al, “Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks”, 2015,?arXiv:1506.01497
Neural Network Architectures, Eugenio Culurciello’s blog
CS231n Convolutional Neural Networks for Visual Recognition, Stanford
Clarifai/Technology
Machine Learning is Fun! Part 3: Deep Learning and Convolutional Neural Networks
Feature extraction using convolution, Stanford
Wikipedia article on Kernel (image processing)
Deep Learning Methods for Vision, CVPR 2012 Tutorial
Neural Networks by Rob Fergus, Machine Learning Summer School 2015
What do the fully connected layers do in CNNs?
Convolutional Neural Networks, Andrew Gibiansky
W. Harley, “An Interactive Node-Link Visualization of Convolutional Neural Networks,” in ISVC, pages 867-877, 2015 (link).?Demo
Understanding Convolutional Neural Networks for NLP
Backpropagation in Convolutional Neural Networks
<a href="https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner" s-guide-to-understanding-convolutional-neural-networks-part-2="" "="" style="border: 0px; color: rgb(0, 153, 204);">A Beginner’s Guide To Understanding Convolutional Neural Networks
Vincent Dumoulin, et al, “A guide to convolution arithmetic for deep learning”, 2015,?arXiv:1603.07285
What is the difference between deep learning and usual machine learning?
How is a convolutional neural network able to learn invariant features?
A Taxonomy of Deep Convolutional Neural Nets for Computer Vision
Honglak Lee, et al, “Convolutional Deep Belief Networks for Scalable Unsupervised Learning of Hierarchical Representations” (link)
來(lái)源:伯樂(lè)在線(xiàn)
編輯?∑ Gemini
微信公眾號(hào)“算法數(shù)學(xué)之美”,由算法與數(shù)學(xué)之美團(tuán)隊(duì)打造的另一個(gè)公眾號(hào),歡迎大家掃碼關(guān)注!
更多精彩:
?如何向5歲小孩解釋什么是支持向量機(jī)(SVM)?
?自然底數(shù)e的意義是什么?
?費(fèi)馬大定理,集驚險(xiǎn)與武俠于一體
?簡(jiǎn)單的解釋,讓你秒懂“最優(yōu)化” 問(wèn)題
?一分鐘看懂一維空間到十維空間
??本科、碩士和博士到底有什么區(qū)別?
?小波變換通俗解釋
?微積分必背公式
?影響計(jì)算機(jī)算法世界的十位大師
?數(shù)據(jù)挖掘之七種常用的方法
算法數(shù)學(xué)之美微信公眾號(hào)歡迎賜稿
稿件涉及數(shù)學(xué)、物理、算法、計(jì)算機(jī)、編程等相關(guān)領(lǐng)域,經(jīng)采用我們將奉上稿酬。
投稿郵箱:math_alg@163.com
總結(jié)
以上是生活随笔為你收集整理的直白介绍卷积神经网络(CNN)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 爱因斯坦是怎样学习物理的?
- 下一篇: 国士无双伍连德