07 深度學(xué)習(xí)之卷積神經(jīng)網(wǎng)絡(luò)
1.整體結(jié)構(gòu)
全連接
相鄰層的所有神經(jīng)元之間都有連接
基于全連接層(A?ne層)的網(wǎng)絡(luò)

基于CNN的網(wǎng)絡(luò)

????????CNN的層的連接順序是“Convolution - ReLU -(Pooling)”(Pooling層有時(shí)會(huì)被省略)。這可以理解為之前的“Affi ne - ReLU”連接被替換成了“Convolution - ReLU -(Pooling)”連接。
????????靠近輸出的層中使用了之前的“Affine - ReLU”組合。此外,最后的輸出層中使用了之前的“Affi ne - Softmax”組合。
2.卷積層
目的
解決全連接層存在的問(wèn)題,數(shù)據(jù)的形狀被“忽視”了。
特征圖
CNN 中,稱(chēng)卷積層的輸入輸出數(shù)據(jù)為特征圖。
卷積運(yùn)算
卷積層進(jìn)行的處理就是卷積運(yùn)算。卷積運(yùn)算相當(dāng)于圖像處理中的“濾波器運(yùn)算”。
步驟:
(1)無(wú)偏置

????????(2)有偏置

這個(gè)值會(huì)被加到應(yīng)用了濾波器的所有元素上。
填充
(1)填充方法
在進(jìn)行卷積層的處理之前,有時(shí)要向輸入數(shù)據(jù)的周?chē)钊牍潭ǖ臄?shù)據(jù)(比如 0等)。對(duì)大小為 (4, 4)的輸入數(shù)據(jù)應(yīng)用了幅度為 1的填充?!胺葹?1的填充”是指用幅度為 1像素的 0填充周?chē)?/span>
(2)填充圖像

????????(3)填充目的
???????使用填充主要是為了調(diào)整輸出的大小,保證卷積運(yùn)算就在保持空間大小不變的情況下將數(shù)據(jù)傳給下一層。
步幅
應(yīng)用濾波器的位置間隔稱(chēng)為步幅。增大步幅后,輸出大小會(huì)變小。而增大填充后,輸出大小會(huì)變大。

如何計(jì)算輸出大小

3維數(shù)據(jù)的卷積運(yùn)算
圖像是3維數(shù)據(jù),除了高、長(zhǎng)方向之外,還需要處理通道方向。通道方向上有多個(gè)特征圖時(shí),會(huì)按通道進(jìn)行輸入數(shù)據(jù)和濾波器的卷積運(yùn)算,并將結(jié)果相加,從而得到輸出。


????????在3維數(shù)據(jù)的卷積運(yùn)算中,輸入數(shù)據(jù)和濾波器的通道數(shù)要設(shè)為相同的值。
結(jié)合方塊思考卷積運(yùn)算
(1)輸出一張?zhí)卣鲌D

????????(2)輸出多張?zhí)卣鲌D

????????需要用到多個(gè)濾波器(權(quán)重)。濾波器的權(quán)重?cái)?shù)據(jù)要按 (output_channel, input_channel, height, width)的順序書(shū)寫(xiě)。比如,通道數(shù)為 3、大小為 5 ×5的濾波器有 20個(gè)時(shí),可以寫(xiě)成 (20, 3, 5, 5)。
????????(3)加入偏置

????????這兩個(gè)方塊相加時(shí),要對(duì)濾波器的輸出結(jié)果 (FN, OH, OW)按通道加上相同的偏置值。另外,不同形狀的方塊相加時(shí),可以基于 NumPy的廣播功能輕松實(shí)現(xiàn)。
3.池化層
目的
池化是縮小高、長(zhǎng)方向上的空間的運(yùn)算。
Max池化的處理順序

????????Max池化”是獲取最大值的運(yùn)算.一般來(lái)說(shuō),池化的窗口大小會(huì)和步幅設(shè)定成相同的值。比如,3 ×3的窗口的步幅會(huì)設(shè)為 3,4 ×4的窗口的步幅會(huì)設(shè)為4。
池化層的特征
(1)沒(méi)有要學(xué)習(xí)的參數(shù)
(2)通道數(shù)不發(fā)生變化
(3)對(duì)微小的位置變化具有魯棒性(健壯)
4.卷積層和池化層的實(shí)現(xiàn)
基于 im2col 的展開(kāi)
(1)原因
如果老老實(shí)實(shí)地實(shí)現(xiàn)卷積運(yùn)算,估計(jì)要重復(fù)好幾層的 for語(yǔ)句。這樣的實(shí)現(xiàn)有點(diǎn)麻煩,而且,NumPy中存在使用 for語(yǔ)句后處理變慢的缺點(diǎn)。因此使用 im2col這個(gè)便利的函數(shù)進(jìn)行簡(jiǎn)單的實(shí)現(xiàn)。
(2)im2col的示意圖



卷積層的實(shí)現(xiàn)
(1)im2col提供的接口

????????(2)im2col初始化

????????(3)im2col來(lái)實(shí)現(xiàn)卷積層

Number(濾波器數(shù)量)、Channel、FilterHeight、FilterWidth的縮寫(xiě).輸入數(shù)據(jù)的四維形狀(N,C,H,W).這里通過(guò) reshape(FN,-1)將參數(shù)指定為 -1,這是reshape的一個(gè)便利的功能。reshape函數(shù)會(huì)自動(dòng)計(jì)算 -1維度上的元素個(gè)數(shù),以使多維數(shù)組的元素個(gè)數(shù)前后一致。比如,(10, 3, 5, 5)形狀的數(shù)組的元素個(gè)數(shù)共有 750個(gè),指定 reshape(10,-1)后,就會(huì)轉(zhuǎn)換成 (10, 75)形狀的數(shù)組。forward的實(shí)現(xiàn)中,最后會(huì)將輸出大小轉(zhuǎn)換為合適的形狀。

池化層的實(shí)現(xiàn)
(1)對(duì)輸入數(shù)據(jù)展開(kāi)池化的應(yīng)用區(qū)域

????????(2)求得池化的應(yīng)用區(qū)域內(nèi)的最大值

CNN 的實(shí)現(xiàn)

CNN 的可視化
(1)第 1 層權(quán)重的可視化
學(xué)習(xí)前的濾波器是隨機(jī)進(jìn)行初始化的,所以在黑白的濃淡上沒(méi)有規(guī)律可循,但學(xué)習(xí)后的濾波器變成了有規(guī)律的圖像。


????????(2)基于分層結(jié)構(gòu)的信息提取
????????如果堆疊了多層卷積層,則隨著層次加深,提取的信息也愈加復(fù)雜、抽象,這是深度學(xué)習(xí)中很有意思的一個(gè)地方。最開(kāi)始的層對(duì)簡(jiǎn)單的邊緣有響應(yīng),接下來(lái)的層對(duì)紋理有響應(yīng),再后面的層對(duì)更加復(fù)雜的物體部件有響應(yīng)。也就是說(shuō),隨著層次加深,神經(jīng)元從簡(jiǎn)單的形狀向“高級(jí)”信息變化。換句話說(shuō),就像我們理解東西的“含義”一樣,響應(yīng)的對(duì)象在逐漸變化。
具有代表性的 CNN
(1)LeNet
(2)AlexNet