吴恩达《卷积神经网络》精炼笔记(2)-- 深度卷积模型:案例研究
AI有道
不可錯過的AI技術公眾號
關注
1
Why Look at Case Studies
本文將主要介紹幾個典型的CNN案例。通過對具體CNN模型及案例的研究,來幫助我們理解知識并訓練實際的模型。
典型的CNN模型包括:
LeNet-5
AlexNet
VGG
除了這些性能良好的CNN模型之外,我們還會介紹Residual Network(ResNet)。其特點是可以構建很深很深的神經網絡(目前最深的好像有152層)。
另外,還會介紹Inception Neural Network。接下來,我們將一一講解。
2
Classic Networks
LeNet-5模型是Yann LeCun教授于1998年提出來的,它是第一個成功應用于數字識別問題的卷積神經網絡。在MNIST數據中,它的準確率達到大約99.2%。典型的LeNet-5結構包含CONV layer,POOL layer和FC layer,順序一般是CONV layer->POOL layer->CONV layer->POOL layer->FC layer->FC layer->OUTPUT layer,即y^y^。下圖所示的是一個數字識別的LeNet-5的模型結構:
該LeNet模型總共包含了大約6萬個參數。值得一提的是,當時Yann LeCun提出的LeNet-5模型池化層使用的是average pool,而且各層激活函數一般是Sigmoid和tanh?,F在,我們可以根據需要,做出改進,使用max pool和激活函數ReLU。
AlexNet模型是由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton共同提出的,其結構如下所示:
AlexNet模型與LeNet-5模型類似,只是要復雜一些,總共包含了大約6千萬個參數。同樣可以根據實際情況使用激活函數ReLU。原作者還提到了一種優化技巧,叫做Local Response Normalization(LRN)。 而在實際應用中,LRN的效果并不突出。
VGG-16模型更加復雜一些,一般情況下,其CONV layer和POOL layer設置如下:
CONV = 3x3 filters, s = 1, same
MAX-POOL = 2x2, s = 2
VGG-16結構如下所示:
VGG-16的參數多達1億3千萬。
3
ResNets
我們知道,如果神經網絡層數越多,網絡越深,源于梯度消失和梯度爆炸的影響,整個模型難以訓練成功。解決的方法之一是人為地讓神經網絡某些層跳過下一層神經元的連接,隔層相連,弱化每層之間的強聯系。這種神經網絡被稱為Residual Networks(ResNets)。
Residual Networks由許多隔層相連的神經元子模塊組成,我們稱之為Residual block。單個Residual block的結構如下圖所示:
該模型由Kaiming He, Xiangyu Zhang, Shaoqing Ren和Jian Sun共同提出。由多個Residual block組成的神經網絡就是Residual Network。實驗表明,這種模型結構對于訓練非常深的神經網絡,效果很好。另外,為了便于區分,我們把非Residual Networks稱為Plain Network。
Residual Network的結構如上圖所示。
與Plain Network相比,Residual Network能夠訓練更深層的神經網絡,有效避免發生發生梯度消失和梯度爆炸。從下面兩張圖的對比中可以看出,隨著神經網絡層數增加,Plain Network實際性能會變差,training error甚至會變大。然而,Residual Network的訓練效果卻很好,training error一直呈下降趨勢。
4
Why ResNets Work
下面用個例子來解釋為什么ResNets能夠訓練更深層的神經網絡。
當然,如果Residual blocks確實能訓練得到非線性關系,那么也會忽略short cut,跟Plain Network起到同樣的效果。
下圖所示的是CNN中ResNets的結構:
ResNets同類型層之間,例如CONV layers,大多使用same類型,保持維度相同。如果是不同類型層之間的連接,例如CONV layer與POOL layer之間,如果維度不同,則引入矩陣Ws。
5
Networks in Networks and 1x1 Convolutions
Min Lin, Qiang Chen等人提出了一種新的CNN結構,即1x1 Convolutions,也稱Networks in Networks。這種結構的特點是濾波器算子filter的維度為1x1。對于單個filter,1x1的維度,意味著卷積操作等同于乘積操作。
1x1 Convolutions可以用來縮減輸入圖片的通道數目。方法如下圖所示:
6
Inception Network Motivation
之前我們介紹的CNN單層的濾波算子filter尺寸是固定的,1x1或者3x3等。而Inception Network在單層網絡上可以使用多個不同尺寸的filters,進行same convolutions,把各filter下得到的輸出拼接起來。除此之外,還可以將CONV layer與POOL layer混合,同時實現各種效果。但是要注意使用same pool。
Inception Network由Christian Szegedy, Wei Liu等人提出。與其它只選擇單一尺寸和功能的filter不同,Inception Network使用不同尺寸的filters并將CONV和POOL混合起來,將所有功能輸出組合拼接,再由神經網絡本身去學習參數并選擇最好的模塊。
Inception Network在提升性能的同時,會帶來計算量大的問題。例如下面這個例子:
此CONV layer需要的計算量為:28x28x32x5x5x192=120m,其中m表示百萬單位??梢钥闯龅@一層的計算量都是很大的。為此,我們可以引入1x1 Convolutions來減少其計算量,結構如下圖所示:
通常我們把該1x1 Convolution稱為“瓶頸層”(bottleneck layer)。引入bottleneck layer之后,總共需要的計算量為:28x28x16x192+28x28x32x5x5x16=12.4m。明顯地,雖然多引入了1x1 Convolution層,但是總共的計算量減少了近90%,效果還是非常明顯的。由此可見,1x1 Convolutions還可以有效減少CONV layer的計算量。
7
Inception Network
上一節我們使用1x1 Convolution來減少Inception Network計算量大的問題。引入1x1 Convolution后的Inception module如下圖所示:
多個Inception modules組成Inception Network,效果如下圖所示:
上述Inception Network除了由許多Inception modules組成之外,值得一提的是網絡中間隱藏層也可以作為輸出層Softmax,有利于防止發生過擬合。
8
Using Open-Source Implementation
本節主要介紹GitHub的使用,GitHub是一個面向開源及私有軟件項目的托管平臺,上面包含有許多優秀的CNN開源項目。關于GitHub具體內容不再介紹,有興趣的小伙伴自行查閱。
9
Transfer Learning
有關Transfer Learning的相關內容,我們在吳恩達《構建機器學習項目》精煉筆記(2)– 機器學習策略(下)中已經詳細介紹過,這里就不再贅述了。
10
Data Augmentation
常用的Data Augmentation方法是對已有的樣本集進行Mirroring和Random Cropping。
另一種Data Augmentation的方法是color shifting。color shifting就是對圖片的RGB通道數值進行隨意增加或者減少,改變圖片色調。
除了隨意改變RGB通道數值外,還可以更有針對性地對圖片的RGB通道進行PCA color augmentation,也就是對圖片顏色進行主成分分析,對主要的通道顏色進行增加或減少,可以采用高斯擾動做法。這樣也能增加有效的樣本數量。具體的PCA color augmentation做法可以查閱AlexNet的相關論文。
最后提一下,在構建大型神經網絡的時候,data augmentation和training可以由兩個不同的線程來進行。
11
State of Computer Vision
神經網絡需要數據,不同的網絡模型所需的數據量是不同的。Object dection,Image recognition,Speech recognition所需的數據量依次增加。一般來說,如果data較少,那么就需要更多的hand-engineering,對已有data進行處理,比如上一節介紹的data augmentation。模型算法也會相對要復雜一些。如果data很多,可以構建深層神經網絡,不需要太多的hand-engineering,模型算法也就相對簡單一些。
值得一提的是hand-engineering是一項非常重要也比較困難的工作。很多時候,hand-engineering對模型訓練效果影響很大,特別是在數據量不多的情況下。
在模型研究或者競賽方面,有一些方法能夠有助于提升神經網絡模型的性能:
Ensembling: Train several networks independently and average their outputs.
Multi-crop at test time: Run classifier on multiple versions of test images and average results.
但是由于這兩種方法計算成本較大,一般不適用于實際項目開發。
最后,我們還要靈活使用開源代碼:
Use archittectures of networks published in the literature
Use open source implementations if possible
Use pretrained models and fine-tune on your dataset
喜歡就請贊賞或轉發分享一下吧
往 期 推 薦
【1】吳恩達《卷積神經網絡》精煉筆記(1)-- 卷積神經網絡基礎
【2】干貨 | 神經網絡與深度學習歷史文章匯總
【3】深入淺出機器學習技法(一):線性支持向量機(LSVM)
【4】干貨 | 機器學習基石精選文章鏈接
【5】機器學習中的維度災難
長按二維碼掃描關注
AI有道
ID:redstonewill
紅色石頭
個人微信 : WillowRedstone
新浪微博:@RedstoneWill
總結
以上是生活随笔為你收集整理的吴恩达《卷积神经网络》精炼笔记(2)-- 深度卷积模型:案例研究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是句柄?
- 下一篇: C/C++入门的精髓!太全了吧,收藏夹的