1. 程式人生 > >DeepLearning.ai學習筆記(四)卷積神經網絡 -- week1 卷積神經網絡基礎知識介紹

DeepLearning.ai學習筆記(四)卷積神經網絡 -- week1 卷積神經網絡基礎知識介紹

除了 lock 還需要 情況 好處 計算公式 max 位置 網絡基礎

一、計算機視覺

技術分享圖片
如圖示,之前課程中介紹的都是64* 64 3的圖像,而一旦圖像質量增加,例如變成1000 1000 * 3的時候那麽此時的神經網絡的計算量會巨大,顯然這不現實。所以需要引入其他的方法來解決這個問題。

二、邊緣檢測示例

技術分享圖片
邊緣檢測可以是垂直邊緣檢測,也可以是水平邊緣檢測,如上圖所示。

至於算法如何實現,下面舉一個比較直觀的例子:

技術分享圖片
可以很明顯的看出原來6 * 6的矩陣有明顯的垂直邊緣,通過3 * 3的過濾器(也叫做 “核”)卷積之後,仍然保留了原來的垂直邊緣特征,雖然這個邊緣貌似有點大,這是因為數據不夠大的原因,如果輸入數據很大的話這個不是很明顯了。

三、更多邊緣檢測內容

技術分享圖片
除了上面的垂直,水平邊緣檢測,其實也可以檢測初顏色過度變化,例如是亮變暗,還是暗變亮?

下面是一些常見的過濾器,第二個是Sobel filter,具有較強的魯棒性,第三個是Schoss filter

其實過濾器的9個參數也可以通過學習的方式獲得,雖然比較費勁,但是可能會學到很多其他除了垂直,水平的邊緣特征,例如45°,70°等各種特征。

技術分享圖片

四、Padding

1.為什麽要用padding

之所以運用Padding(填充)主要是為了解決如下兩個缺點:

1.由前面的例子可以看到,每經過一次卷積計算,原數據都會減小,但有的時候我們並不希望這樣。舉個比較極端的例子:假設原數據是30 * 30的一只貓的圖像,經過10次卷積(過濾器是3 * 3)後,最後圖像只剩下了10 * 10了,此時不就剩下馬賽克了嗎23333

2.由卷積的計算方法可以知道,圖像邊緣特征計算次數顯然少於圖像中間位置的像素點,如下圖示(綠色的位置明顯是冷宮)

技術分享圖片

所以為了解決上=上面兩個問題,引入了padding,一般是padding=1,填充的數據是0。效果如下:

技術分享圖片

原來的6 * 6填充後變成了8 * 8,此時在經過一次卷積得到的仍舊是6 * 6的矩陣。

下面總結一下卷積之後得到矩陣大小的計算方法,假設:

  • 原數據是 n * n
  • 過濾器是 f * f
  • padding p * p

得到的矩陣大小是 (n+2p-f+1)*(n+2p-f+1)

對於第二個缺點,雖然邊緣像素點仍舊計算的比較少,但是這個缺點至少一定程度上被削弱了。

2.如何padding的大小

兩種選擇:Valid 卷積Same 卷積

  • valid 卷積

即不添加padding。

  • Same 卷積

即保持原圖像矩陣的大小。滿足 (n+2p-f+1) = n ,即 \(p=\frac{f-1}{2}\)
為了滿足上式,f一般奇數。

五、卷積步長

過濾器縱向,橫向都需要按步長S來移動,如圖示

技術分享圖片

結合之前的內容,輸出矩陣大小計算公式方法為,假設:

  • 原數據是 : n * n
  • 過濾器是 : f * f
  • padding : p * p
  • 步長Stride: s * s

得到的矩陣大小是 ?\(\frac{n+2p-f}{s}\)+1?*?\(\frac{n+2p-f}{s}\)+1?

??: 向下取整符號 ?59/60?=0

??:向上取整符號 ?59/60?=1

六、卷積中“卷”的體現之處

這一節用立體卷積來解釋。

技術分享圖片
如圖示,輸入矩陣是 6 * 6 * 3(height * width * channels),過濾器是3 * 3 * 3,計算方法是一一對應相乘相加,最後得到4 * 4的二維矩陣。

有時可能需要檢測橫向邊緣和縱向邊緣,或者其他特征,所以我們可以使用多個過濾器。
上圖則使用了兩個過濾器,得到的特征矩陣大小為 4 * 4 * 2.

七、單層卷積網絡

技術分享圖片
如圖示得到4 * 4的矩陣後還需要加上一個變差\(b_n\),之後還要進行非線性轉換,即用ReLU函數。因此假如在某一卷積層中使用了10個3 * 3的過濾器,那麽一共有\((3*3+1)*10=280\)個參數。

下面總結了各項參數的大小和表示方法:

  • 過濾器大小:\(f^{[l]}\)
  • 填充 padding:\(p^{[l]}\)
  • 步長 stride:\(s^{l}\)
  • 激活函數: \(a^{l}:n_H^{l} * n_W^{l} * n_c^{l}\)
  • 權重Weight: \(f^{l}*f^{l}*n_c^{[l-1]}*n_c^{[l]}\)
  • 偏差bias:\(1*1*1*n_c^{[l]}\)
  • 輸入矩陣(height* width* channels): \(n_H^{l-1} * n_W^{l-1} * n_c^{l-1}\)

    • 每一卷積層的過濾器的通道的大小 = 輸入層的通道大小
  • 輸出矩陣(height* width* channels): \(n_H^{l} * n_W^{l} * n_c^{l}\)

    • 輸出層的通道的大小 = 過濾器的個數

輸出層與輸入層計算公式:

\(n_{H/W}^{[l]}=[\frac{n_{H/W}^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1]\)

技術分享圖片

八、簡單卷積網絡示例

技術分享圖片
上圖簡單介紹了卷積網絡的計算過程,需要再介紹的一點是最後一層的全連接層,即將7 * 7 * 40的輸出矩陣展開,得到1960個節點,然後再采用邏輯回歸或Softmax來進行預測。

另外從上面的例子還可以看到,在一般的卷積神經網絡中,每一層的矩陣的height和width是逐漸減小的,而channel則是增加的。

卷積神經網絡中常見的三中類型的layer:

  • Convolution (Conv 卷積層)
  • Pooling (Pool 池化層)
  • Fully connected (FC 全連接層)

九、池化層

Pooling layer(池化層)的作用是壓縮數據,加速運算,同時提高所提取特征的魯棒性。

  • Max Pooling
    即選取最大的

技術分享圖片

  • Average Pooling
    即計算平均值,但是這個用的不多,因為這個會加入更多的計算量

技術分享圖片

註意:一般來說池化層是不需要Padding的,所以p都會置為0

十、卷積神經網絡示例

註意:在吳大大的視頻中將 Conv layerPooling layer合並在一起視為一層,因為池化層沒有參數(因為池化層的過濾器的無參數,而且其大小可以事先確定好)。 但是在其他文獻中可能會把池化層算成單獨的層,所以具體視情況而定。

技術分享圖片

十一、為什麽使用卷積?

卷積相比於全連接的好處最直觀的就是使用的參數更少:

技術分享圖片

如圖示,加入我們有一個32 * 32 * 3的圖片,經過6個5 * 5的過濾器後可以得到28 * 28 * 6的矩陣,此時我們只需要 \(5*5*6=150\)個參數就可以了。而如果不用卷積呢?

首先32 * 32 3 = 3072,假如輸出矩陣也要是28 28 * 6,即4704個節點,如果全連接的話那麽就需要4704 * 3072個權
重參數,所以這個對比還是很明顯的了。

至於為什麽可以保證參數少的同時也保證了有效性,是因為如下兩個原因

  • 參數共享(Parameter sharing)
  • 稀疏連接(Sparsity of connections)

技術分享圖片

參數共享:例如我們希望獲取圖像的豎向特征,那麽我們只需加入一個可以檢測豎向特征的過濾器就夠了。
稀疏連接:如上圖所示,輸出矩陣左上角的0只與輸入矩陣左上角的9個元素有關,其他的值不會幹擾。輸出矩陣其他位置也一樣。所以這就是為什麽卷積網絡也可以捕捉到圖像平移的特征,例如將圖片中的貓向左平移幾個像素點後,依然能夠識別正確。



MARSGGBO?原創





2018-01-01



DeepLearning.ai學習筆記(四)卷積神經網絡 -- week1 卷積神經網絡基礎知識介紹