神经网络CNN解释
from:https://blog.csdn.net/ruiyiin/article/details/77113973
這篇文章原地址為An Intuitive Explanation of Convolutional Neural Networks,卷積神經(jīng)網(wǎng)絡(luò)的講解非常通俗易懂。
什么是卷積神經(jīng)網(wǎng)絡(luò)?為什么它們很重要?
卷積神經(jīng)網(wǎng)絡(luò)(ConvNets 或者 CNNs)屬于神經(jīng)網(wǎng)絡(luò)的范疇,已經(jīng)在諸如圖像識(shí)別和分類(lèi)的領(lǐng)域證明了其高效的能力。卷積神經(jīng)網(wǎng)絡(luò)可以成功識(shí)別人臉、物體和交通信號(hào),從而為機(jī)器人和自動(dòng)駕駛汽車(chē)提供視力。
在上圖中,卷積神經(jīng)網(wǎng)絡(luò)可以識(shí)別場(chǎng)景,也可以提供相關(guān)的標(biāo)簽,比如“橋梁”、“火車(chē)”和“網(wǎng)球”;而下圖展示了卷積神經(jīng)網(wǎng)絡(luò)可以用來(lái)識(shí)別日常物體、人和動(dòng)物。最近,卷積神經(jīng)網(wǎng)絡(luò)也在一些自然語(yǔ)言處理任務(wù)(比如語(yǔ)句分類(lèi))上面展示了良好的效果。
因此,卷積神經(jīng)網(wǎng)絡(luò)對(duì)于今天大多數(shù)的機(jī)器學(xué)習(xí)用戶來(lái)說(shuō)都是一個(gè)重要的工具。然而,理解卷積神經(jīng)網(wǎng)絡(luò)以及首次學(xué)習(xí)使用它們有時(shí)會(huì)很痛苦。那本篇博客的主要目的就是讓我們對(duì)卷積神經(jīng)網(wǎng)絡(luò)如何處理圖像有一個(gè)基本的了解。
如果你是神經(jīng)網(wǎng)絡(luò)的新手,我建議你閱讀下這篇短小的多層感知器的教程,在進(jìn)一步閱讀前對(duì)神經(jīng)網(wǎng)絡(luò)有一定的理解。在本篇博客中,多層感知器叫做“全連接層”。
LeNet 架構(gòu) (1990s)
LeNet 是推進(jìn)深度學(xué)習(xí)領(lǐng)域發(fā)展的最早的卷積神經(jīng)網(wǎng)絡(luò)之一。經(jīng)過(guò)多次成功迭代,到 1988 年,Yann LeCun 把這一先驅(qū)工作命名為?LeNet5。當(dāng)時(shí),LeNet 架構(gòu)主要用于字符識(shí)別任務(wù),比如讀取郵政編碼、數(shù)字等等。
接下來(lái),我們將會(huì)了解 LeNet 架構(gòu)是如何學(xué)會(huì)識(shí)別圖像的。近年來(lái)有許多在 LeNet 上面改進(jìn)的新架構(gòu)被提出來(lái),但它們都使用了 LeNet 中的主要概念,如果你對(duì) LeNet 有一個(gè)清晰的認(rèn)識(shí),就相對(duì)比較容易理解。
上圖中的卷積神經(jīng)網(wǎng)絡(luò)和原始的 LeNet 的結(jié)構(gòu)比較相似,可以把輸入的圖像分為四類(lèi):狗、貓、船或者鳥(niǎo)(原始的 LeNet 主要用于字符識(shí)別任務(wù))。正如上圖說(shuō)示,當(dāng)輸入為一張船的圖片時(shí),網(wǎng)絡(luò)可以正確的從四個(gè)類(lèi)別中把最高的概率分配給船(0.94)。在輸出層所有概率的和應(yīng)該為一(本文稍后會(huì)解釋)。
There are four main operations in the ConvNet shown in Figure 3 above:
在上圖中的 ConvNet 有四個(gè)主要操作:
這些操作對(duì)于各個(gè)卷積神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō)都是基本組件,因此理解它們的工作原理有助于充分了解卷積神經(jīng)網(wǎng)絡(luò)。下面我們將會(huì)嘗試?yán)斫飧鞑讲僮鞅澈蟮脑怼?/p>
圖像是像素值的矩陣
本質(zhì)上來(lái)說(shuō),每張圖像都可以表示為像素值的矩陣:
通道?常用于表示圖像的某種組成。一個(gè)標(biāo)準(zhǔn)數(shù)字相機(jī)拍攝的圖像會(huì)有三通道 - 紅、綠和藍(lán);你可以把它們看作是互相堆疊在一起的二維矩陣(每一個(gè)通道代表一個(gè)顏色),每個(gè)通道的像素值在 0 到 255 的范圍內(nèi)。
灰度圖像,僅僅只有一個(gè)通道。在本篇文章中,我們僅考慮灰度圖像,這樣我們就只有一個(gè)二維的矩陣來(lái)表示圖像。矩陣中各個(gè)像素的值在 0 到 255 的范圍內(nèi)——零表示黑色,255 表示白色。
卷積
卷積神經(jīng)網(wǎng)絡(luò)的名字就來(lái)自于其中的卷積操作。卷積的主要目的是為了從輸入圖像中提取特征。卷積可以通過(guò)從輸入的一小塊數(shù)據(jù)中學(xué)到圖像的特征,并可以保留像素間的空間關(guān)系。我們?cè)谶@里并不會(huì)詳細(xì)講解卷積的數(shù)學(xué)細(xì)節(jié),但我們會(huì)試著理解卷積是如何處理圖像的。
As we discussed above, every image can be considered as a matrix of pixel values. Consider a 5 x 5 image whose pixel values are only 0 and 1 (note that for a grayscale image, pixel values range from 0 to 255, the green matrix below is a special case where pixel values are only 0 and 1):
正如我們上面所說(shuō),每張圖像都可以看作是像素值的矩陣。考慮一下一個(gè) 5 x 5 的圖像,它的像素值僅為 0 或者 1(注意對(duì)于灰度圖像而言,像素值的范圍是 0 到 255,下面像素值為 0 和 1 的綠色矩陣僅為特例):
同時(shí),考慮下另一個(gè) 3 x 3 的矩陣,如下所示:
接下來(lái),5 x 5 的圖像和 3 x 3 的矩陣的卷積可以按下圖所示的動(dòng)畫(huà)一樣計(jì)算:
現(xiàn)在停下來(lái)好好理解下上面的計(jì)算是怎么完成的。我們用橙色的矩陣在原始圖像(綠色)上滑動(dòng),每次滑動(dòng)一個(gè)像素(也叫做“步長(zhǎng)”),在每個(gè)位置上,我們計(jì)算對(duì)應(yīng)元素的乘積(兩個(gè)矩陣間),并把乘積的和作為最后的結(jié)果,得到輸出矩陣(粉色)中的每一個(gè)元素的值。注意,3 x 3 的矩陣每次步長(zhǎng)中僅可以“看到”輸入圖像的一部分。
在 CNN 的術(shù)語(yǔ)中,3x3 的矩陣叫做“濾波器(filter)”或者“核(kernel)”或者“特征檢測(cè)器(feature detector)”,通過(guò)在圖像上滑動(dòng)濾波器并計(jì)算點(diǎn)乘得到矩陣叫做“卷積特征(Convolved Feature)”或者“激活圖(Activation Map)”或者“特征圖(Feature Map)”。記住濾波器在原始輸入圖像上的作用是特征檢測(cè)器。
從上面圖中的動(dòng)畫(huà)可以看出,對(duì)于同樣的輸入圖像,不同值的濾波器將會(huì)生成不同的特征圖。比如,對(duì)于下面這張輸入圖像:
In the table below, we can see the effects of convolution of the above image with different filters. As shown, we can perform operations such as Edge Detection, Sharpen and Blur just by changing the numeric values of our filter matrix before the convolution operation?8?– this means that different filters can detect different features from an image, for example edges, curves etc. More such examples are available in Section 8.2.4 here.
在下表中,我們可以看到不同濾波器對(duì)上圖卷積的效果。正如表中所示,通過(guò)在卷積操作前修改濾波矩陣的數(shù)值,我們可以進(jìn)行諸如邊緣檢測(cè)、銳化和模糊等操作 —— 這表明不同的濾波器可以從圖中檢測(cè)到不同的特征,比如邊緣、曲線等。在這里的 8.2.4 部分中可以看到更多的例子。
另一個(gè)理解卷積操作的好方法是看下面這張圖的動(dòng)畫(huà):
濾波器(紅色框)在輸入圖像滑過(guò)(卷積操作),生成一個(gè)特征圖。另一個(gè)濾波器(綠色框)在同一張圖像上卷積可以得到一個(gè)不同的特征圖。注意卷積操作可以從原圖上獲取局部依賴(lài)信息。同時(shí)注意這兩個(gè)不同的濾波器是如何從同一張圖像上生成不同的特征圖。記住上面的圖像和兩個(gè)濾波器僅僅是我們上面討論的數(shù)值矩陣。
在實(shí)踐中,CNN 會(huì)在訓(xùn)練過(guò)程中學(xué)習(xí)到這些濾波器的值(盡管我們依然需要在訓(xùn)練前指定諸如濾波器的個(gè)數(shù)、濾波器的大小、網(wǎng)絡(luò)架構(gòu)等參數(shù))。我們使用的濾波器越多,提取到的圖像特征就越多,網(wǎng)絡(luò)所能在未知圖像上識(shí)別的模式也就越好。
特征圖的大小(卷積特征)由下面三個(gè)參數(shù)控制,我們需要在卷積前確定它們:
- 深度(Depth):深度對(duì)應(yīng)的是卷積操作所需的濾波器個(gè)數(shù)。在下圖的網(wǎng)絡(luò)中,我們使用三個(gè)不同的濾波器對(duì)原始圖像進(jìn)行卷積操作,這樣就可以生成三個(gè)不同的特征圖。你可以把這三個(gè)特征圖看作是堆疊的 2d 矩陣,那么,特征圖的“深度”就是三。
-
步長(zhǎng)(Stride):步長(zhǎng)是我們?cè)谳斎刖仃嚿匣瑒?dòng)濾波矩陣的像素?cái)?shù)。當(dāng)步長(zhǎng)為 1 時(shí),我們每次移動(dòng)濾波器一個(gè)像素的位置。當(dāng)步長(zhǎng)為 2 時(shí),我們每次移動(dòng)濾波器會(huì)跳過(guò) 2 個(gè)像素。步長(zhǎng)越大,將會(huì)得到更小的特征圖。
-
零填充(Zero-padding):有時(shí),在輸入矩陣的邊緣使用零值進(jìn)行填充,這樣我們就可以對(duì)輸入圖像矩陣的邊緣進(jìn)行濾波。零填充的一大好處是可以讓我們控制特征圖的大小。使用零填充的也叫做泛卷積,不適用零填充的叫做嚴(yán)格卷積。這個(gè)概念在下面的參考文獻(xiàn) 14 中介紹的非常詳細(xì)。
非線性簡(jiǎn)介(ReLU)
An additional operation called ReLU has been used after every Convolution operation in Figure 3 above. ReLU stands for Rectified Linear Unit and is a non-linear operation. Its output is given by:
在上面圖中,在每次的卷積操作后都使用了一個(gè)叫做 ReLU 的操作。ReLU 表示修正線性單元(Rectified Linear Unit),是一個(gè)非線性操作。它的輸入如下所示:
ReLU 是一個(gè)元素級(jí)別的操作(應(yīng)用到各個(gè)像素),并將特征圖中的所有小于 0 的像素值設(shè)置為零。ReLU 的目的是在 ConvNet 中引入非線性,因?yàn)樵诖蟛糠值奈覀兿M?ConvNet 學(xué)習(xí)的實(shí)際數(shù)據(jù)是非線性的(卷積是一個(gè)線性操作——元素級(jí)別的矩陣相乘和相加,所以我們需要通過(guò)使用非線性函數(shù) ReLU 來(lái)引入非線性。
ReLU 操作可以從下面的圖中理解。它展示的 ReLU 操作是應(yīng)用到上面圖 6 得到的特征圖之一。這里的輸出特征圖也可以看作是“修正”過(guò)的特征圖。
其他非線性函數(shù),比如 tanh 或者 sigmoid 也可以用來(lái)替代 ReLU,但 ReLU 在大部分情況下表現(xiàn)是更好的。
池化操作
空間池化(Spatial Pooling)(也叫做亞采用或者下采樣)降低了各個(gè)特征圖的維度,但可以保持大部分重要的信息。空間池化有下面幾種方式:最大化、平均化、加和等等。
對(duì)于最大池化(Max Pooling),我們定義一個(gè)空間鄰域(比如,2x2 的窗口),并從窗口內(nèi)的修正特征圖中取出最大的元素。除了取最大元素,我們也可以取平均(Average Pooling)或者對(duì)窗口內(nèi)的元素求和。在實(shí)際中,最大池化被證明效果更好一些。
下面的圖展示了使用 2x2 窗口在修正特征圖(在卷積 + ReLU 操作后得到)使用最大池化的例子。
我們以 2 個(gè)元素(也叫做“步長(zhǎng)”)滑動(dòng)我們 2x2 的窗口,并在每個(gè)區(qū)域內(nèi)取最大值。如上圖所示,這樣操作可以降低我們特征圖的維度。
在下圖展示的網(wǎng)絡(luò)中,池化操作是分開(kāi)應(yīng)用到各個(gè)特征圖的(注意,因?yàn)檫@樣的操作,我們可以從三個(gè)輸入圖中得到三個(gè)輸出圖)。
下圖展示了在圖 9 中我們?cè)?ReLU 操作后得到的修正特征圖的池化操作的效果。
池化函數(shù)可以逐漸降低輸入表示的空間尺度。特別地,池化:
- 使輸入表示(特征維度)變得更小,并且網(wǎng)絡(luò)中的參數(shù)和計(jì)算的數(shù)量更加可控的減小,因此,可以控制過(guò)擬合
- 使網(wǎng)絡(luò)對(duì)于輸入圖像中更小的變化、冗余和變換變得不變性(輸入的微小冗余將不會(huì)改變池化的輸出——因?yàn)槲覀冊(cè)诰植苦徲蛑惺褂昧俗畲蠡?平均值的操作。
- 幫助我們獲取圖像最大程度上的尺度不變性(準(zhǔn)確的詞是“不變性”)。它非常的強(qiáng)大,因?yàn)槲覀兛梢詸z測(cè)圖像中的物體,無(wú)論它們位置在哪里(參考?18?和?19?獲取詳細(xì)信息)。
目前為止的故事
到目前為止我們了解了卷積、ReLU 和池化是如何操作的。理解這些層是構(gòu)建任意 CNN 的基礎(chǔ)是很重要的。正如上圖所示,我們有兩組卷積、ReLU & 池化層 —— 第二組卷積層使用六個(gè)濾波器對(duì)第一組的池化層的輸出繼續(xù)卷積,得到一共六個(gè)特征圖。接下來(lái)對(duì)所有六個(gè)特征圖應(yīng)用 ReLU。接著我們對(duì)六個(gè)修正特征圖分別進(jìn)行最大池化操作。
這些層一起就可以從圖像中提取有用的特征,并在網(wǎng)絡(luò)中引入非線性,減少特征維度,同時(shí)保持這些特征具有某種程度上的尺度變化不變性。
第二組池化層的輸出作為全連接層的輸入,我們會(huì)在下一部分介紹全連接層。
全連接層
全連接層是傳統(tǒng)的多層感知器,在輸出層使用的是 softmax 激活函數(shù)(也可以使用其他像 SVM 的分類(lèi)器,但在本文中只使用 softmax)。“全連接(Fully Connected)”這個(gè)詞表明前面層的所有神經(jīng)元都與下一層的所有神經(jīng)元連接。如果你對(duì)多層感知器不熟悉的話,我推薦你閱讀這篇文章。
卷積和池化層的輸出表示了輸入圖像的高級(jí)特征。全連接層的目的是為了使用這些特征把輸入圖像基于訓(xùn)練數(shù)據(jù)集進(jìn)行分類(lèi)。比如,在下面圖中我們進(jìn)行的圖像分類(lèi)有四個(gè)可能的輸出結(jié)果(注意下圖并沒(méi)有顯示全連接層的節(jié)點(diǎn)連接)。
除了分類(lèi),添加一個(gè)全連接層也(一般)是學(xué)習(xí)這些特征的非線性組合的簡(jiǎn)單方法。從卷積和池化層得到的大多數(shù)特征可能對(duì)分類(lèi)任務(wù)有效,但這些特征的組合可能會(huì)更好。
從全連接層得到的輸出概率和為 1。這個(gè)可以在輸出層使用 softmax 作為激活函數(shù)進(jìn)行保證。softmax 函數(shù)輸入一個(gè)任意大于 0 值的矢量,并把它們轉(zhuǎn)換為零一之間的數(shù)值矢量,其和為一。
把它們組合起來(lái)——使用反向傳播進(jìn)行訓(xùn)練
正如上面討論的,卷積 + 池化層的作用是從輸入圖像中提取特征,而全連接層的作用是分類(lèi)器。
注意在下面的圖中,因?yàn)檩斎氲膱D像是船,對(duì)于船這一類(lèi)的目標(biāo)概率是 1,而其他三類(lèi)的目標(biāo)概率是 0,即
- 輸入圖像 = 船
- 目標(biāo)矢量 = [0, 0, 1, 0]
完整的卷積網(wǎng)絡(luò)的訓(xùn)練過(guò)程可以總結(jié)如下:
-
第一步:我們初始化所有的濾波器,使用隨機(jī)值設(shè)置參數(shù)/權(quán)重
-
第二步:網(wǎng)絡(luò)接收一張訓(xùn)練圖像作為輸入,通過(guò)前向傳播過(guò)程(卷積、ReLU 和池化操作,以及全連接層的前向傳播),找到各個(gè)類(lèi)的輸出概率
- 我們假設(shè)船這張圖像的輸出概率是 [0.2, 0.4, 0.1, 0.3]
- 因?yàn)閷?duì)于第一張訓(xùn)練樣本的權(quán)重是隨機(jī)分配的,輸出的概率也是隨機(jī)的
-
第三步:在輸出層計(jì)算總誤差(計(jì)算 4 類(lèi)的和)
- Total Error = ∑ ???(target probability?– output probability)?2
-
第四步:使用反向傳播算法,根據(jù)網(wǎng)絡(luò)的權(quán)重計(jì)算誤差的梯度,并使用梯度下降算法更新所有濾波器的值/權(quán)重以及參數(shù)的值,使輸出誤差最小化
- 權(quán)重的更新與它們對(duì)總誤差的占比有關(guān)
- 當(dāng)同樣的圖像再次作為輸入,這時(shí)的輸出概率可能會(huì)是 [0.1, 0.1, 0.7, 0.1],這就與目標(biāo)矢量 [0, 0, 1, 0] 更接近了
- 這表明網(wǎng)絡(luò)已經(jīng)通過(guò)調(diào)節(jié)權(quán)重/濾波器,可以正確對(duì)這張?zhí)囟▓D像的分類(lèi),這樣輸出的誤差就減小了
- 像濾波器數(shù)量、濾波器大小、網(wǎng)絡(luò)結(jié)構(gòu)等這樣的參數(shù),在第一步前都是固定的,在訓(xùn)練過(guò)程中保持不變——僅僅是濾波器矩陣的值和連接權(quán)重在更新
-
第五步:對(duì)訓(xùn)練數(shù)據(jù)中所有的圖像重復(fù)步驟 1 ~ 4
上面的這些步驟可以訓(xùn)練?ConvNet —— 這本質(zhì)上意味著對(duì)于訓(xùn)練數(shù)據(jù)集中的圖像,ConvNet 在更新了所有權(quán)重和參數(shù)后,已經(jīng)優(yōu)化為可以對(duì)這些圖像進(jìn)行正確分類(lèi)。
當(dāng)一張新的(未見(jiàn)過(guò)的)圖像作為 ConvNet 的輸入,網(wǎng)絡(luò)將會(huì)再次進(jìn)行前向傳播過(guò)程,并輸出各個(gè)類(lèi)別的概率(對(duì)于新的圖像,輸出概率是使用已經(jīng)在前面訓(xùn)練樣本上優(yōu)化分類(lèi)的參數(shù)進(jìn)行計(jì)算的)。如果我們的訓(xùn)練數(shù)據(jù)集非常的大,網(wǎng)絡(luò)將會(huì)(有希望)對(duì)新的圖像有很好的泛化,并把它們分到正確的類(lèi)別中去。
注 1: 上面的步驟已經(jīng)簡(jiǎn)化,也避免了數(shù)學(xué)詳情,只為提供訓(xùn)練過(guò)程的直觀內(nèi)容。可以參考文獻(xiàn)?4?和?12?了解數(shù)學(xué)公式和完整過(guò)程。
注 2:在上面的例子中我們使用了兩組卷積和池化層。然而請(qǐng)記住,這些操作可以在一個(gè) ConvNet 中重復(fù)多次。實(shí)際上,現(xiàn)在有些表現(xiàn)最好的 ConvNet 擁有多達(dá)十幾層的卷積和池化層!同時(shí),每次卷積層后面不一定要有池化層。如下圖所示,我們可以在池化操作前連續(xù)使用多個(gè)卷積 + ReLU 操作。還有,請(qǐng)注意 ConvNet 的各層在下圖中是如何可視化的。
卷積神經(jīng)網(wǎng)絡(luò)的可視化
一般而言,越多的卷積步驟,網(wǎng)絡(luò)可以學(xué)到的識(shí)別特征就越復(fù)雜。比如,ConvNet 的圖像分類(lèi)可能在第一層從原始像素中檢測(cè)出邊緣,然后在第二層使用邊緣檢測(cè)簡(jiǎn)單的形狀,接著使用這些形狀檢測(cè)更高級(jí)的特征,比如更高層的人臉。下面的圖中展示了這些內(nèi)容——我們使用卷積深度置信網(wǎng)絡(luò)學(xué)習(xí)到的特征,這張圖僅僅是用來(lái)證明上面的內(nèi)容(這僅僅是一個(gè)例子:真正的卷積濾波器可能會(huì)檢測(cè)到對(duì)我們毫無(wú)意義的物體)。
Adam Harley 創(chuàng)建了一個(gè)卷積神經(jīng)網(wǎng)絡(luò)的可視化結(jié)果,使用的是 MNIST 手寫(xiě)數(shù)字的訓(xùn)練集13。我強(qiáng)烈建議使用它來(lái)理解 CNN 的工作原理。
我們可以在下圖中看到網(wǎng)絡(luò)是如何識(shí)別輸入 “8” 的。注意下圖中的可視化并沒(méi)有單獨(dú)展示 ReLU 操作。
輸入圖像包含 1024 個(gè)像素(32 x 32 大小),第一個(gè)卷積層(卷積層 1)由六個(gè)獨(dú)特的 5x5 (步長(zhǎng)為 1)的濾波器組成。如圖可見(jiàn),使用六個(gè)不同的濾波器得到一個(gè)深度為六的特征圖。
卷積層 1 后面是池化層 1,在卷積層 1 得到的六個(gè)特征圖上分別進(jìn)行 2x2 的最大池化(步長(zhǎng)為 2)的操作。你可以在池化層上把鼠標(biāo)移動(dòng)到任意的像素上,觀察在前面卷積層(如上圖所示)得到的 4x4 的小格。你會(huì)發(fā)現(xiàn) 4x4 小格中的最大值(最亮)的像素將會(huì)進(jìn)入到池化層。
池化層 1 后面的是十六個(gè) 5x5 (步長(zhǎng)為 1)的卷積濾波器,進(jìn)行卷積操作。后面就是池化層 2,進(jìn)行 2x2 的最大池化(步長(zhǎng)為 2)的操作。這兩層的概念和前面描述的一樣。
接下來(lái)我們就到了三個(gè)全連接層。它們是:
- 第一個(gè)全連接層有 120 個(gè)神經(jīng)元
- 第二層全連接層有 100 個(gè)神經(jīng)元
- 第三個(gè)全連接層有 10 個(gè)神經(jīng)元,對(duì)應(yīng) 10 個(gè)數(shù)字——也就做輸出層
注意在下圖中,輸出層中的 10 個(gè)節(jié)點(diǎn)的各個(gè)都與第二個(gè)全連接層的所有 100 個(gè)節(jié)點(diǎn)相連(因此叫做全連接)。
同時(shí),注意在輸出層那個(gè)唯一的亮的節(jié)點(diǎn)是如何對(duì)應(yīng)于數(shù)字 “8” 的——這表明網(wǎng)絡(luò)把我們的手寫(xiě)數(shù)字正確分類(lèi)(越亮的節(jié)點(diǎn)表明從它得到的輸出值越高,即,8 是所有數(shù)字中概率最高的)。
同樣的 3D 可視化可以在這里看到。
其他的 ConvNet 架構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)從上世紀(jì) 90 年代初期開(kāi)始出現(xiàn)。我們上面提到的 LeNet 是早期卷積神經(jīng)網(wǎng)絡(luò)之一。其他有一定影響力的架構(gòu)如下所示3:
- LeNet (1990s): 本文已介紹。
- 1990s to 2012:在上世紀(jì) 90 年代后期至 2010 年初期,卷積神經(jīng)網(wǎng)絡(luò)進(jìn)入孵化期。隨著數(shù)據(jù)量和計(jì)算能力的逐漸發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)可以處理的問(wèn)題變得越來(lái)越有趣。
- AlexNet (2012) – 在 2012,Alex Krizhevsky (與其他人)發(fā)布了?AlexNet,它是比 LeNet 更深更寬的版本,并在 2012 年的 ImageNet 大規(guī)模視覺(jué)識(shí)別大賽(ImageNet Large Scale Visual Recognition Challenge,ILSVRC)中以巨大優(yōu)勢(shì)獲勝。這對(duì)于以前的方法具有巨大的突破,當(dāng)前 CNN 大范圍的應(yīng)用也是基于這個(gè)工作。
- ZF Net (2013) – ILSVRC 2013 的獲勝者是來(lái)自 Matthew Zeiler 和 Rob Fergus 的卷積神經(jīng)網(wǎng)絡(luò)。它以?ZFNet(Zeiler & Fergus Net 的縮寫(xiě))出名。它是在 AlexNet 架構(gòu)超參數(shù)上進(jìn)行調(diào)整得到的效果提升。
- GoogLeNet (2014) – ILSVRC 2014 的獲勝者是來(lái)自于 Google 的?Szegedy等人的卷積神經(jīng)網(wǎng)絡(luò)。它的主要貢獻(xiàn)在于使用了一個(gè) Inception 模塊,可以大量減少網(wǎng)絡(luò)的參數(shù)個(gè)數(shù)(4M,AlexNet 有 60M 的參數(shù))。
- VGGNet (2014) – 在 ILSVRC 2014 的領(lǐng)先者中有一個(gè)?VGGNet?的網(wǎng)絡(luò)。它的主要貢獻(xiàn)是展示了網(wǎng)絡(luò)的深度(層數(shù))對(duì)于性能具有很大的影響。
- ResNets (2015) –?殘差網(wǎng)絡(luò)是何凱明(和其他人)開(kāi)發(fā)的,并贏得 ILSVRC 2015 的冠軍。ResNets 是當(dāng)前卷積神經(jīng)網(wǎng)絡(luò)中最好的模型,也是實(shí)踐中使用 ConvNet 的默認(rèn)選擇(截至到 2016 年五月)。
- DenseNet (2016 八月) – 近來(lái)由 Gao Huang (和其他人)發(fā)表的,the Densely Connected Convolutional Network?的各層都直接于其他層以前向的方式連接。DenseNet 在五種競(jìng)爭(zhēng)積累的目標(biāo)識(shí)別基準(zhǔn)任務(wù)中,比以前最好的架構(gòu)有顯著的提升。可以在這里看 Torch 實(shí)現(xiàn)。
總結(jié)
在本篇文章中,我嘗試使用簡(jiǎn)單的方式來(lái)解釋卷積神經(jīng)網(wǎng)絡(luò)背后的主要概念。我簡(jiǎn)化/跳過(guò)了一些細(xì)節(jié),但希望本篇文章可以讓你對(duì)它們有一定的了解。
本文最開(kāi)始是受 Denny Britz 的理解用于自然語(yǔ)言處理的卷積神經(jīng)網(wǎng)絡(luò)(我強(qiáng)烈建議閱讀)啟發(fā),大量的解釋也是基于那篇文章。如果你想要對(duì)這些概念有更深的理解,我建議你瀏覽一下?Stanford 的 ConvNet 課程中的筆記,以及下面所列的參考文獻(xiàn)。如果你對(duì)上面的概念有什么疑問(wèn),或者有問(wèn)題和建議,歡迎在下面留言。
本文中使用的所有圖像和動(dòng)畫(huà)的版權(quán)都?xì)w下面參考文獻(xiàn)中對(duì)應(yīng)作者所有。
參考文獻(xiàn)
Vincent Dumoulin, et al, “A guide to convolution arithmetic for deep learning”, 2015,?arXiv:1603.07285
轉(zhuǎn)自http://www.hackcv.com/index.php/archives/104/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: Halcon—Tuple中符号的含义
- 下一篇: LFW人脸数据库的简介