吳恩達《深度學習工程師》Part4.Week1 卷積神經網絡

1.1 計算機視覺
本節介紹了深度學習在另一個重要領域的應用:計算機視覺(Computer Vision)。

列舉了三個典型的使用案例:圖像分類、目標識別以及圖片的風格轉換。

由於全連接神經網絡在直接處理圖片樣本時,輸入空間的緯度太大,會造成模型參數數量太大,很難獲得足夠的樣本數據來防止模型過擬合,另外,巨大的模型也會過度佔用內存,成本過高。

最後,引出了卷積神經網絡的概念,這種包含卷積處理的神經網絡很適用於處理圖片數據。

1.2 邊緣檢測示例
本節以圖片的邊緣檢測爲例,介紹了卷積運算的具體實現步驟。
下圖爲實現垂直邊緣檢測的卷積運算:
圖1

圖1 垂直邊緣檢測的卷積運算過程

最左邊數組爲待檢測圖片的灰度值,中間數組爲實現垂直邊緣檢測的濾波器(filter)或者叫核(kernel),最右邊的數組爲完成卷積運算後的結果。

1.3 更多邊緣檢測內容
將卷積核中的數值進行變換後可以實現不同的檢測目標,例如將1.2節中的卷積核旋轉90°就可以實現水平邊緣檢測,當數值改變後還可以變成Sobel濾波器,Scharr濾波器等。
這裏寫圖片描述

圖2 不同類型的卷積核

在深度學習中,不一定需要直接使用別人已經構造好的濾波器,而是可以轉換思路,將卷積核中的參數視爲參數變量W ,通過反向傳播算法,對這些參數變量W 進行學習,並最終獲得一組性能有益的邊緣檢測卷積核,不僅能夠實現簡單的水平和垂直邊緣檢測,還可以檢測任意角度的邊緣。

1.4 Padding
如圖2所示,再經歷一次卷積運算後,圖片的尺寸會減小(6×6變爲4×4),因此在卷積運算前可以對原始圖片進行填充(padding)操作。Padding是指在原始圖片周圍填充一圈或幾圈數字,一般填充的值可以爲0。

進行Padding的好處是:
1.防止圖片尺寸的減小 2.防止圖片周邊信息的丟失。

根據是否進行Padding操作,可以將卷積運算分爲Valid卷積和Same卷積。
這裏寫圖片描述

圖3 兩種不同類型的卷積運算

其中,Valid卷積是指,不對圖片進行Padding操作。設圖片原始尺寸爲n×n ,卷積核尺寸爲f×f ,那麼一次卷積運算後,圖片的尺寸就變爲(nf+1)×(nf+1)

Same卷積是指,對圖片進行Padding操作,保持圖片尺寸不變。設圖片原始尺寸爲n×n ,卷積核尺寸爲f×f ,Padding的像素值(圈數)爲p ,那麼有以下等式成立:

n+2pf+1=n

從而得到:
p=f12

常見的卷積核長度大多爲奇數,有兩個好處:1. 使得Padding值爲整數 2.方便確定卷積核的中心,利於確定卷積核的位置。

1.5 卷積步長
前面的卷積操作中,卷積核在滑動時每次移動一個單位,也就是步長(stride)爲1。如果步長爲s時,卷積運算後圖片尺寸可由下式計算:

n+2pfs+1

其中 爲向下取整運算符,在卷積核到達邊緣後,如果剩餘尺寸小於卷積核尺寸,該部分將被捨去。

在機器學習文獻中的卷積操作和數學及信號處理中的操作有所不同,在數學及信號處理中的卷積運算前,卷積核先要進行水平和垂直方向的兩次鏡像操作,然後進行卷積運算。而在機器學習中,卷積核直接進行計算,這樣並不影響計算結果,且省去了兩次鏡像的操作。

1.6 卷積中“卷”的體現
前面講的卷積操作都是針對灰度圖像的,對於RGB彩色圖像,由於它是由R、G、B三個通道構成的,卷積操作將會變爲一種立體(3D)的操作,卷積核的通道數應該與圖片的通道數相同。如下圖所示,當兩個不同的卷積核分別進行垂直邊緣和水平邊緣的檢測,
這裏寫圖片描述

圖4 多通道卷積操作

每個卷積核的尺寸爲3×3×3,對圖片進行卷積操作後將這27個數值相加,得到最後的結果,並將這兩個數組堆疊起來,形成4×4×2的三維矩陣。

1.7 單層卷積網絡
本節介紹了一個單層卷積網絡的計算流程,以下圖爲例:
這裏寫圖片描述

圖5 單層卷積網絡的一個例子

輸入圖片數據爲a[0] ,經過卷積運算與權重矩陣W 相乘,加上偏置b ,在每個濾波器中偏置b 爲一個實數,然後進行非線性函數Relu運算,得到輸出a[1]

z[1]=W[1]a[0]+b[1]
a[1]=g(z[1])

如果該層有10個濾波器,每個濾波器緯度爲3×3×3,那麼在該層有(27+1)×10共280個參數,無論輸入的圖片尺寸多大,都不會影響該層模型參數的個數,這是卷積神經網絡的一個特徵,可以避免過擬合。

如果l 層爲卷積層,各部分參數如下:
濾波器(filter)尺寸爲f[l]
填充(Padding)值爲p[l]
步長(stride)爲s[l]
濾波器個數nc[l]
輸入數據尺寸爲nH[l1]×nW[l1]×nc[l1]
輸出數據的尺寸爲:nH[l]×nW[l]×nc[l]
其中:nH[l]=nH[l1]+2p[l]f[l]s[l]+1
nW[l]=nW[l1]+2p[l]f[l]s[l]+1
每個濾波器的尺寸爲:f[l]×f[l]×nc[l1]
激活矩陣的尺寸爲:nH[l]×nW[l]×nc[l]
若執行批量梯度下降,有m個例子,則激活矩陣的尺寸爲:m×nH[l]×nW[l]×nc[l]
權重矩陣的尺寸爲:f[l]×f[l]×nc[l1]×nc[l]
偏置矩陣的尺寸爲:(111nc[l])

1.8 簡單卷積網絡示例
如下圖所示:
這裏寫圖片描述

圖6 簡單卷積網絡例子

輸入層尺寸爲39×39×3,
第一個卷積層濾波器尺寸爲3×3×3,stride爲1,padding爲0,濾波器個數爲10
輸出層a[0] 尺寸爲37×37×10
第二個卷積層濾波器尺寸爲5×5×10,stride爲2,padding爲0,濾波器個數爲20
輸出層a[1] 尺寸爲17×17×20
第三個卷積層濾波器尺寸爲5×5×20,stride爲2,padding爲0,濾波器個數爲40
輸出層a[2] 尺寸爲7×7×40
最後的全連接層輸入爲1960,代入非線性激活函數logsitic或softmax。
常用的卷積層除了有卷積運算外,還有池化(pooling)層,全連接(fully connected)層。

1.9 池化層
除了卷積層外,卷積神經網絡還經常使用池化層。池化層能夠減小模型的規模,提高計算速度,同時提高所提取特徵的魯棒性。

池化層的超參數包括濾波器尺寸f 以及步長s ,一旦fs 確定下來,池化操作就是個固定的運算,不需要參數的學習,梯度下降不會對其產生影響。

池化層的一個類型是最大池化層(Max pooling),最大池化層能夠提取窗口內的一個特徵並保留下來。如果圖片存在多個通道,則池化層分別對每個通道進行運算。

池化層的另一個類型是平均池化層(Average pooling),但是沒有最大池化層常用。一個例外的情況是很深的網絡中,可用平均池化層對網絡進行分解,如一個7×7×1000的網絡,通過平均池化可以變爲1×1×1000的網絡。

1.10 卷積神經網絡示例
本節參考LeNet-5構造了一個識別手寫數字的神經網絡,如圖所示。
這裏寫圖片描述

圖7 識別手寫數字的神經網絡

包括CONV1→POOL1→CONV2→POOL2→FC3→FC4→Softmax
這裏寫圖片描述
圖8 參數數量

從表中可以看出,有很多超參數,在選取這些參數的時候,儘量不要自己去直接設定,而是參考文獻中其他人的模型。輸入層和池化層沒有參數,卷積層的參數較少,而全連接層中的參數很多。隨着層數的增多,激活值的尺寸迅速下降,但是不能下降的太快。

1.11 爲什麼使用卷積
和全連接層相比,卷積層的優點是:降低模型規模、參數共享和稀疏連接。
1.降低模型規模。一個32×32×3的圖片,如果進行卷積操作,卷積核尺寸爲5,個數爲6,則輸出爲28×28×6,卷積層的參數有26×6共156個。如果按照全連接層建模,則參數爲32×32×3×28×28×6=14,450,688個。
2.參數共享。一個檢測器在圖片的一部分適用的話,在其他部分也可能適用。
3.稀疏連接。在一個卷積層中,輸出值只依賴於幾個輸入,其他區域對輸出沒有影響。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章