4.1)深度卷積網絡:卷積神經網絡基礎

目錄

1)Computer vision

2)Edge detection example(理解)

3)More edge detection

4)Padding(重點)

5)Strided convolutions(重點)

6)Convolutions over volumes

7)One layer of a convolutional network(重點)

8)A simple convolution network example

9)Pooling layers(理解)

10)Convolutional neural network example

11)Why concolutions?


以下筆記是吳恩達老師深度學習課程第四門課第一週的的學習筆記:Foundations of Convolutional Neural Networks。筆記參考了黃海廣博士的內容,在此表示感謝。


1)Computer vision

計算機視覺(Computer Vision)的高速發展標誌着新型應用產生的可能,例如自動駕駛、人臉識別、創造新的藝術風格。人們對於計算機視覺的研究也催生了很多機算機視覺與其他領域的交叉成果。一般的計算機視覺問題包括以下幾類:

  • 圖片分類(Image Classification)
  • 目標檢測(Object detection)
  • 神經風格轉換(Neural Style Transfer)

應用計算機視覺時要面臨的一個挑戰是數據的維度可能會非常大。例如一張 1000x1000x3 的圖片,神經網絡輸入層的維度將高達三百萬,使得網絡權重 W 非常龐大。這樣會造成兩個後果:

  1. 神經網絡結構複雜,數據量相對較少,容易出現過擬合
  2. 所需內存和計算量巨大

因此,一般的神經網絡很難處理蘊含着大量數據的圖像。解決這一問題的方法就是使用卷積神經網絡(Convolutional Neural Network, CNN)


2)Edge detection example(理解)

最常見的邊緣檢測有兩類:垂直邊緣(Vertical Edges)檢測水平邊緣(Horizontal Edges)檢測

圖片的邊緣檢測可以通過與相應濾波器進行卷積來實現。以垂直邊緣檢測爲例,原始圖片尺寸爲 6x6,中間的矩陣被稱作濾波器(filter),尺寸爲 3x3,卷積後得到的圖片尺寸爲 4x4,得到結果如下(數值表示灰度,以左上角和右下角的值爲例):

可以看到,卷積運算的求解過程是從左到右,由上到下,每次在原始圖片矩陣中取與濾波器同等大小的一部分,每一部分中的值與濾波器中的值對應相乘後求和,將結果組成一個矩陣。

下圖對應一個垂直邊緣檢測的例子:

如果將最右邊的矩陣當作圖像,那麼中間一段亮一些的區域對應最左邊的圖像中間的垂直邊緣。

這裏有另一個卷積運算的動態的例子,方便理解:

圖中的*表示卷積運算符號。在計算機中這個符號表示一般的乘法,而在不同的深度學習框架中,卷積操作的 API 定義可能不同:

  • 在 Python 中,卷積用conv_forward()表示

  • 在 Tensorflow 中,卷積用tf.nn.conv2d()表示

  • 在 keras 中,卷積用Conv2D()表示。


3)More edge detection

如果將灰度圖左右的顏色進行翻轉,再與之前的濾波器進行卷積,得到的結果也有區別。實際應用中,這反映了由明變暗和由暗變明的兩種漸變方式。可以對輸出圖片取絕對值操作,以得到同樣的結果。

垂直邊緣檢測和水平邊緣檢測的濾波器如下所示:

其他常用的濾波器還有 Sobel 濾波器和 Scharr 濾波器。它們增加了中間行的權重,以提高結果的穩健性。

濾波器中的值還可以設置爲參數,通過模型訓練來得到。這樣,神經網絡使用反向傳播算法可以學習到一些低級特徵,從而實現對圖片所有邊緣特徵的檢測,而不僅限於垂直邊緣和水平邊緣。


4)Padding(重點)

假設輸入圖片的大小爲 n \times n,而濾波器的大小爲 f \times f,則卷積後的輸出圖片大小爲 (n-f+1) \times (n-f+1)

這樣就有兩個問題:

  • 每次卷積運算後,輸出圖片的尺寸縮小;

  • 原始圖片的角落、邊緣區像素點在輸出中採用較少,輸出圖片丟失邊緣位置的很多信息。

爲了解決這些問題,可以在進行卷積操作前,對原始圖片在邊界上進行填充(Padding),以增加矩陣的大小。通常將 0 作爲填充值。

設每個方向擴展像素點數量爲p,則填充後原始圖片的大小爲 $(n+2p) \times (n+2p)$,濾波器大小保持 f \times f不變,則輸出圖片大小爲 (n+2p-f+1) \times (n+2p-f+1)

因此,在進行卷積運算時,我們有兩種選擇:

  • Valid 卷積:不填充,直接卷積。結果大小爲 (n-f+1) \times (n-f+1)

  • Same 卷積:進行填充,並使得卷積後結果大小與輸入一致,這樣 p = \frac{f-1}{2}

在計算機視覺領域,f通常爲奇數。原因包括 Same 卷積中 p = \frac{f-1}{2}能得到自然數結果,並且濾波器有一個便於表示其所在位置的中心點。


5)Strided convolutions(重點)

卷積過程中,有時需要通過填充來避免信息損失,有時也需要通過設置步長(Stride來壓縮一部分信息。

步長表示濾波器在原始圖片的水平方向和垂直方向上每次移動的距離。之前,步長被默認爲 1。而如果我們設置步長爲 2,則卷積過程如下圖所示:

設步長爲s,填充長度爲p,輸入圖片大小爲 n \times n,濾波器大小爲 f \times f,則卷積後圖片的尺寸爲:

                                                    $$\biggl\lfloor \frac{n+2p-f}{s}+1 \biggr\rfloor \times \biggl\lfloor \frac{n+2p-f}{s}+1 \biggr\rfloor$$

注意公式中有一個向下取整的符號,用於處理商不爲整數的情況。向下取整反映着當取原始矩陣的圖示藍框完全包括在圖像內部時,纔對它進行運算。

目前爲止我們學習的“卷積”實際上被稱爲互相關(cross-correlation),而非數學意義上的卷積。真正的卷積操作在做元素乘積求和之前,要將濾波器沿水平和垂直軸翻轉(相當於旋轉 180 度)。因爲這種翻轉對一般爲水平或垂直對稱的濾波器影響不大,按照機器學習的慣例,我們通常不進行翻轉操作,在簡化代碼的同時使神經網絡能夠正常工作。


6)Convolutions over volumes

如果我們想要對三通道的 RGB 圖片進行卷積運算,那麼其對應的濾波器組也同樣是三通道的。過程是將每個單通道(R,G,B)與對應的濾波器進行卷積運算求和,然後再將三個通道的和相加,將 27 個乘積的和作爲輸出圖片的一個像素值。

不同通道的濾波器可以不相同。例如只檢測 R 通道的垂直邊緣,G 通道和 B 通道不進行邊緣檢測,則 G 通道和 B 通道的濾波器全部置零。當輸入有特定的高、寬和通道數時,濾波器可以有不同的高和寬,但通道數必須和輸入一致

如果想同時檢測垂直和水平邊緣,或者更多的邊緣檢測,可以增加更多的濾波器組。例如設置第一個濾波器組實現垂直邊緣檢測,第二個濾波器組實現水平邊緣檢測。設輸入圖片的尺寸爲 n \times n \times n_cn_c爲通道數),濾波器尺寸爲f \times f \times n_c,則卷積後的輸出圖片尺寸爲(n-f+1) \times (n-f+1) \times n'_cn'_c爲濾波器組的個數。


7)One layer of a convolutional network(重點)

卷積神經網絡的單層結構如下所示:

與之前的卷積過程相比較,卷積神經網絡的單層結構多了激活函數和偏移量,計算過程如下:

                                                                   $$Z^{[l]} = W^{[l]}A^{[l-1]}+b

                                                                   $$A^{[l]} = g^{[l]}(Z^{[l]})$$

對於一個 3x3x3 的濾波器,包括偏移量 b在內共有 28 個參數。不論輸入的圖片有多大,用這一個濾波器來提取特徵時,參數始終都是 28 個,固定不變。即選定濾波器組後,參數的數目與輸入圖片的尺寸無關。因此,卷積神經網絡的參數相較於標準神經網絡來說要少得多。這是 CNN 的優點之一。

符號總結

l層爲卷積層:

  • f^{[l]}濾波器的高(或寬)

  • p^{[l]}填充長度

  • s^{[l]}步長

  • n^{[l]}_c濾波器組的數量

  • 輸入維度n^{[l-1]}_H \times n^{[l-1]}_W \times n^{[l-1]}_c 。其中n^{[l-1]}_H表示輸入圖片的高,n^{[l-1]}_W表示輸入圖片的寬。之前的示例中輸入圖片的高和寬都相同,但是實際中也可能不同,因此加上下標予以區分。

  • 輸出維度n^{[l]}_H \times n^{[l]}_W \times n^{[l]}_c。其中

                                            n^{[l]}_H = \biggl\lfloor \frac{n^{[l-1]}_H+2p^{[l]}-f^{[l]}}{s^{[l]}}+1 \biggr\rfloor

                                            n^{[l]}_W = \biggl\lfloor \frac{n^{[l-1]}_W+2p^{[l]}-f^{[l]}}{s^{[l]}}+1 \biggr\rfloor

  • 每個濾波器組的維度f^{[l]} \times f^{[l]} \times n^{[l-1]}_c。其中n^{[l-1]}_c 爲輸入圖片通道數(也稱深度)。

  • 權重維度f^{[l]} \times f^{[l]} \times n^{[l-1]}_c \times n^{[l]}_c

  • 偏置維度1 \times 1 \times 1 \times n^{[l]}_c

由於深度學習的相關文獻並未對卷積標示法達成一致,因此不同的資料關於高度、寬度和通道數的順序可能不同。有些作者會將通道數放在首位,需要根據標示自行分辨。


8)A simple convolution network example

一個簡單的 CNN 模型如下圖所示:

其中,a^{[3]}的維度爲 7x7x40,將 1960 個特徵平滑展開成 1960 個單元的一列,然後連接最後一級的輸出層。輸出層可以是一個神經元,即二元分類(logistic);也可以是多個神經元,即多元分類(softmax)。最後得到預測輸出 \hat y

隨着神經網絡計算深度不斷加深,圖片的高度和寬度n^{[l]}_H ,n^{[l]}_W一般逐漸減小,而 n^{[l]}_c在增加。

一個典型的卷積神經網絡通常包含有三種層:卷積層(Convolution layer)池化層(Pooling layer)全連接層(Fully Connected layer)。僅用卷積層也有可能構建出很好的神經網絡,但大部分神經網絡還是會添加池化層和全連接層,它們更容易設計。


9)Pooling layers(理解)

池化層的作用是縮減模型的大小,提高計算速度,同時減小噪聲提高所提取特徵的穩健性。

採用較多的一種池化過程叫做最大池化(Max Pooling)。將輸入拆分成不同的區域,輸出的每個元素都是對應區域中元素的最大值,如下圖所示:

池化過程類似於卷積過程,上圖所示的池化過程中相當於使用了一個大小 f=2的濾波器,且池化步長 s=2。卷積過程中的幾個計算大小的公式也都適用於池化過程。如果有多個通道,那麼就對每個通道分別執行計算過程。

對最大池化的一種直觀解釋是,元素值較大可能意味着池化過程之前的卷積過程提取到了某些特定的特徵,池化過程中的最大化操作使得只要在一個區域內提取到某個特徵,它都會保留在最大池化的輸出中。但是,沒有足夠的證據證明這種直觀解釋的正確性,而最大池化被使用的主要原因是它在很多實驗中的效果都很好。

另一種池化過程是平均池化(Average Pooling),就是從取某個區域的最大值改爲求這個區域的平均值:

池化過程的特點之一是,它有一組超參數,但是並沒有參數需要學習。池化過程的超參數包括濾波器的大小f、步長 s,以及選用最大池化還是平均池化。而填充 p則很少用到。

池化過程的輸入維度爲:

n_H \times n_W \times n_c

輸出維度爲:

\biggl\lfloor \frac{n_H-f}{s}+1 \biggr\rfloor \times \biggl\lfloor \frac{n_W-f}{s}+1 \biggr\rfloor \times n_c


10)Convolutional neural network example

在計算神經網絡的層數時,通常只統計具有權重和參數的層,因此池化層通常和之前的卷積層共同計爲一層。

圖中的 FC3 和 FC4 爲全連接層,與標準的神經網絡結構一致。整個神經網絡各層的尺寸與參數如下表所示:

推薦一個直觀感受卷積神經網絡的網站


11)Why concolutions?

相比標準神經網絡,對於大量的輸入數據,卷積過程有效地減少了 CNN 的參數數量,原因有以下兩點:

  • 參數共享(Parameter sharing):特徵檢測如果適用於圖片的某個區域,那麼它也可能適用於圖片的其他區域。即在卷積過程中,不管輸入有多大,一個特徵探測器(濾波器)就能對整個輸入的某一特徵進行探測。

  • 稀疏連接(Sparsity of connections):在每一層中,由於濾波器的尺寸限制,輸入和輸出之間的連接是稀疏的,每個輸出值只取決於輸入在局部的一小部分值。

池化過程則在卷積後很好地聚合了特徵,通過降維來減少運算量。

由於 CNN 參數數量較小,所需的訓練樣本就相對較少,因此在一定程度上不容易發生過擬合現象。並且 CNN 比較擅長捕捉區域位置偏移。即進行物體檢測時,不太受物體在圖片中位置的影響,增加檢測的準確性和系統的健壯性。


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