4.2)深度卷积网络:实例研究
目錄
1)Why look at case studies?
2)Classic networks(理解)
3)ResNets(理解)
4)Why ResNets work?(經典)
5)Networks in Networks and 1x1 Convolutions(理解)
6)Inception network motivation
7)Inception network
8)Using open-source implementations
9)Transfer Learning(理解)
10)Data augmentation(重點)
11)The state of computer vision
本博客筆記是吳恩達老師深度學習課程第四門課第二周的的學習筆記:Deep convolutional models: case studies。筆記參考了黃海廣博士的整理,在此表示感謝。
1)Why look at case studies?
本周課程吳恩達老師講到的經典 CNN 模型包括:
-
LeNet-5
-
AlexNet
-
VGG
此外還有 ResNet(Residual Network,殘差網絡),以及 Inception Neural Network。
2)Classic networks(理解)
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。吳恩達老師建議精讀第二段,泛讀第三段。
AlexNet
特點:
-
AlexNet 模型與 LeNet-5 模型類似,但是更復雜,包含約 6000 萬個參數。另外,AlexNet 模型使用了 ReLU 函數。
-
當用于訓練圖像和數據集時,AlexNet 能夠處理非常相似的基本構造模塊,這些模塊往往包含大量的隱藏單元或數據。
相關論文:Krizhevsky et al.,2012. ImageNet classification with deep convolutional neural networks。這是一篇易于理解并且影響巨大的論文,計算機視覺群體自此開始重視深度學習。
VGG
特點:
-
VGG 又稱 VGG-16 網絡,16指網絡中包含 16 個卷積層和全連接層。
-
超參數較少,只需要專注于構建卷積層。
-
結構不復雜且規整,在每一組卷積層進行濾波器翻倍操作。
-
VGG 需要訓練的特征數量巨大,包含多達約 1.38 億個參數。
相關論文:Simonvan & Zisserman 2015. Very deep convolutional networks for large-scale image recognition。
3)ResNets(理解)
因為存在梯度消失和梯度爆炸問題,網絡越深,就越難以訓練成功。殘差網絡(Residual Networks,簡稱為 ResNets)可以有效解決這個問題。
上圖的結構被稱為殘差塊(Residual block)。通過捷徑(Short cut,或者稱跳躍連接,Skip connections)可以將 添加到第二個 ReLU 過程中,直接建立與 之間的隔層聯系。表達式如下:
構建一個殘差網絡就是將許多殘差塊堆積在一起,形成一個深度網絡。
ResNets 經典論文He et al., 2015. Deep residual networks for image recognition。
在理論上,隨著網絡深度的增加,性能應該越來越好。但實際上,對于一個普通網絡,隨著神經網絡層數增加,訓練錯誤會先減少,然后開始增多。但殘差網絡的訓練效果顯示,即使網絡再深,其在訓練集上的表現也會越來越好。
殘差網絡有助于解決梯度消失和梯度爆炸問題,使得在訓練更深的網絡的同時,又能保證良好的性能。
4)Why ResNets work?(經典)
假設有一個大型神經網絡,其輸入為,輸出為 。給這個神經網絡額外增加兩層,輸出為。將這兩層看作一個具有跳遠連接的殘差塊。為了方便說明,假設整個網絡中都選用 ReLU 作為激活函數,因此輸出的所有激活值都大于等于 0。
則有:
當發生梯度消失時,,,則有:? ? ? ? ? ? ??
因此,這兩層額外的殘差塊不會降低網絡性能。而如果沒有發生梯度消失時,訓練得到的非線性關系會使得表現效果進一步提高。
注意,如果與 的維度不同,需要引入矩陣與 相乘,使得二者的維度相匹配。參數矩陣 既可以通過模型訓練得到,也可以作為固定值,僅使 截斷或者補零。
上圖是論文提供的 CNN 中 ResNet 的一個典型結構。卷積層通常使用 Same 卷積以保持維度相同,而不同類型層之間的連接(例如卷積層和池化層),如果維度不同,則需要引入矩陣。
5)Networks in Networks and 1x1 Convolutions(理解)
1x1 卷積(1x1 convolution,或稱為 Network in Network)指濾波器的尺寸為 1。當通道數為 1 時,1x1 卷積意味著卷積操作等同于乘積操作。
而當通道數更多時,1x1 卷積的作用實際上類似全連接層的神經網絡結構,從而降低(或升高,取決于濾波器組數)數據的維度。
池化能壓縮數據的高度()及寬度(),而 1×1 卷積能壓縮數據的通道數()。在如下圖所示的例子中,用 32 個大小為 1×1×192 的濾波器進行卷積,就能使原先數據包含的 192 個通道壓縮為 32 個。
雖然論文Lin et al., 2013. Network in network中關于架構的詳細內容并沒有得到廣泛應用,但是 1x1 卷積的理念十分有影響力,許多神經網絡架構(包括 Inception 網絡)都受到它的影響。
6)Inception network motivation
在之前的卷積網絡中,我們只能選擇單一尺寸和類型的濾波器。而 Inception 網絡的作用即是代替人工來確定卷積層中的濾波器尺寸與類型,或者確定是否需要創建卷積層或池化層。
如圖,Inception 網絡選用不同尺寸的濾波器進行 Same 卷積,并將卷積和池化得到的輸出組合拼接起來,最終讓網絡自己去學習需要的參數和采用的濾波器組合。
相關論文:Szegedy et al., 2014, Going Deeper with Convolutions
在提升性能的同時,Inception 網絡有著較大的計算成本。下圖是一個例子:
圖中有 32 個濾波器,每個濾波器的大小為 5x5x192。輸出大小為 28x28x32,所以需要計算 28x28x32 個數字,對于每個數,都要執行 5x5x192 次乘法運算。加法運算次數與乘法運算次數近似相等。因此,可以看作這一層的計算量為 28x28x32x5x5x192 = 1.2億。
為了解決計算量大的問題,可以引入 1x1 卷積來減少其計算量。
對于同一個例子,我們使用 1x1 卷積把輸入數據從 192 個通道減少到 16 個通道,然后對這個較小層運行 5x5 卷積,得到最終輸出。這個 1x1 的卷積層通常被稱作瓶頸層(Bottleneck layer)。
改進后的計算量為 28x28x192x16 + 28x28x32x5x5x15 = 1.24 千萬,減少了約 90%。
只要合理構建瓶頸層,就可以既顯著縮小計算規模,又不會降低網絡性能。
7)Inception network
上圖是引入 1x1 卷積后的 Inception 模塊。值得注意的是,為了將所有的輸出組合起來,紅色的池化層使用 Same 類型的填充(padding)來池化使得輸出的寬高不變,通道數也不變。
多個 Inception 模塊組成一個完整的 Inception 網絡(被稱為 GoogLeNet,以向 LeNet 致敬),如下圖所示:
注意黑色橢圓圈出的隱藏層,這些分支都是 Softmax 的輸出層,可以用來參與特征的計算及結果預測,起到調整并防止發生過擬合的效果。
經過研究者們的不斷發展,Inception 模型的 V2、V3、V4 以及引入殘差網絡的版本被提出,這些變體都基于 Inception V1 版本的基礎思想上。順便一提,Inception 模型的名字來自電影《盜夢空間》。
8)Using open-source implementations
很多神經網絡復雜細致,并充斥著參數調節的細節問題,因而很難僅通過閱讀論文來重現他人的成果。想要搭建一個同樣的神經網絡,查看開源的實現方案會快很多。
9)Transfer Learning(理解)
在“搭建機器學習項目”課程中,遷移學習已經被提到過。計算機視覺是一個經常用到遷移學習的領域。在搭建計算機視覺的應用時,相比于從頭訓練權重,下載別人已經訓練好的網絡結構的權重,用其做預訓練,然后轉換到自己感興趣的任務上,有助于加速開發。
對于已訓練好的卷積神經網絡,可以將所有層都看作是凍結的,只需要訓練與你的 Softmax 層有關的參數即可。大多數深度學習框架都允許用戶指定是否訓練特定層的權重。
而凍結的層由于不需要改變和訓練,可以看作一個固定函數。可以將這個固定函數存入硬盤,以便后續使用,而不必每次再使用訓練集進行訓練了。
上述的做法適用于你只有一個較小的數據集。如果你有一個更大的數據集,應該凍結更少的層,然后訓練后面的層。越多的數據意味著凍結越少的層,訓練更多的層。如果有一個極大的數據集,你可以將開源的網絡和它的權重整個當作初始化(代替隨機初始化),然后訓練整個網絡。
10)Data augmentation(重點)
計算機視覺領域的應用都需要大量的數據。當數據不夠時,數據增強(Data Augmentation)就有幫助。常用的數據擴增包括鏡像翻轉、隨機裁剪、色彩轉換。
其中,色彩轉換是對圖片的 RGB 通道數值進行隨意增加或者減少,改變圖片色調。另外,PCA 顏色增強指更有針對性地對圖片的 RGB 通道進行主成分分析(Principles Components Analysis,PCA),對主要的通道顏色進行增加或減少,可以采用高斯擾動做法來增加有效的樣本數量。具體的 PCA 顏色增強做法可以查閱 AlexNet 的相關論文或者開源代碼。
在構建大型神經網絡的時候,數據擴增和模型訓練可以由兩個或多個不同的線程并行來實現。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??????????????
11)The state of computer vision
通常,學習算法有兩種數據來源:
-
被標記的數據
-
特征工程
特征工程(Hand-engineering,又稱 hacks)指精心設計的特性、網絡體系結構或是系統的其他組件。特征工程是一項非常重要也比較困難的工作。在數據量不多的情況下,特征工程是獲得良好表現的最佳方式。正因為數據量不能滿足需要,歷史上計算機視覺領域更多地依賴于手工工程。近幾年數據量急劇增加,因此特征工程量大幅減少。
另外,在模型研究或者競賽方面,有一些方法能夠有助于提升神經網絡模型的性能:
-
集成(Ensembling):獨立地訓練幾個神經網絡,并平均輸出它們的輸出
-
Multi-crop at test time:將數據擴增應用到測試集,對結果進行平均
但是由于這些方法計算和內存成本較大,一般不適用于構建實際的生產項目。
總結
以上是生活随笔為你收集整理的4.2)深度卷积网络:实例研究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多地上调银行房地产贷款和个人房贷占比上限
- 下一篇: 最近一周,基金为什么集体大跌?还能赚钱吗