Coursera吴恩达《卷积神经网络》课程笔记(2)-- 深度卷积模型:案例研究
紅色石頭的個人網站:redstonewill.com
《Convolutional Neural Networks》是Andrw Ng深度學習專項課程中的第四門課。這門課主要介紹卷積神經網絡(CNN)的基本概念、模型和具體應用。該門課共有4周課時,所以我將分成4次筆記來總結,這是第2節筆記。
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的結構如下圖所示:
上圖中紅色部分就是skip connection,直接建立a[l]a[l]與a[l+2]a[l+2]之間的隔層聯系。相應的表達式如下:
z[l+1]=W[l+1]a[l]+b[l+1]z[l+1]=W[l+1]a[l]+b[l+1]
a[l+1]=g(z[l+1])a[l+1]=g(z[l+1])
z[l+2]=W[l+2]a[l+1]+b[l+2]z[l+2]=W[l+2]a[l+1]+b[l+2]
a[l+2]=g(z[l+2]+a[l])a[l+2]=g(z[l+2]+a[l])
a[l]a[l]直接隔層與下一層的線性輸出相連,與z[l+2]z[l+2]共同通過激活函數(ReLU)輸出a[l+2]a[l+2]。
該模型由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能夠訓練更深層的神經網絡。
如上圖所示,輸入x經過很多層神經網絡后輸出a[l]a[l],a[l]a[l]經過一個Residual block輸出a[l+2]a[l+2]。a[l+2]a[l+2]的表達式為:
a[l+2]=g(z[l+2]+a[l])=g(W[l+2]a[l+1]+b[l+2]+a[l])a[l+2]=g(z[l+2]+a[l])=g(W[l+2]a[l+1]+b[l+2]+a[l])
輸入x經過Big NN后,若W[l+2]≈0W[l+2]≈0,b[l+2]≈0b[l+2]≈0,則有:
a[l+2]=g(a[l])=ReLU(a[l])=a[l]????when?a[l]≥0a[l+2]=g(a[l])=ReLU(a[l])=a[l]whena[l]≥0
可以看出,即使發生了梯度消失,W[l+2]≈0W[l+2]≈0,b[l+2]≈0b[l+2]≈0,也能直接建立a[l+2]a[l+2]與a[l]a[l]的線性關系,且a[l+2]=a[l]a[l+2]=a[l],這其實就是identity function。a[l]a[l]直接連到a[l+2]a[l+2],從效果來說,相當于直接忽略了a[l]a[l]之后的這兩層神經層。這樣,看似很深的神經網絡,其實由于許多Residual blocks的存在,弱化削減了某些神經層之間的聯系,實現隔層線性傳遞,而不是一味追求非線性關系,模型本身也就能“容忍”更深層的神經網絡了。而且從性能上來說,這兩層額外的Residual blocks也不會降低Big NN的性能。
當然,如果Residual blocks確實能訓練得到非線性關系,那么也會忽略short cut,跟Plain Network起到同樣的效果。
有一點需要注意的是,如果Residual blocks中a[l]a[l]和a[l+2]a[l+2]的維度不同,通??梢砸刖仃?span id="ozvdkddzhkzd" class="MathJax_Preview" style="color: inherit; display: none;">WsWs,與a[l]a[l]相乘,使得Ws?a[l]Ws?a[l]的維度與a[l+2]a[l+2]一致。參數矩陣WsWs有來兩種方法得到:一種是將WsWs作為學習參數,通過模型訓練得到;另一種是固定WsWs值(類似單位矩陣),不需要訓練,WsWs與a[l]a[l]的乘積僅僅使得a[l]a[l]截斷或者補零。這兩種方法都可行。
下圖所示的是CNN中ResNets的結構:
ResNets同類型層之間,例如CONV layers,大多使用same類型,保持維度相同。如果是不同類型層之間的連接,例如CONV layer與POOL layer之間,如果維度不同,則引入矩陣WsWs。
5. Networks in Networks and 1x1 Convolutions
Min Lin, Qiang Chen等人提出了一種新的CNN結構,即1x1 Convolutions,也稱Networks in Networks。這種結構的特點是濾波器算子filter的維度為1x1。對于單個filter,1x1的維度,意味著卷積操作等同于乘積操作。
那么,對于多個filters,1x1 Convolutions的作用實際上類似全連接層的神經網絡結構。效果等同于Plain Network中a[l]a[l]到a[l+1]a[l+1]的過程。這點還是比較好理解的。
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的相關內容,我們在 Coursera吳恩達《構建機器學習項目》課程筆記(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
更多AI資源請關注公眾號:紅色石頭的機器學習之路(ID:redstonewill)
總結
以上是生活随笔為你收集整理的Coursera吴恩达《卷积神经网络》课程笔记(2)-- 深度卷积模型:案例研究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Coursera吴恩达《优化深度神经网络
- 下一篇: Coursera吴恩达《卷积神经网络》课