1. AlexNet(2012年度ILSVRC挑戰(zhàn)冠軍)
論文題目:ImageNet Classification with Deep Convolutional Networks
這篇文章算是深度學習的起源(盡管有些學者認為Yann LeCun在1998年的論文paper才是真正的起源)。文章標題是“ImageNet Classification with Deep Convolutional Networks”,已經(jīng)獲得了共6184次引用,并被廣泛認為是業(yè)內(nèi)最具深遠影響的一篇。Alex Krizhevsky, Ilya Sutskever, 以及Geoffrey Hinton三人創(chuàng)造了一個“大規(guī)模、有深度的卷積神經(jīng)網(wǎng)絡”,并用它贏得了2012年度ILSVRC挑戰(zhàn)(ImageNet Large-Scale Visual Recognition Challenge)。ILSVRC作為機器視覺領(lǐng)域的奧林匹克,每年都吸引來自全世界的研究小組,他們拿出渾身解數(shù)相互競爭,用自己組開發(fā)的機器視覺模型/算法解決圖像分類、定位、檢測等問題。2012年,當CNN第一次登上這個舞臺,在前五測試錯誤率top 5 test error rate項目上達到15.4%的好成績。(前五錯誤Top 5 error指的是當輸入一幅圖像時,模型的預測結(jié)果可能性前五中都沒有正確答案)。排在它后面的成績是26.2%,說明CNN相對其它方法具有令人震驚的優(yōu)勢,這在機器視覺領(lǐng)域引起了巨大的震動??梢哉f,從那時起CNN就變成了業(yè)內(nèi)家喻戶曉的名字。
這篇文章主要討論了一種網(wǎng)絡架構(gòu)的實現(xiàn)(我們稱為AlexNet)。相比現(xiàn)在的架構(gòu),文中所討論的布局結(jié)構(gòu)相對簡單,主要包括5個卷積層、最大池化層、丟包dropout層,以及3個全連通層。該結(jié)構(gòu)用于針對擁有1000個可能的圖像類別進行分類。

論文要點:
1. 采用了首創(chuàng)的結(jié)構(gòu)(如上圖),5個卷積層和3個全連接層。第1個卷積層后接LRN層和pooling層,第3,4,5層間無pooling和normalization層。
2. 使用ReLU激活函數(shù)。實驗表明,比起tanh激活函數(shù),ReLU激活函數(shù)使得訓練速度加快。
3. 在多GPU上訓練模型。
4. 局部響應歸一化(Local response Normalisation). 因為ReLU使得輸出變得不受拘束,即可為無窮大。需要用LRN進行歸一化處理。現(xiàn)在這個層已經(jīng)逐漸被淘汰,用batch normalisation 或者dropout來代替。
5. 重疊池化(overlapping pooling)。一般的池化是池化窗口的大小和移動步長是相等的,即不可能有重疊的部分。但重疊池化是池化窗口的大小大于移動步長。實驗結(jié)果表明,能降低模型的錯誤率。詳細可看:http://blog.csdn.net/danieljianfeng/article/details/42433475
6. 用data augmentation的方法解決overfitting的問題。其一是圖像變換、水平反射、塊提取等。其二是調(diào)整RGB通道的色彩強度。利用PCA獲取主成分,然后利用特征值和從[0,1]高斯分布的產(chǎn)生的隨機數(shù)的積作為新的值。
7. 用dropout解決overfitting的問題。在前2個卷積層用dropout,概率為0.5。
8. 使用批量隨機梯度下降法batch stochastic gradient descent進行訓練,為動量momentum和權(quán)重衰退weight decay設定限定值。
9. 沒用利用非監(jiān)督學習的pre-training,盡管沒有實現(xiàn),但是作者相信這個能幫助模型提高性能。
2. ZF NET(2013年度ILSVRC挑戰(zhàn)冠軍)
論文題目:Visualizing and Understanding Convolutional Neural Networks
AlexNet在2012年大出風頭之后,2013年隨即出現(xiàn)了大量的CNN模型。當年的的ILSVRC比賽勝者是來自紐約大學NYU的Matthew Zeiler以及Rob Fergus設計的模型,叫做ZF Net。它達到了11.2%的錯誤率。ZF Net的架構(gòu)不僅對之前的AlexNet進行了進一步的優(yōu)化,而且引入了一些新的關(guān)鍵技術(shù)用于性能改進。另外一點,文章作者用了很長的篇幅講解了隱藏在卷積網(wǎng)絡ConvNet之下的直觀含義以及該如何正確地將濾波器及其權(quán)重系數(shù)可視化。
當前存在的問題:
Zeiler和Fergus提出CNN的復興主要依靠的是大規(guī)模訓練集以及GPU帶來的計算能力飛躍。他們指出,目前短板在于研究人員對模型的內(nèi)部運行機理知之甚少,若是不能解決這個問題,針對模型的改進就只能依靠試錯?!癲evelopment of better models is reduced to trial and error”. 雖然相較3年前,我們現(xiàn)在對模型有了進一步的了解;然而這依然是一個重要問題。
解決的問題:
改進了AlexNet的細節(jié)及其可視化特征圖層feature map的表現(xiàn)方式

論文要點:
1. 當前導致性能提高的因素:(i) 可獲得更大的數(shù)據(jù)集; (ii) GPU的發(fā)展; (iii)更好的泛化技術(shù),比如dropout。
2. 利用反卷積進行可視化。反卷積可以看作是卷積的逆過程,做一個從特征到像素的映射。
(1) 為了測試卷積的激活函數(shù),我們將該層的激活函數(shù)都設置為0,然后將特征map傳到反卷積層。
(2) Unpooling: 顧名思義,unpooling就是反pooling。由于pooling是不可逆的,所以unpooling只能是pooling的一種近似表達。通過記錄正常pooling時的位置,把傳進來的特征按照記錄的方式重新擺放。
(3) Rectification: 將重建的信號傳入ReLU激活函數(shù)。
(4) Filtering: 反卷積利用卷積的filter的轉(zhuǎn)置(也就是水平和垂直翻轉(zhuǎn))來計算卷積前的特征圖。從一個單獨的特征值獲得的圖片重構(gòu)類似原始圖片的一部分。
這個方法的缺點就是只能可視化一個激活函數(shù),而不能可視化所有激活函數(shù)共同作用的結(jié)果。
3. 文章的另一個貢獻是利用可視化來調(diào)整神經(jīng)網(wǎng)絡的結(jié)構(gòu)。AlexNet的改進細節(jié)如下:
(1) 將局部連接改成全連接。
(2) 將第一層的卷積核由11*11改為7*7。因為從可視化中發(fā)現(xiàn)第一層filter濾出來的結(jié)果包含非常多高頻和低頻的信息,中間頻率的filter很少覆蓋。
(3) 將第一層的步長由4改為2。因為第二層的可視化比較混淆,由于第一層比較大的步長導致的。
(4) Bias都初始化為0。
4. CNN可視化特點:
(1) 每張?zhí)卣鲌D激活值具有聚集性。
(2) 高層具有更好的不變形。
(3) ‘夸張’的圖像判別部分。估計應該是高層特征可視化后能夠還原原圖的大部分。
(4) 每層的卷積結(jié)構(gòu)能夠?qū)W習分層的特征。
(5) 底層的卷積最先收斂,高層的特征需要在充分的訓練后才能收斂。
5. CNN能夠鑒別物體在圖像中的位置。本文通過一個灰色方塊,遮蓋物體的不同位置,然后監(jiān)控分類器的輸出,最后結(jié)果證明模型定位了場景中的物體。
3. VGG NET(2014年度ILSVRC優(yōu)秀模型)
論文題目:Very Deep Convolutional Networks for Large-Scale Image Recognition
這篇文章比較簡單但是富有深度。因為該文章著重討論了深度對卷積神經(jīng)網(wǎng)絡的影響,并且證明它的模型在不同數(shù)據(jù)集上具有很好的泛化。
論文要點:
1.? 牛津大學的Karen Simonyan以及Andrew Zisserman兩位創(chuàng)造了一個19層的CNN,網(wǎng)絡中僅使用了3*3尺寸的濾波器,步長stride和填充padding都為1,池化層使用2*2的最大池化函數(shù),步長為2。僅使用3*3濾波器,這與之前的AlexNet的首層11*11濾波器、ZF Net的7*7濾波器都大不相同。作者所闡述的理由是,兩個3*3的卷積層結(jié)合起來能夠生成一個有效的5*5感知區(qū)。因此使用小尺寸濾波器既能保持與大尺寸相同的功能又保證了小尺寸的優(yōu)勢。優(yōu)勢其中之一就是參量的減少,另一個優(yōu)勢在于,針對兩個卷積網(wǎng)絡我們可以使用多一個線性整流層ReLU。

2.? 輸入圖像的空間尺寸隨著層數(shù)增加而減少(因為通過每層的卷積或是池化操作),其深度反而隨著濾波器越來越多而增加。
3. 每個最大池化層之后,濾波器數(shù)量都翻倍,這進一步說明了數(shù)據(jù)的空間尺寸減少但深度增加。模型不僅對圖像分類有效,同樣能很好地應用在本地化任務中(翻譯任務)。作者在文章中進行了一系列的回歸分析說明此事。也就是將圖片從橫向的長度逐漸變成縱向的長度。
4. ?在訓練中使用了尺寸抖動技術(shù)scale jittering進行數(shù)據(jù)擴容data augmentation,取得更好的性能表現(xiàn)。
5.? 每卷積層后緊跟一個線性整流層ReLU并使用批量梯度下降法batch gradient descent進行訓練。
4.? GoogLeNet(2014年度ILSVRC挑戰(zhàn)冠軍)
論文題目:Going Deeper with Convolutions
GoogLeNet是一個22層的CNN,它以6.7%的錯誤率贏得了2014年度ILSVRC的冠軍。這是第一個跟傳統(tǒng)方法,也就是卷積層與池化層簡單疊加以形成序列結(jié)構(gòu)的方法不同的一種CNN的新架構(gòu)。值得一提的是,與2012年的AlexNet模型相比,GoogLeNet的參數(shù)減少了近12倍,但是精度卻提高了。文章作者強調(diào),他們的新模型也特別重視內(nèi)存與計算量的使用。
當前存在問題:
增加神經(jīng)網(wǎng)絡的深度和廣度能夠提高模型的性能,但是它存在著兩個主要缺點。
1. 更深更廣的神經(jīng)網(wǎng)絡意味著參數(shù)的增加,這將導致overfitting。
2. 神經(jīng)網(wǎng)絡規(guī)模的增大無疑將導致計算量的增大。
解決方法:
文章認為解決上述兩個缺點的根本方法是將全連接甚至一般的卷積都轉(zhuǎn)化為稀疏連接。一方面現(xiàn)實生物神經(jīng)系統(tǒng)的連接也是稀疏的,另一方面有文獻表明:對于大規(guī)模稀疏的神經(jīng)網(wǎng)絡,可以通過分析激活值的統(tǒng)計特性和對高度相關(guān)的輸出進行聚類來逐層構(gòu)建出一個最優(yōu)網(wǎng)絡。這點表明臃腫的稀疏網(wǎng)絡可能被不失性能地簡化。
早些的時候,為了打破網(wǎng)絡對稱性和提高學習能力,傳統(tǒng)的網(wǎng)絡都使用了隨機稀疏連接。但是,計算機軟硬件對非均勻稀疏數(shù)據(jù)的計算效率很差,所以在AlexNet中又重新啟用了全連接層,目的是為了更好地優(yōu)化并行運算。
所以,現(xiàn)在的問題是有沒有一種方法,既能保持網(wǎng)絡結(jié)構(gòu)的稀疏性,又能利用密集矩陣的高計算性能。大量的文獻表明可以將稀疏矩陣聚類為較為密集的子矩陣來提高計算性能,據(jù)此論文提出了名為Inception 的結(jié)構(gòu)來實現(xiàn)此目的。
論文要點:

1. naive Inception module.
(1) 采用不同大小的卷積核意味著不同大小的感受野,最后拼接意味著不同尺度特征的融合。
(2) 之所以卷積核大小采用1、3和5,主要是為了方便對齊。設定卷積步長stride=1之后,只要分別設定pad=0、1、2,那么卷積之后便可以得到相同維度的特征,然后這些特征就可以直接拼接在一起了。
(3) 文章說很多地方都表明pooling挺有效,所以Inception里面也嵌入了。
(4) 網(wǎng)絡越到后面,特征越抽象,而且每個特征所涉及的感受野也更大了,因此隨著層數(shù)的增加,3x3和5x5卷積的比例也要增加。
但是,使用5x5的卷積核仍然會帶來巨大的計算量。

2. improved Inception module.
舉個例子。
輸入是一個28x28x192的圖像,1x1的卷積核尺寸是1x1x64, 3x3的卷積核尺寸是3x3x128, 5x5的卷積核尺寸是5x5x32。
用naive inception module的話,參數(shù)的個數(shù)是:
1x1x192x64 + 3x3x192x128 + 5x5x192x32 = 387072
用improved inception module的話,參數(shù)的個數(shù)是:
1x1x192x64+ (1x1x192x64+3x3x64x128) +(1x1x192x64+5x5x64x32) = 161792
所以可以看出,用了1x1的卷積核,起到了降維的作用。
計算不懂可以看http://blog.csdn.net/v_july_v/article/details/51812459。
3. GoogLeNet采用了結(jié)構(gòu)化的結(jié)構(gòu),并且不是串行執(zhí)行,很多模塊都是可以并行執(zhí)行。

5. GoogLeNet V2
論文題目:Rethinking the Inception Architecture for Computer Vision
實驗證明,GoogLeNet確實比AlexNet和VGGNet好得多。一方面體現(xiàn)在內(nèi)存上,使用了比AlexNet少12倍的參數(shù)。另一方面體現(xiàn)在計算量上。極大的減少了計算量。
當前存在問題:
GoogLeNet的復雜結(jié)構(gòu)導致很難對該網(wǎng)絡進行改變。如果只是簡單的對網(wǎng)絡進行規(guī)模的擴大,那么將對網(wǎng)絡計算量造成快速的上升。
解決的問題:
本論文就目前存在的問題而言,提出了幾個基本的原則,為大家在實驗上提供大方向的指導。此外,提出了一個新的inception module。
論文要點:
1. 通用原則
(1) 避免表達瓶頸,特別是在網(wǎng)絡靠前的地方。信息流前向傳播過程中顯然不能經(jīng)過高度壓縮的層,即表達瓶頸。從input到output,feature map的寬和高基本都會逐漸變小,但是不能一下子就變得很小。比如你上來就來個kernel = 7, stride = 5 ,這樣顯然不合適。另外輸出的維度channel,一般來說會逐漸增多(每層的num_output),否則網(wǎng)絡會很難訓練。(特征維度并不代表信息的多少,只是作為一種估計的手段)
(2) 高維特征更易處理。高維特征更易區(qū)分,會加快訓練。
(3) 可以在低維嵌入上進行空間匯聚而無需擔心丟失很多信息。比如在進行3x3卷積之前,可以對輸入先進行降維而不會產(chǎn)生嚴重的后果。假設信息可以被簡單壓縮,那么訓練就會加快。
(4)? 平衡網(wǎng)絡的寬度與深度。
2. 將大尺寸濾波器的尺寸進行卷積的因式分解
大尺寸的卷積核可以帶來更大的感受野,但也意味著更多的參數(shù),比如5x5卷積核參數(shù)是3x3卷積核的25/9=2.78倍。為此,作者提出可以用2個連續(xù)的3x3卷積層(stride=1)組成的小網(wǎng)絡來代替單個的5x5卷積層,(保持感受野范圍的同時又減少了參數(shù)量),如下圖:

(1 ) 這種替代會造成表達能力的下降嗎?后面有大量實驗可以表明不會造成表達缺失。
(2) ?3x3卷積之后還要再加激活嗎?作者也做了對比試驗,表明添加非線性激活會提高性能。
3. 空間分解成不對稱卷積
從上面來看,大卷積核完全可以由一系列的3x3卷積核來替代,那能不能分解的更小一點呢。文章考慮了nx1 卷積核。如下圖:

于是,任意nxn的卷積都可以通過1xn卷積后接nx1卷積來替代。實際上,作者發(fā)現(xiàn)在網(wǎng)絡的前期使用這種分解效果并不好,還有在中度大小的feature map上使用效果才會更好。(對于mxm大小的feature map,建議m在12到20之間)。
4. inception結(jié)構(gòu)演變

(1) 圖4是GoogLeNet V1中使用的Inception結(jié)構(gòu)。
(2) 圖5是用3x3卷積序列來代替大卷積核。
(3) 圖6是用nx1卷積來代替大卷積核,這里設定n=7來應對17x17大小的feature map。該結(jié)構(gòu)被正式用在GoogLeNet V2中。
6. Microsoft ResNet(2015年度ILSVRC挑戰(zhàn)冠軍)
論文題目:Deep Residual Learning for Image Recognition
想象一個很深的CNN架構(gòu),把它的層數(shù)翻兩番,它的深度可能還比不上ResNet,它是微軟亞研MRA在2015年提出的架構(gòu)。ResNet是一個擁有152層網(wǎng)絡架構(gòu)的新秀,它集分類、檢測與翻譯功能于一身。除開層數(shù)破了紀錄,ResNet自身的表現(xiàn)也破了ILSVRC2015的記錄,達到了不可思議的3.6%(通常人類也只能達到5~10%的出錯率,跟專業(yè)領(lǐng)域和技能相關(guān))。
當前存在問題:
許多實驗結(jié)果證明,神經(jīng)網(wǎng)絡隨著層數(shù)的增加,模型的性能會更好。但是,僅僅是簡單的堆積網(wǎng)絡層數(shù)就能取得越來越好的性能嗎?答案是否定的。這之間的一個障礙就是梯度爆炸/梯度消失。這個問題一開始能被初始規(guī)范化和添加中間規(guī)范層解決。但是當深度神經(jīng)網(wǎng)絡開始收斂時,新的問題出現(xiàn)了。那就是性能退化。當神經(jīng)網(wǎng)絡深度增加時,準確率會逐漸飽和,隨后急劇下降。這意味著,到一定程度后,增加神經(jīng)網(wǎng)絡的層數(shù)會導致準確率下降。但這個并不是由于過擬合造成的。
解決的問題:
本論文提出了深度殘差學習網(wǎng)絡來解決性能退化的問題。

引入一個Residual block:
這篇博文詳細介紹了為什么這個模型能很好的解決梯度消失的問題:http://blog.csdn.net/superCally/article/details/55671064
論文要點:
1. 捷徑連接(shortcut connections):如上圖。捷徑連接是指一種跳過一個或多個層次的連接。在我們的案例中,所使用的捷徑連接僅僅是進行恒等映射(identify mapping),它們的輸出被加入到堆疊層次的輸出中(見上圖)。恒等映射捷徑連接的增加并沒有引入新的參數(shù)也沒有增加計算復雜度。
2. 深度殘差神經(jīng)網(wǎng)絡訓練結(jié)果表明:
(1)我們提出的超深度殘差網(wǎng)絡更便于優(yōu)化,而其所對應的平凡網(wǎng)絡(即簡單通過層次堆疊而成的網(wǎng)絡)的訓練誤差卻隨著網(wǎng)絡層次的加深而變大。
(2)我們所提出的深度殘差網(wǎng)絡更容易在增加深度時獲得精度的提高,明顯優(yōu)于之前的網(wǎng)絡結(jié)構(gòu)所得到的結(jié)果。
3. 多數(shù)的卷積層的過濾器尺寸為3×3并且在設計時遵從下列兩條簡單的規(guī)則:(i)對于相應大小的輸出特征圖尺寸,層中必須含有相同數(shù)量的過濾器;(ii)若特征圖尺寸減半時,則需要倍增過濾器數(shù)量來保持各層的時間復雜度。我們通過步長為2的卷積層直接進行降采樣。最終的網(wǎng)絡包括了一個全局的均值池化層和1000路裝備了softmax激活函數(shù)的全連接層。
參考文獻
【1】http://blog.csdn.net/feimengjuan/article/details/69666981
【2】http://blog.csdn.net/u011534057/article/details/54847992