最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

魚書(深度學習入門):第七章 卷積神經(jīng)網(wǎng)絡(luò)

2023-07-24 00:45 作者:棒棒x  | 我要投稿

????本章的主題是卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)。深度學習的方法幾乎都以CNN為基礎(chǔ)。本章將詳細介紹CNN的結(jié)構(gòu),并用Python實現(xiàn)其處理內(nèi)容。

一、整體結(jié)構(gòu)

????首先,來看一下CNN的網(wǎng)絡(luò)結(jié)構(gòu),了解CNN的大致框架。CNN和之前介紹的神經(jīng)網(wǎng)絡(luò)一樣,可以像樂高積木一樣通過組裝層來構(gòu)建。不過,CNN中新出現(xiàn)了卷積層(Convolution層)和池化層(Pooling層)。這里我們先看一下如何組裝層以構(gòu)建CNN。

????之前介紹的神經(jīng)網(wǎng)絡(luò)中,相鄰層的所有神經(jīng)元之間都有連接,這稱為全連接(fully-connected)。另外,我們用Affine層實現(xiàn)了全連接層。如果使用這個Affine層,一個5層的全連接的神經(jīng)網(wǎng)絡(luò)就可以通過下圖所示的網(wǎng)絡(luò)結(jié)構(gòu)來實現(xiàn)。

基于全連接層(Affine層)的網(wǎng)絡(luò)的例子

????如上圖所示,全連接的神經(jīng)網(wǎng)絡(luò)中,Affine層后面跟著激活函數(shù)ReLU層(或者Sigmoid層)。這里堆疊了4層“Affine-ReLU”組合,然后第5層是Affine層,最后由Softmax層輸出最終結(jié)果(概率)。

????CNN的結(jié)構(gòu)如下圖所示。

基于CNN的網(wǎng)絡(luò)的例子:新增了Convolution層和Pooling層(用灰色的方塊表示)

????如上圖所示,CNN中新增了Convolution層和Pooling層。CNN的層的連接順序是“Convolution - ReLU -(Pooling)”(Pooling層有時會被省略)。這可以理解為之前的“Affine - ReLU”連接被替換成了“Convolution - ReLU -(Pooling)”連接。

????還需要注意的是,在上圖的CNN中,靠近輸出的層中使用了之前 的“Affine - ReLU”組合。此外,最后的輸出層中使用了之前的“Affine - Softmax”組合。這些都是一般的CNN中比較常見的結(jié)構(gòu)。

二、卷積層

????1.全連接層存在的問題

????之前介紹的全連接的神經(jīng)網(wǎng)絡(luò)中使用了全連接層(Affine層)。在全連接層中,相鄰層的神經(jīng)元全部連接在一起,輸出的數(shù)量可以任意決定。全連接層存在什么問題呢?那就是數(shù)據(jù)的形狀被“忽視”了。全連接層輸入時,需要將3維數(shù)據(jù)拉平為1維數(shù)據(jù)。圖像是3維形狀,這個形狀中應(yīng)該含有重要的空間信息。但是,因為全連接層會忽視形狀,將全部的輸入數(shù)據(jù)作為相同的神經(jīng)元(同一維度的神經(jīng)元)處理,所以無法利用與形狀相關(guān)的信息。

????而卷積層可以保持形狀不變。當輸入數(shù)據(jù)是圖像時,卷積層會以3維數(shù)據(jù)的形式接收輸入數(shù)據(jù),并同樣以3維數(shù)據(jù)的形式輸出至下一層。因此, 在CNN中,可以(有可能)正確理解圖像等具有形狀的數(shù)據(jù)。

????另外,CNN 中,有時將卷積層的輸入輸出數(shù)據(jù)稱為特征圖(feature map)。其中,卷積層的輸入數(shù)據(jù)稱為輸入特征圖(input feature map),輸出數(shù)據(jù)稱為輸出特征圖(output feature map)。

????2.卷積運算

????卷積層進行的處理就是卷積運算。卷積運算相當于圖像處理中的“濾波器運算”。我們來看一個具體的例子。

卷積運算的例子:用“◎”符號表示卷積運算

????如上圖所示,卷積運算對輸入數(shù)據(jù)應(yīng)用濾波器。在這個例子中,輸入數(shù)據(jù)是有高長方向的形狀的數(shù)據(jù),濾波器也一樣,有高長方向上的維度。假設(shè)用(height, width)表示數(shù)據(jù)和濾波器的形狀,則在本例中,輸入大小是 (4, 4),濾波器大小是(3, 3),輸出大小是(2, 2)。另外,有的文獻中也會用“核” 這個詞來表示這里所說的“濾波器”。

????現(xiàn)在來解釋一下上圖的卷積運算的例子中都進行了什么樣的計算。下圖中展示了卷積運算的計算順序。

????

卷積運算的計算順序

????對于輸入數(shù)據(jù),卷積運算以一定間隔滑動濾波器的窗口并應(yīng)用。這里所說的窗口是指上圖中灰色的3 × 3的部分。將各個位置上濾波器的元素和輸入的對應(yīng)元素相乘,然后再求和(有時將這個計算稱為乘積累加運算)。然后,將這個結(jié)果保存到輸出的對應(yīng)位置。將這個過程在所有位置都進行一遍,就可以得到卷積運算的輸出。在全連接的神經(jīng)網(wǎng)絡(luò)中,除了權(quán)重參數(shù),還存在偏置。CNN中,濾波器的參數(shù)就對應(yīng)之前的權(quán)重。并且,CNN中也存在偏置。包含偏置的卷積運算的處理流如下圖所示。

卷積運算的偏置:向應(yīng)用了濾波器的元素加上某個固定值(偏置)

????如上圖所示,向應(yīng)用了濾波器的數(shù)據(jù)加上了偏置。偏置通常只有1個 (1 × 1)(本例中,相對于應(yīng)用了濾波器的4個數(shù)據(jù),偏置只有1個),這個值會被加到應(yīng)用了濾波器的所有元素上。

????3.填充

????在進行卷積層的處理之前,有時要向輸入數(shù)據(jù)的周圍填入固定的數(shù)據(jù)(比如0等),這稱為填充(padding),是卷積運算中經(jīng)常會用到的處理。在下圖的例子中,對大小為(4, 4)的輸入數(shù)據(jù)應(yīng)用了幅度為1的填充?!胺葹?的填充”是指用幅度為1像素的0填充周圍。

????

卷積運算的填充處理:向輸入數(shù)據(jù)的周圍填入0(圖中用虛線表示填充,并省略了填充的內(nèi)容“0”)

????如上圖所示,通過填充,大小為(4, 4)的輸入數(shù)據(jù)變成了(6, 6)的形狀。 然后,應(yīng)用大小為(3, 3)的濾波器,生成了大小為(4, 4)的輸出數(shù)據(jù)。這個例子中將填充設(shè)成了1,不過填充的值也可以設(shè)置成2、3等任意的整數(shù)。

????使用填充主要是為了調(diào)整輸出的大小。因為如果每次進行卷積運算都會縮小空間,那么在某個時刻輸出大小就有可能變?yōu)?1,導致無法再應(yīng)用卷積運算。為了避免出現(xiàn)這樣的情況,就要使用填充。在剛才的例子中,將填充的幅度設(shè)為 1,那么相對于輸入大小(4, 4),輸出大小也保持為原來的(4, 4)。因此,卷積運算就可以在保持空間大小不變的情況下將數(shù)據(jù)傳給下一層。

????4.步幅
????
應(yīng)用濾波器的位置間隔稱為步幅(stride)。之前的例子中步幅都是1,如果將步幅設(shè)為2,則如下圖所示,應(yīng)用濾波器的窗口的間隔變?yōu)?個元素。

????

步幅為2的卷積運算的例子

????步幅可以指定應(yīng)用濾波器的間隔。增大步幅后,輸出大小會變小。而增大填充后,輸出大小會變大。我們可以將這樣的關(guān)系寫成算式。接下來,我們看一下對于填充和步幅,如何計算輸出大小。這里,假設(shè)輸入大小為(H, W),濾波器大小為(FH, FW),輸出大小為(OH, OW),填充為P,步幅為S。此時,輸出大小可通過下式進行計算。

????這里需要注意的是,雖然只要代入值就可以計算輸出大小,但是所設(shè)定的值必須使兩個式子分別可以除盡。當輸出大小無法除盡時(結(jié)果是小數(shù)時),需要采取報錯等對策。根據(jù)深度學習的框架的不同,當值無法除盡時,有時會向最接近的整數(shù)四舍五入,不進行報錯而繼續(xù)運行。

????5.3維數(shù)據(jù)的卷積運算

????之前的卷積運算的例子都是以有高、長方向的2維形狀為對象的。但是, 圖像是3維數(shù)據(jù),除了高、長方向之外,還需要處理通道方向。這里,我們按照與之前相同的順序,看一下對加上了通道方向的3維數(shù)據(jù)進行卷積運算的例子。

????這里以3通道的數(shù)據(jù)為例, 展示了卷積運算的結(jié)果。和2維數(shù)據(jù)時相比,可以發(fā)現(xiàn)縱深方向(通道方向)上特征圖增加了。通道方向上有多個特征圖時,會按通道進行輸入數(shù)據(jù)和濾波器的卷積運算,并將結(jié)果相加,從而得到輸出。其運算順序如下圖所示。

對3維數(shù)據(jù)進行卷積運算的計算順序

????需要注意的是,在3維數(shù)據(jù)的卷積運算中,輸入數(shù)據(jù)和濾波器的通道數(shù)要設(shè)為相同的值。濾波器大小可以設(shè)定為任意值(不過,每個通道的濾波器大小要全部相同)。

????6.結(jié)合方塊思考

????將數(shù)據(jù)和濾波器結(jié)合長方體的方塊來考慮,3維數(shù)據(jù)的卷積運算會很容易理解。方塊是如下圖所示的3維長方體。把3維數(shù)據(jù)表示為多維數(shù)組時,書寫順序為(channel, height, width)。比如,通道數(shù)為C、高度為H、 長度為W的數(shù)據(jù)的形狀可以寫成(C, H, W)。濾波器也一樣,要按(channel, height, width)的順序書寫。比如,通道數(shù)為C、濾波器高度為FH(Filter Height)、長度為FW(Filter Width)時,可以寫成(C, FH, FW)。

結(jié)合方塊思考卷積運算。請注意方塊的形狀

????在這個例子中,數(shù)據(jù)輸出是1張?zhí)卣鲌D。所謂1張?zhí)卣鲌D,換句話說,就是通道數(shù)為1的特征圖。那么,如果要在通道方向上也擁有多個卷積運算的輸出,該怎么做呢?為此,就需要用到多個濾波器(權(quán)重)。用圖表示的話, 如下圖所示。

????

基于多個濾波器的卷積運算的例子

? ? 上圖中,通過應(yīng)用FN個濾波器,輸出特征圖也生成了FN個。如果將這FN個特征圖匯集在一起,就得到了形狀為(FN, OH, OW)的方塊。將這個方塊傳給下一層,就是CNN的處理流。關(guān)于卷積運算的濾波器,也必須考慮濾波器的數(shù)量。因此,作為4維數(shù)據(jù),濾波器的權(quán)重數(shù)據(jù)要按(output_channel, input_ channel, height, width)的順序書寫。比如,通道數(shù)為3、大小為5 × 5的濾波器有20個時,可以寫成(20, 3, 5, 5)。

????卷積運算中(和全連接層一樣)存在偏置。在上圖的例子中,如果進一步追加偏置的加法運算處理,則結(jié)果如下圖所示。

卷積運算的處理流(追加了偏置項)

????????上圖中,每個通道只有一個偏置。這里,偏置的形狀是(FN, 1, 1), 濾波器的輸出結(jié)果的形狀是(FN, OH, OW)。這兩個方塊相加時,要對濾波器的輸出結(jié)果(FN, OH, OW)按通道加上相同的偏置值。其可以通過Numpy的廣播機制實現(xiàn)。

????7.批處理

????神經(jīng)網(wǎng)絡(luò)的處理中進行了將輸入數(shù)據(jù)打包的批處理。通過批處理,能夠?qū)崿F(xiàn)處理的高效化和學習時對mini-batch的對應(yīng)。我們希望卷積運算也同樣對應(yīng)批處理。為此,需要將在各層間傳遞的數(shù)據(jù)保存為4維數(shù)據(jù)。具體地講,就是按(batch_num, channel, height, width) 的順序保存數(shù)據(jù)。例如改成對N個數(shù)據(jù)進行批處理時,其數(shù)據(jù)形狀如下圖所示。

卷積運算的處理流(批處理)

????上圖的批處理版的數(shù)據(jù)流中,在各個數(shù)據(jù)的開頭添加了批用的維度。像這樣,數(shù)據(jù)作為4維的形狀在各層間傳遞。這里需要注意的是,網(wǎng)絡(luò)間傳遞的是4維數(shù)據(jù),對這N個數(shù)據(jù)進行了卷積運算。也就是說,批處理將N次的處理匯總成了1次進行。

三、池化層

????池化是縮小高、長方向上的空間的運算。比如,如下圖所示,進行將2 × 2的區(qū)域集約成1個元素的處理,縮小空間大小。

????

Max池化的處理順序

????上圖的例子是按步幅2進行2 × 2的Max池化時的處理順序?!癕ax 池化”是獲取最大值的運算,“2 × 2”表示目標區(qū)域的大小。此外,這個例子中將步幅設(shè)為了2,一般來說,池化的窗口大小會和步幅設(shè)定成相同的值。

????除了Max池化之外,還有Average池化等。相對于Max池化是從目標區(qū)域中取出最大值,Average池化則是計算目標區(qū)域的平均值。在圖像識別領(lǐng)域,主要使用Max池化。因此,此處說到“池化層” 時,指的是Max池化。

????池化層有以下特征。

????沒有要學習的參數(shù) 池化層和卷積層不同,沒有要學習的參數(shù)。池化只是從目標區(qū)域中取最大值(或者平均值),所以不存在要學習的參數(shù)。

????通道數(shù)不發(fā)生變化?經(jīng)過池化運算,輸入數(shù)據(jù)和輸出數(shù)據(jù)的通道數(shù)不會發(fā)生變化。如下圖所示,計算是按通道獨立進行的。

池化中通道數(shù)不變

????對微小的位置變化具有魯棒性(健壯)輸入數(shù)據(jù)發(fā)生微小偏差時,池化仍會返回相同的結(jié)果。因此,池化對輸入數(shù)據(jù)的微小偏差具有魯棒性。如下圖所示,池化會吸收輸入數(shù)據(jù)的偏差(根據(jù)數(shù)據(jù)的不同,結(jié)果有可能不一致)。

輸入數(shù)據(jù)在寬度方向上只偏離1個元素時,輸出仍為相同的結(jié)果(根據(jù)數(shù)據(jù)的不同,有時結(jié)果也不相同)

四、卷積層和池化層的實現(xiàn)

????前面我們詳細介紹了卷積層和池化層,本節(jié)我們就用Python來實現(xiàn)這兩個層。和第5章一樣,也給進行實現(xiàn)的類賦予forward和backward方法,并使其可以作為模塊使用。通過使用某 種技巧,就可以很輕松地實現(xiàn)卷積層和池化層。本節(jié)將介紹這種技巧,將問題簡化,然后再 進行卷積層的實現(xiàn)。

????1.4維數(shù)組
????
如前所述,CNN中各層間傳遞的數(shù)據(jù)是4維數(shù)據(jù)。所謂4維數(shù)據(jù),比如數(shù)據(jù)的形狀是(10, 1, 28, 28),則它對應(yīng)10個高為28、長為28、通道為1的數(shù)據(jù)。如下所示。



????CNN中處理的是4維數(shù)據(jù),因此卷積運算的實現(xiàn)看上去會很復雜,但是通過使用下面要介紹的im2col這個技巧,問題就會變得很簡單。

????2.基于 im2col的展開

????im2col是一個函數(shù),將輸入數(shù)據(jù)展開以適合濾波器(權(quán)重)。如下圖所示,對3維的輸入數(shù)據(jù)應(yīng)用im2col后,數(shù)據(jù)轉(zhuǎn)換為2維矩陣(正確地講,是把包含批數(shù)量的4維數(shù)據(jù)轉(zhuǎn)換成了2維數(shù)據(jù))。

im2col的示意圖

????im2col會把輸入數(shù)據(jù)展開以適合濾波器(權(quán)重)。具體地說,如下圖所示,對于輸入數(shù)據(jù),將應(yīng)用濾波器的區(qū)域(3維方塊)橫向展開為1列。im2col會在所有應(yīng)用濾波器的地方進行這個展開處理。

將濾波器的應(yīng)用區(qū)域從頭開始依次橫向展開為1列

????在上圖中,為了便于觀察,將步幅設(shè)置得很大,以使濾波器的應(yīng)用區(qū)域不重疊。在實際的卷積運算中,濾波器的應(yīng)用區(qū)域幾乎都是重疊的。在濾波器的應(yīng)用區(qū)域重疊的情況下,使用im2col展開后,展開后的元素個數(shù)會多于原方塊的元素個數(shù)。因此,使用im2col的實現(xiàn)存在比普通的實現(xiàn)消耗更 多內(nèi)存的缺點。但是,匯總成一個大的矩陣進行計算,對計算機的計算頗有益處。

????使用im2col展開輸入數(shù)據(jù)后,之后就只需將卷積層的濾波器(權(quán)重)縱向展開為1列,并計算2個矩陣的乘積即可。這和全連接層的 Affine層進行的處理基本相同。

????如下圖所示,基于im2col方式的輸出結(jié)果是2維矩陣。因為CNN中數(shù)據(jù)會保存為4維數(shù)組,所以要將2維輸出數(shù)據(jù)轉(zhuǎn)換為合適的形狀。以上就是卷積層的實現(xiàn)流程。


卷積運算的濾波器處理的細節(jié):將濾波器縱向展開為1列,并計算和im2col展開的數(shù)據(jù)的矩陣乘積,最后轉(zhuǎn)換(reshape)為輸出數(shù)據(jù)的大小

? ? 3.卷積層的實現(xiàn)

????此處提供了im2col函數(shù),并將這個im2col函數(shù)作為黑盒(不關(guān)心內(nèi)部實現(xiàn))使用。im2col會考慮濾波器大小、步幅、填充,將輸入數(shù)據(jù)展開為2維數(shù)組。im2col這一便捷函數(shù)具有以下接口。

????下面是兩個使用的例子。

????

????現(xiàn)在使用im2col來實現(xiàn)卷積層。這里我們將卷積層實現(xiàn)為名為Convolution的類。

????

????卷積層的初始化方法將濾波器(權(quán)重)、偏置、步幅、填充作為參數(shù)接收。濾波器是 (FN, C, FH, FW)的4維形狀。這里用粗體字表示Convolution層的實現(xiàn)中的重要部分。在這些粗體字部分,用im2col展開輸入數(shù)據(jù),并用reshape將濾波器展開為2維數(shù)組。然后,計算展開后的矩陣的乘積。

????這里通過reshape(FN,-1)將參數(shù)指定為-1,這是reshape的一個便利的功能。通過在reshape時指定為-1,reshape函數(shù)會自動計算-1維度上的元素個數(shù),以使多維數(shù)組的元素個數(shù)前后一致。forward的實現(xiàn)中,最后會將輸出大小轉(zhuǎn)換為合適的形狀。轉(zhuǎn)換時使用了NumPy的transpose函數(shù)。transpose會更改多維數(shù)組的軸的順序。如下圖所示,通過指定從0開始的索引(編號)序列,就可以更改軸的順序。

基于NumPy的transpose的軸順序的更改:通過指定索引(編號),更改軸的順序

????以上就是卷積層的forward處理的實現(xiàn)。通過使用im2col進行展開,基本上可以像實現(xiàn)全連接層的Affine層一樣來實現(xiàn)。接下來是卷積層的反向傳播的實現(xiàn),因為和Affine層的實現(xiàn)有很多共通的地方,所以就不再介紹了。但有一點需要注意,在進行卷積層的反向傳播時,必須進行im2col 的逆處理。這可以使用本書提供的col2im函數(shù)來進行。除了使用col2im這一點,卷積層的反向傳播和Affi ne層的實現(xiàn)方式都一樣。

????4.池化層的實現(xiàn)

????池化層的實現(xiàn)和卷積層相同,都使用im2col展開輸入數(shù)據(jù)。不過,池化的情況下,在通道方向上是獨立的,這一點和卷積層不同。具體地講,如下圖所示,池化的應(yīng)用區(qū)域按通道單獨展開。

對輸入數(shù)據(jù)展開池化的應(yīng)用區(qū)域(2×2的池化的例子)

????像這樣展開之后,只需對展開的矩陣求各行的最大值,并轉(zhuǎn)換為合適的形狀即可,如下圖所示。
????

池化層的實現(xiàn)流程:池化的應(yīng)用區(qū)域內(nèi)的最大值元素用灰色表示

????如上圖所示,池化層的實現(xiàn)按下面3個階段進行。1.展開輸入數(shù)據(jù)。2.求各行的最大值。3.轉(zhuǎn)換為合適的輸出大小。各階段的實現(xiàn)都很簡單,只有一兩行代碼。

????下面來看一下Python的實現(xiàn)代碼。

? ? 值得注意的是,最大值的計算可以使用 NumPy 的 np.max方法。np.max可以指定axis參數(shù),并在這個參數(shù)指定的各個軸方向上求最大值。

????以上就是池化層的forward處理的介紹。如上所述,通過將輸入數(shù)據(jù)展開為容易進行池化的形狀,后面的實現(xiàn)就會變得非常簡單。另外,池化層的backward處理可以參考ReLU層的實現(xiàn)中使用的max的反向傳播。

五、CNN的實現(xiàn)

????我們已經(jīng)實現(xiàn)了卷積層和池化層,現(xiàn)在來組合這些層,搭建進行手寫數(shù)字識別的CNN。這里要實現(xiàn)如下圖所示的CNN。

簡單CNN的網(wǎng)絡(luò)構(gòu)成

????如上圖所示,網(wǎng)絡(luò)的構(gòu)成是“Convolution - ReLU - Pooling -Affine - ReLU - Affine - Softmax”,我們將它實現(xiàn)為名為SimpleConvNet的類。?

????首先來看一下SimpleConvNet的初始化(__init__),取下面這些參數(shù)。

????

????這里,卷積層的超參數(shù)通過名為conv_param的字典傳入。我們設(shè)想它會像{'filter_num':30,'filter_size':5, 'pad':0, 'stride':1}這樣,保存必要的超參數(shù)值。

????SimpleConvNet的初始化的實現(xiàn)稍長,我們分成3部分來說明,首先是初始化的最開始部分。

????這里將由初始化參數(shù)傳入的卷積層的超參數(shù)從字典中取了出來(以方便后面使用),然后,計算卷積層的輸出大小。接下來是權(quán)重參數(shù)的初始化部分。

????學習所需的參數(shù)是第1層的卷積層和剩余兩個全連接層的權(quán)重和偏置。 將這些參數(shù)保存在實例變量的params字典中。最后,生成必要的層。

????

????從最前面開始按順序向有序字典(OrderedDict)的layers中添加層。只 有最后的SoftmaxWithLoss層被添加到別的變量lastLayer中。

????以上就是SimpleConvNet的初始化中進行的處理。像這樣初始化后,進行推理的predict方法和求損失函數(shù)值的loss方法就可以像下面這樣實現(xiàn)。

????用于推理的predict方法從頭開始依次調(diào)用已添加的層,并將結(jié)果傳遞給下一層。在求損失函數(shù)的loss方法中,除了使用 predict方法進行的 forward處理之外,還會繼續(xù)進行forward處理,直到到達最后的SoftmaxWithLoss層。

????接下來是基于誤差反向傳播法求梯度的代碼實現(xiàn)。

????參數(shù)的梯度通過誤差反向傳播法(反向傳播)求出,通過把正向傳播和反向傳播組裝在一起來完成。因為已經(jīng)在各層正確實現(xiàn)了正向傳播和反向傳播的功能,所以這里只需要以合適的順序調(diào)用即可。最后,把各個權(quán)重參數(shù)的梯度保存到grads字典中。這就是SimpleConvNet的實現(xiàn)。

????如上所述,卷積層和池化層是圖像識別中必備的模塊。CNN可以有效讀取圖像中的某種特性,在手寫數(shù)字識別中,還可以實現(xiàn)高精度的識別。

六、CNN的可視化

????本節(jié)將通過卷積層的可視化, 探索CNN中到底進行了什么處理。

????1.第1層權(quán)重的可視化

????這里,我們來比較一下學習前和學習后的權(quán)重,結(jié)果如下圖所示。

學習前和學習后的第1層的卷積層的權(quán)重:雖然權(quán)重的元素是實數(shù),但是在圖像的顯示上,統(tǒng)一將最小值顯示為黑色(0),最大值顯示為白色(255)

????上圖中,學習前的濾波器是隨機進行初始化的,所以在黑白的濃淡上沒有規(guī)律可循,但學習后的濾波器變成了有規(guī)律的圖像。我們發(fā)現(xiàn),通過學習,濾波器被更新成了有規(guī)律的濾波器,比如從白到黑漸變的濾波器、含有塊狀區(qū)域(稱為blob)的濾波器等。

????如果要問上圖中右邊的有規(guī)律的濾波器在“觀察”什么,答案就是它在觀察邊緣(顏色變化的分界線)和斑塊(局部的塊狀區(qū)域)等。比如,左半部分為白色、右半部分為黑色的濾波器的情況下,如下圖所示,會對垂直方向上的邊緣有響應(yīng)。

????

對水平方向上和垂直方向上的邊緣有響應(yīng)的濾波器:輸出圖像1中,垂直方向的邊緣上出現(xiàn)白色像素,輸出圖像2中,水平方向的邊緣上出現(xiàn)很多白色像素

????上圖中顯示了選擇兩個學習完的濾波器對輸入圖像進行卷積處理時的結(jié)果。我們發(fā)現(xiàn)“濾波器1”對垂直方向上的邊緣有響應(yīng),“濾波器2”對水平方向上的邊緣有響應(yīng)。

????由此可知,卷積層的濾波器會提取邊緣或斑塊等原始信息。而剛才實現(xiàn)的CNN會將這些原始信息傳遞給后面的層。

????2.基于分層結(jié)構(gòu)的信息提取

????上面的結(jié)果是針對第1層的卷積層得出的。第1層的卷積層中提取了邊緣或斑塊等“低級”信息,那么在堆疊了多層的CNN中,各層中又會提取什么樣的信息呢?根據(jù)深度學習的可視化相關(guān)的研究,隨著層次加深,提取的信息(正確地講,是反映強烈的神經(jīng)元)也越來越抽象。

????下圖中展示了進行一般物體識別(車或狗等)的8層CNN。這個網(wǎng)絡(luò)結(jié)構(gòu)的名稱是下一節(jié)要介紹的AlexNet。AlexNet網(wǎng)絡(luò)結(jié)構(gòu)堆疊了多層卷積層和池化層,最后經(jīng)過全連接層輸出結(jié)果。下圖的方塊表示的是中間數(shù)據(jù), 對于這些中間數(shù)據(jù),會連續(xù)應(yīng)用卷積運算。

CNN的卷積層中提取的信息。第1層的神經(jīng)元對邊緣或斑塊有響應(yīng),第3層對紋理有響應(yīng),第5層對物體部件有響應(yīng),最后的全連接層對物體的類別(狗或車)有響應(yīng)

????如上圖所示,如果堆疊了多層卷積層,則隨著層次加深,提取的信息也愈加復雜、抽象,這是深度學習中很有意思的一個地方。最開始的層對簡單的邊緣有響應(yīng),接下來的層對紋理有響應(yīng),再后面的層對更加復雜的物體部件有響應(yīng)。也就是說,隨著層次加深,神經(jīng)元從簡單的形狀向“高級”信息變化。換句話說,就像我們理解東西的“含義”一樣,響應(yīng)的對象在逐漸變化。

七、具有代表性的 CNN

????這里,我們介紹其中特別重要的兩個網(wǎng)絡(luò),一個是在1998年首次被提出的CNN元祖LeNet, 另一個是在深度學習受到關(guān)注的2012年被提出的AlexNet。

????1.LeNet

????LeNet在1998年被提出,是進行手寫數(shù)字識別的網(wǎng)絡(luò)。如下圖所示,它有連續(xù)的卷積層和池化層(正確地講,是只“抽選元素”的子采樣層),最后經(jīng)全連接層輸出結(jié)果。

LeNet的網(wǎng)絡(luò)結(jié)構(gòu)

????和“現(xiàn)在的CNN”相比,LeNet有幾個不同點。第一個不同點在于激活函數(shù)。LeNet中使用sigmoid函數(shù),而現(xiàn)在的CNN中主要使用ReLU函數(shù)。此外,原始的LeNet中使用子采樣(subsampling)縮小中間數(shù)據(jù)的大小,而現(xiàn)在的CNN中Max池化是主流。綜上,LeNet與現(xiàn)在的CNN雖然有些許不同,但差別并不是那么大。想到LeNet是20多年前提出的最早的CNN,還是很令人稱奇的。

????2.AlexNet

????在LeNet問世20多年后,AlexNet被發(fā)布出來。AlexNet是引發(fā)深度學習熱潮的導火線,不過它的網(wǎng)絡(luò)結(jié)構(gòu)和LeNet基本上沒有什么不同,如下圖所示。

AlexNet

????AlexNet疊有多個卷積層和池化層,最后經(jīng)由全連接層輸出結(jié)果。雖然結(jié)構(gòu)上AlexNet和LeNet沒有大的不同,但有以下幾點差異。1.激活函數(shù)使用ReLU。 2.使用進行局部正規(guī)化的LRN(Local Response Normalization)層。 3.使用Dropout

????如上所述,關(guān)于網(wǎng)絡(luò)結(jié)構(gòu),LeNet和AlexNet沒有太大的不同。但是,圍繞它們的環(huán)境和計算機技術(shù)有了很大的進步。具體地說,現(xiàn)在任何人都可以獲得大量的數(shù)據(jù)。而且,擅長大規(guī)模并行計算的GPU得到普及,高速進行大量的運算已經(jīng)成為可能。大數(shù)據(jù)和GPU已成為深度學習發(fā)展的巨大的原動力。

魚書(深度學習入門):第七章 卷積神經(jīng)網(wǎng)絡(luò)的評論 (共 條)

分享到微博請遵守國家法律
滨州市| 咸阳市| 竹山县| 木兰县| 交城县| 九台市| 三明市| 巴马| 即墨市| 烟台市| 大悟县| 沅江市| 英吉沙县| 桂平市| 达拉特旗| 江西省| 宝坻区| 崇礼县| 许昌县| 东丽区| 昭苏县| 高邑县| 哈尔滨市| 惠东县| 上林县| 漠河县| 望江县| 文山县| 恩平市| 海林市| 岳普湖县| 微山县| 保德县| 东莞市| 临湘市| 海兴县| 泌阳县| 永安市| 丰镇市| 崇阳县| 巴彦县|