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

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

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

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

如何計算輸出大小

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


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

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

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

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

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



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

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

????????(3)im2col來實現(xiàn)卷積層

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

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

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

CNN 的實現(xiàn)

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


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