吳恩達深度學習筆記(80)-卷積神經網絡示例

構建全卷積神經網絡的構造模塊我們已經掌握得差不多了,下面來看個例子。

假設,有一張大小為32×32×3的輸入圖片,這是一張RGB模式的圖片,你想做手寫體數字識別。32×32×3的RGB圖片中含有某個數字,比如7,你想識別它是從0-9這10個數字中的哪一個,我們構建一個神經網絡來實現這個功能。

吳恩達深度學習筆記(80)-卷積神經網絡示例

我用的這個網絡模型和經典網絡LeNet-5非常相似,靈感也來源於此。LeNet-5是多年前Yann LeCun創建的,我所採用的模型並不是LeNet-5,但是受它啟發,許多參數選擇都與LeNet-5相似。輸入是32×32×3的矩陣,假設第一層使用過濾器大小為5×5,步幅是1,padding是0,過濾器個數為6,那麼輸出為28×28×6。將這層標記為CONV1,它用了6個過濾器,增加了偏差,應用了非線性函數,可能是ReLU非線性函數,最後輸出CONV1的結果。

吳恩達深度學習筆記(80)-卷積神經網絡示例

然後構建一個池化層,這裡我選擇用最大池化,參數f=2,s=2,因為padding為0,我就不寫出來了。現在開始構建池化層,最大池化使用的過濾器為2×2,步幅為2,表示層的高度和寬度會減少一半。因此,28×28變成了14×14,通道數量保持不變,所以最終輸出為14×14×6,將該輸出標記為POOL1。

吳恩達深度學習筆記(80)-卷積神經網絡示例

人們發現在卷積神經網絡文獻中,卷積有兩種分類,這與所謂層的劃分存在一致性。

一類卷積是一個卷積層和一個池化層一起作為一層,這就是神經網絡的Layer1。

另一類卷積是把卷積層作為一層,而池化層單獨作為一層。人們在計算神經網絡有多少層時,通常只統計具有權重和參數的層。因為池化層沒有權重和參數,只有一些超參數。

這裡,我們把CONV1和POOL1共同作為一個卷積,並標記為Layer1。雖然你在閱讀網絡文章或研究報告時,你可能會看到卷積層和池化層各為一層的情況,這只是兩種不同的標記術語。一般我在統計網絡層數時,只計算具有權重的層,也就是把CONV1和POOL1作為Layer1。這裡我們用CONV1和POOL1來標記,兩者都是神經網絡Layer1的一部分,POOL1也被劃分在Layer1中,因為它沒有權重,得到的輸出是14×14×6。

吳恩達深度學習筆記(80)-卷積神經網絡示例

我們再為它構建一個卷積層,過濾器大小為5×5,步幅為1,這次我們用10個過濾器,最後輸出一個10×10×10的矩陣,標記為CONV2。

吳恩達深度學習筆記(80)-卷積神經網絡示例

然後做最大池化,超參數f=2,s=2。你大概可以猜出結果,f=2,s=2,高度和寬度會減半,最後輸出為5×5×10,標記為POOL2,這就是神經網絡的第二個卷積層,即Layer2。

吳恩達深度學習筆記(80)-卷積神經網絡示例

如果對Layer1應用另一個卷積層,過濾器為5×5,即f=5,步幅是1,padding為0,所以這裡省略了,過濾器16個,所以CONV2輸出為10×10×16。我們看看CONV2,這是CONV2層。

吳恩達深度學習筆記(80)-卷積神經網絡示例

繼續執行做大池化計算,參數f=2,s=2,你能猜到結果麼?對10×10×16輸入執行最大池化計算,參數f=2,s=2,高度和寬度減半,計算結果猜到了吧。最大池化的參數f=2,s=2,輸入的高度和寬度會減半,結果為5×5×16,通道數和之前一樣,標記為POOL2。這是一個卷積,即Layer2,因為它只有一個權重集和一個卷積層CONV2。

吳恩達深度學習筆記(80)-卷積神經網絡示例

5×5×16矩陣包含400個元素,現在將POOL2平整化為一個大小為400的一維向量。我們可以把平整化結果想象成這樣的一個神經元集合,然後利用這400個單元構建下一層。下一層含有120個單元,這就是我們第一個全連接層,標記為FC3。這400個單元與120個單元緊密相連,這就是全連接層。它很像我們在第一和第二門課中講過的單神經網絡層,這是一個標準的神經網絡。它的權重矩陣為W^[3] ,維度為120×40。這就是所謂的“全連接”,因為這400個單元與這120個單元的每一項連接,還有一個偏差參數。最後輸出120個維度,因為有120個輸出。

然後我們對這個120個單元再添加一個全連接層,這層更小,假設它含有84個單元,標記為FC4。

吳恩達深度學習筆記(80)-卷積神經網絡示例

最後,用這84個單元填充一個softmax單元。如果我們想通過手寫數字識別來識別手寫0-9這10個數字,這個softmax就會有10個輸出。

此例中的卷積神經網絡很典型,看上去它有很多超參數,關於如何選定這些參數,後面我提供更多建議。常規做法是,儘量不要自己設置超參數,而是查看文獻中別人採用了哪些超參數,選一個在別人任務中效果很好的架構,那麼它也有可能適用於你自己的應用程序,這塊下週我會細講。

吳恩達深度學習筆記(80)-卷積神經網絡示例

現在,我想指出的是,隨著神經網絡深度的加深,高度n_H和寬度n_W通常都會減少,前面我就提到過,從32×32到28×28,到14×14,到10×10,再到5×5。所以隨著層數增加,高度和寬度都會減小,而通道數量會增加,從3到6到16不斷增加,然後得到一個全連接層。

在神經網絡中,另一種常見模式就是一個或多個卷積後面跟隨一個池化層,然後一個或多個卷積層後面再跟一個池化層,然後是幾個全連接層,最後是一個softmax。這是神經網絡的另一種常見模式。

接下來我們講講神經網絡的激活值形狀,激活值大小和參數數量。輸入為32×32×3,這些數做乘法,結果為3072,所以激活值a^([0])有3072維,激活值矩陣為32×32×3,輸入層沒有參數。計算其他層的時候,試著自己計算出激活值,這些都是網絡中不同層的激活值形狀和激活值大小。

吳恩達深度學習筆記(80)-卷積神經網絡示例

有幾點要注意:

第一,池化層和最大池化層沒有參數

第二卷積層的參數相對較少,前面課上我們提到過,其實許多參數都存在於神經網絡的全連接層。

觀察可發現,隨著神經網絡的加深,激活值尺寸會逐漸變小,如果激活值尺寸下降太快,也會影響神經網絡性能。示例中,激活值尺寸在第一層為6000,然後減少到1600,慢慢減少到84,最後輸出softmax結果。我們發現,許多卷積網絡都具有這些屬性,模式上也相似。

神經網絡的基本構造模塊我們已經講完了,一個卷積神經網絡包括卷積層、池化層和全連接層。

許多計算機視覺研究正在探索如何把這些基本模塊整合起來,構建高效的神經網絡,整合這些基本模塊確實需要深入的理解。

根據我的經驗,找到整合基本構造模塊最好方法就是大量閱讀別人的案例

下週會演示一些整合基本模塊,成功構建高效神經網絡的具體案例。希望下週的課程可以幫助你找到構建有效神經網絡的感覺,或許你也可以將別人開發的框架應用於自己的應用程序,這是下週的內容。下節課,也是本週最後一節課,我想花點時間討論下,為什麼大家願意使用卷積,使用卷積的好處和優勢是什麼,以及如何整合多個卷積,如何檢驗神經網絡,如何在訓練集上訓練神經網絡來識別圖片或執行其他任務,我們下節筆記繼續講。


分享到:


相關文章: