深度卷積網絡:實例探究——吳恩達DeepLearning.ai深度學習筆記之卷積神經網絡(二)

2021-02-20 深度學習算法與自然語言處理

經典的 CNN 網絡模型:

此外還有 ResNet(Residual Network,殘差網絡),以及 Inception Neural Network。

1. 經典網絡 1.1 LeNet-5

特點:

LeNet-5 針對灰度圖像而訓練,因此輸入圖片的通道數為 1。該模型總共包含了約 6 萬個參數,遠少於標準神經網絡所需。典型的 LeNet-5 結構包含卷積層(CONV layer),池化層(POOL layer)和全連接層(FC layer),排列順序一般為 CONV layer->POOL layer->CONV layer->POOL layer->FC layer->FC layer->OUTPUT layer。一個或多個卷積層後面跟著一個池化層的模式至今仍十分常用。當 LeNet-5模型被提出時,其池化層使用的是平均池化,而且各層激活函數一般選用 Sigmoid 和 tanh。現在,我們可以根據需要,做出改進,使用最大池化並選用 ReLU 作為激活函數。

相關論文:LeCun et.al., 1998. Gradient-based learning applied to document recognition。吳恩達老師建議精讀第二段,泛讀第三段。

1.2 AlexNet

特點:

AlexNet 模型與 LeNet-5 模型類似,但是更複雜,包含約 6000 萬個參數。另外,AlexNet 模型使用了 ReLU 函數。當用於訓練圖像和數據集時,AlexNet 能夠處理非常相似的基本構造模塊,這些模塊往往包含大量的隱藏單元或數據。

相關論文:Krizhevsky et al.,2012. ImageNet classification with deep convolutional neural networks。這是一篇易於理解並且影響巨大的論文,計算機視覺群體自此開始重視深度學習。

1.3 VGG

特點:

VGG 又稱 VGG-16 網絡,「16」指網絡中包含 16 個卷積層和全連接層。結構不複雜且規整,在每一組卷積層進行濾波器翻倍操作。VGG 需要訓練的特徵數量巨大,包含多達約 1.38 億個參數。有些文章還介紹了 VGG-19 網絡,它甚至比 VGG-16 還要大。但由於 VGG-16 的表現幾乎和 VGG-19 不分高下,所以很多人還是會使用 VGG-16。

相關論文:Simonvan & Zisserman 2015. Very deep convolutional networks for large-scale image recognition。

2. 殘差網絡(ResNets)

因為存在梯度消失和梯度爆炸問題,網絡越深,就越難以訓練成功。跳躍連接(Skip connection),它可以從某一層網絡層獲取激活,然後迅速反饋給另外一層,甚至是神經網絡的更深層。我們可以利用跳躍連接構建能夠訓練深度網絡的殘差網絡(Residual Networks,簡稱為 ResNets)

上圖的結構被稱為殘差塊(Residual block)。通過捷徑(Short cut,或者稱跳遠連接,Skip connections) 可以將

構建一個殘差網絡就是將許多殘差塊堆積在一起,形成一個深度網絡。

為了便於區分,在 ResNets 的論文He et al., 2015. Deep residual networks for image recognition中,非殘差網絡被稱為普通網絡(Plain Network)。將它變為殘差網絡的方法是加上所有的跳遠連接。

在理論上,隨著網絡深度的增加,性能應該越來越好。但實際上,對於一個普通網絡,隨著神經網絡層數增加,訓練錯誤會先減少,然後開始增多。但殘差網絡的訓練效果顯示,即使網絡再深,其在訓練集上的表現也會越來越好。

殘差網絡有助於解決梯度消失和梯度爆炸問題,使得在訓練更深的網絡的同時,又能保證良好的性能。

2.1 殘差網絡有效的原因

假設有一個大型神經網絡,其輸入為

則有:

當發生梯度消失時,

因此,這兩層額外的殘差塊不會降低網絡性能。而如果沒有發生梯度消失時,訓練得到的非線性關係會使得表現效果進一步提高。

注意,如果

上圖是論文提供的 CNN 中 ResNet 的一個典型結構。卷積層通常使用 Same 卷積以保持維度相同,而不同類型層之間的連接(例如卷積層和池化層),如果維度不同,則需要引入矩陣

3. 1x1 卷積

1x1 卷積(1x1 convolution,或稱為 Network in Network)指濾波器的尺寸為 1。當通道數為 1 時,1x1 卷積意味著卷積操作等同於乘積操作。

而當通道數更多時,1x1 卷積的作用實際上類似全連接層的神經網絡結構,壓縮或保持輸入層中的通道數量,甚至是增加通道數量

池化能壓縮數據的高度

雖然論文Lin et al., 2013. Network in network中關於架構的詳細內容並沒有得到廣泛應用,但是 1x1 卷積的理念十分有影響力,許多神經網絡架構(包括 Inception 網絡)都受到它的影響。

4. Inception 網絡

在之前的卷積網絡中,我們只能選擇單一尺寸和類型的濾波器。而 Inception 網絡的作用即是代替人工來確定卷積層中的濾波器尺寸與類型,或者確定是否需要創建卷積層或池化層。

如圖,Inception 網絡選用不同尺寸的濾波器進行 Same 卷積,並將卷積和池化得到的輸出組合拼接起來,最終讓網絡自己去學習需要的參數和採用的濾波器組合。

相關論文:Szegedy et al., 2014, Going Deeper with Convolutions

4.1 計算成本

在提升性能的同時,Inception 網絡有著較大的計算成本。下圖是一個例子:

圖中有 32 個濾波器,每個濾波器的大小為 5x5x192。輸出大小為 28x28x32,所以需要計算 28x28x32 個數字,對於每個數,都要執行 5x5x192 次乘法運算。加法運算次數與乘法運算次數近似相等。因此,可以看作這一層的計算量為 28x28x32x5x5x192 = 1.2億。

為了解決計算量大的問題,可以引入 1x1 卷積來減少其計算量。

對於同一個例子,我們使用 1x1 卷積把輸入數據從 192 個通道減少到 16 個通道,然後對這個較小層運行 5x5 卷積,得到最終輸出。這個 1x1 的卷積層通常被稱作瓶頸層(Bottleneck layer)

改進後的計算量為 28x28x192x16 + 28x28x32x5x5x15 = 1.24 千萬,減少了約 90%。

只要合理構建瓶頸層,就可以既顯著縮小計算規模,又不會降低網絡性能。

4.2 完整的 Inception 網絡

上圖是引入 1x1 卷積後的 Inception 模塊。值得注意的是,為了將所有的輸出組合起來,紅色的池化層使用 Same 類型的填充(padding)來池化使得輸出的寬高不變,通道數也不變。

多個 Inception 模塊組成一個完整的 Inception 網絡(被稱為 GoogLeNet,以向 LeNet 致敬),如下圖所示:

注意黑色橢圓圈出的隱藏層,這些分支都是 Softmax 的輸出層,可以用來參與特徵的計算及結果預測,起到調整並防止發生過擬合的效果。

經過研究者們的不斷發展,Inception 模型的 V2、V3、V4 以及引入殘差網絡的版本被提出,這些變體都基於 Inception V1 版本的基礎思想上。

5. 使用開源的實現方案

很多神經網絡複雜細緻,並充斥著參數調節的細節問題,因而很難僅通過閱讀論文來重現他人的成果。想要搭建一個同樣的神經網絡,查看開源的實現方案會快很多。

6. 遷移學習

計算機視覺是一個經常用到遷移學習的領域。在搭建計算機視覺的應用時,相比於從頭訓練權重,下載別人已經訓練好的網絡結構的權重,用其做預訓練,然後轉換到自己感興趣的任務上,有助於加速開發。

對於已訓練好的卷積神經網絡,可以將所有層都看作是凍結的只需要訓練與你的 Softmax 層有關的參數即可。大多數深度學習框架都允許用戶指定是否訓練特定層的權重。

而凍結的層由於不需要改變和訓練,可以看作一個固定函數。可以將這個固定函數存入硬碟,以便後續使用,而不必每次再使用訓練集進行訓練了。

上述的做法適用於你只有一個較小的數據集。如果你有一個更大的數據集,應該凍結更少的層,然後訓練後面的層。越多的數據意味著凍結越少的層,訓練更多的層。如果有一個極大的數據集,你可以將開源的網絡和它的權重整個當作初始化(代替隨機初始化),然後訓練整個網絡。

7. 數據擴增

計算機視覺領域的應用都需要大量的數據。當數據不夠時,數據擴增(Data Augmentation) 就有幫助。常用的數據擴增包括鏡像翻轉、隨機裁剪、色彩轉換

其中,色彩轉換是對圖片的 RGB 通道數值進行隨意增加或者減少,改變圖片色調。另外,PCA 顏色增強指更有針對性地對圖片的 RGB 通道進行主成分分析(Principles Components Analysis,PCA),對主要的通道顏色進行增加或減少,可以採用高斯擾動做法來增加有效的樣本數量。具體的 PCA 顏色增強做法可以查閱 AlexNet 的相關論文或者開原始碼。

在構建大型神經網絡的時候,數據擴增和模型訓練可以由兩個或多個不同的線程並行來實現。

8. 計算機視覺現狀

通常,學習算法有兩種知識來源:

手工工程(Hand-engineering,又稱 hacks) 指精心設計的特性、網絡體系結構或是系統的其他組件。手工工程是一項非常重要也比較困難的工作。在數據量不多的情況下,手工工程是獲得良好表現的最佳方式。正因為數據量不能滿足需要,歷史上計算機視覺領域更多地依賴於手工工程。近幾年數據量急劇增加,因此手工工程量大幅減少。

另外,在模型研究或者競賽方面,有一些方法能夠有助於提升神經網絡模型的性能:

集成(Ensembling):獨立地訓練幾個神經網絡,並平均輸出它們的輸出Multi-crop at test time:將數據擴增應用到測試集,對結果進行平均

但是由於這些方法計算和內存成本較大,一般不適用於構建實際的生產項目。


相關焦點

  • 深度學習入門首推資料--吳恩達深度學習全程筆記分享
    (其實,沒基礎也沒關係,遇到不懂的地方多查查資料就可以了) 這份筆記總共包含746頁,經過數次更新修訂,目前已經發布到最新的 V5.44版本,筆記非常詳盡,目錄如下:目錄第一門課 神經網絡和深度學習(Neural Networks and Deep Learning)1第一周:深度學習引言(Introduction to Deep
  • 下載量過百萬的吳恩達機器學習和深度學習筆記更新了!(附PDF下載)
    >深度學習筆記引用格式: fengdu78, deeplearning_ai_books,(2018), GitHub repository, https://github.com/fengdu78/deeplearning_ai_books同學們可以自由列印。
  • 資源|深度學習教程整理
    吳恩達deeplearning.ai五項課程完整筆記了解一下?項目地址:https://github.com/mbadry1/DeepLearning.ai-Summary自吳恩達發布 deeplearning.ai 課程以來,很多學習者陸續完成了所有專項課程並精心製作了課程筆記,在此過程中機器之心也一直在為讀者推薦優質的筆記。
  • 吳恩達創建deeplearning.ai講授AI課程 ,向全世界普及深度學習知識
    吳恩達稱正在做的AI項目有三個,deeplearning.ai只是其中的第一個。
  • 深度學習基礎:一步一步講解卷積神經網絡
    導語卷積神經網絡(Convolutional Neural Networks, CNN)是一類包含卷積計算且具有深度結構的前饋神經網絡(Feedforward Neural Networks),是深度學習(deep learning)的代表算法之一。本文來源於吳恩達老師的深度學習課程[1]筆記部分。
  • 深度 | 輕量級深度卷積神經網絡在農業機器人中的應用
    在本文中,作者提出了學習輕量級模型的一個非常新穎的方式,在實現精度超過 90% 的同時讓訓練速度快了一個數量級,讓參數也少了一個數量級。作者主要使用了以下三個步驟:1). 將預先訓練好的模型適應於手頭的任務中。2). 在適應的模型中使用模型壓縮技術來學習到一個具有更少參數的輕量級深度卷積神經網絡(DCNN)3).
  • 基於深度卷積神經網絡的巖性識別
    預測準確度其它研究,如:張野[4]等人基於Inception-v3深度卷積神經網絡模型對一個由花崗巖、千枚巖和角礫巖組成的混合圖像數據集分類,取得90%以上的識別精度。Chen[5]等人採用Inception-ResNet-V2深度卷積神經網絡模型對開挖面巖體結構進行分類;(卷得有點嚴重了....)
  • 304頁吳恩達Deeplearning.ai課程筆記,含基礎知識與作業代碼(附下載)
    (almosthuman2014)授權轉載,禁止二次轉載作者:Wan Zhen吳恩達的 DeepLearning.ai 已經於 2018年1 月 31 日發布了最後一門課程。近日,來自重慶大學的 Wan Zhen 製作了一份深度學習專項課程筆記,該筆記從神經網絡與深度學習基礎、提升深度神經網絡性能和卷積神經網絡三門課程出發詳細解釋了關鍵概念與作業代碼。本文概括性地介紹了這三課的主要內容,並選擇每個課程主題比較有意思的知識點進行介紹。
  • 《深度學習工程師》聽課筆記,編程作業和課後練習
    目錄神經網絡與深度學習 1.卷積神經網絡基礎            計算機視覺邊緣檢測示例更多邊緣檢測的內容padding卷積步長三維卷積單層卷積網絡簡單神經網絡示例池化層卷積神經網絡示例為什麼使用卷積?
  • Deep Learning & Neural Network 免費學習資源【譯】
    想必最近都被吳恩達Deeplearning.ai的深度學習課程刷屏了,不過這篇針對初學者的介紹深度學習和神經網絡的免費學習資源
  • 深度學習筆記13:Tensorflow實戰之手寫mnist手寫數字識別
    作者:魯偉一個數據科學踐行者的學習日記。
  • Deep Learning(深度學習)各種資料網址
    :深層神經網絡:深層學習為何要「Deep」(上)(由於下篇寫的並不通俗,不推薦閱讀,用公開課代替)反向傳播算法實例:未編寫深度學習總覽:公開課:深層神經網絡設計理念深度學習入門誤區:知乎Live>:循環神經網絡--雙向GRU卷積神經網絡(1):卷積神經網絡--介紹卷積神經網絡(2):未編寫Batch Normalization:Batch Normalization--介紹其他autoencoder和GAN等
  • 我花了四個晚上,拿到了吳恩達Deeplearning.ai深度學習課程證書
    >前不久,吳恩達正式在 Coursera 上公布了自己的 Deeplearning.ai 深度學習系列課程,一經發布火爆全網,最近這位Arvind N的小哥親測了這個系列課程。吳恩達從他的經典ML課程的遺漏信息講起,並介紹了使用單一神經元(邏輯回歸)神經網絡的想法,並慢慢增加複雜性 - 更多的神經元和更多層。在4周(課程1)結束時,學生將學習到構建密集神經網絡所需的所有核心思想,例如損失函數、使用梯度下降和向量化並行python(numpy)實現進行迭代學習。吳恩達耐心地按照精心策劃的順序和恰到好處的講解了必要的數學和編程概念。
  • 重磅丨吳恩達deeplearning.ai 首度曝光,新智元專訪談未來規劃
    現在,新智元為你拉開幕簾,吳恩達接受新智元專訪,談 deeplearning.ai,深度學習,以及他手中激動人心的 AI 項目。過去幾個月,我們的一個團隊製作了一套課程,目標是讓任何具有基本編程能力的人都能學習深度學習。 6 年前,我在 Coursera 上推出了機器學習課程,從那時起,已經有 180 萬人選修了這門課,可以說這門課將很多人帶入了機器學習領域。我希望 deeplearning.ai 能夠將更多的人帶入深度學習。
  • 深度學習第18講:CNN經典論文研讀之VGG網絡及其tensorflow實現
    VGGNet 的網絡雖然開始加深但其結構並不複雜,但作者的實踐卻證明了卷積網絡深度的重要性。深度卷積網絡能夠提取圖像低層次、中層次和高層次的特徵,因而網絡結構需要的一定的深度來提取圖像不同層次的特徵。可以看到 VGG16 網絡需要訓練的參數數量達到了 1.38 億個,這個數量是巨大的。我們以 VGG16 為例簡單探究一下它的網絡結構。
  • 資源 | 吳恩達斯坦福CS230深度學習課程補充資料放出
    那是繼deeplearning.ai深度學習專項課程之後吳恩達的又一神作。課程助教課程涉及深度學習的基礎知識、神經網絡構建,以及如何完成一個成功的機器學習項目。具體將涉及卷積網絡,RNNs,LSTM,Adam,Dropout,BatchNorm,Xavier / He初始化等,還提供醫療,自動駕駛,手語閱讀,音樂創作和自然語言處理等多領域的案例研究。
  • 深度學習筆記15:ubuntu16.04 下深度學習開發環境搭建與配置
    作者:魯偉一個數據科學踐行者的學習日記。
  • 資源 | 吳恩達斯坦福CS230深度學習課程全套資料放出(附下載)
    吳恩達老師對斯坦福CS230深度學習課程資源進行開放了,大家都知道吳恩達老師最出名的是他在coursera的機器學習課程,可以說讓很多剛開始接觸機器學習(ML)的小白入門該領域。吳恩達在開設了機器學習課程之後,最近發布的DeepLearning.ai的課程也是廣受好評,我沒有看完,看了一兩門課程,作業也跟著去做,得到的感受就是吳恩達老師就是那種擅長將知識尋尋漸進的傳授給你的老師。Deeplearning.ai這個課程也非常推薦!
  • 深度學習-機器學習從入門到深入全套資源分享
    深度學習基礎--卷積類型        Dilated/Atrous conv 空洞卷積/多孔卷積        CNN模型之ShuffleNet        一文簡述ResNet及其多種變體        ResNet解析        將CNN引入目標檢測的開山之作:R-CNN
  • Women Who Code帶你探秘深度卷積神經網絡(DCNN)
    WWC將帶領你走進Deep Learning的世界,揭開深度卷積神經網絡(DCNN)的神秘面紗。    深度機器學習作為AI領域的一個重要分支,已經成為了AI的代名詞。DCNN是深度學習的關鍵技術,它通過模擬人腦進行分析學習,算法訓練時不用人工幹預。這十年中,網際網路巨頭和全球各個科研機構都投入了巨大的人力物力用於理論和工業級探索,AlphaGo圍棋之戰更是引燃了全球的熱情。