TensorFlow学习笔记(二十八)CNN的9大模型之AlexNet
本文出自NIPS2012,作者是大神Alex Krizhevsky,屬于多倫多大學(xué)Hinton組。
概述
本文提出的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)被成為AlexNet,在我最近的研究學(xué)習(xí)中發(fā)現(xiàn),這一結(jié)構(gòu)及其變種在很多任務(wù)中都有使用,回過頭來重溫一下這篇論文仍然是有必要的。歸根到底,本文網(wǎng)絡(luò)結(jié)構(gòu)相對較淺,而且能夠提取到比較豐富的特征,而很多任務(wù)的數(shù)據(jù)集無法達(dá)到ImageNet的規(guī)模,使用AlexNet是比較好的特征提取方法。本文相對較“老”,其中的很多技術(shù)早已耳熟能詳,有興趣的可以去閱讀相關(guān)資料。
結(jié)構(gòu)
AlexNet有5個卷積層和3個全連接層,作者發(fā)現(xiàn)移除任意一層都會降低最終的效果。網(wǎng)絡(luò)結(jié)構(gòu)如圖:
這個網(wǎng)絡(luò)前面5層是卷積層,后面三層是全連接層,最終softmax輸出是1000類。具體分析第一層:
輸入圖片為224*224*3,卷積核大小為11*11*3,步長為4,輸出為55*55*96。
ReLU
AlexNet使用ReLU代替了傳統(tǒng)的激活函數(shù),而現(xiàn)在ReLU已經(jīng)廣泛地使用在了各種CNN結(jié)構(gòu)中。關(guān)于ReLU這里已經(jīng)沒必要講了,在2012年算是新穎的技術(shù),到今天已經(jīng)是遍地開花了。
Multiple GPU
AlexNet使用兩塊GTX580顯卡進(jìn)行訓(xùn)練,兩塊顯卡只需要在特定的層進(jìn)行通信,當(dāng)今的深度學(xué)習(xí)已經(jīng)基本都是在顯卡上完成的。兩塊GPU各訓(xùn)練網(wǎng)絡(luò)的一部分,在第二個卷積層和全連接層才需要互相通信。
在卷積層之間還需要加上Local Response Normalization和Overlap Pooling。
Local Response Normalization
ReLU本來是不需要對輸入進(jìn)行標(biāo)準(zhǔn)化,但本文發(fā)現(xiàn)進(jìn)行局部標(biāo)準(zhǔn)化能提高性能。
bix,y=aix,y/(k+α∑j=max(0,i?n/2)min(N?1,i+n/2)(ajx,y)2)
其中aix,y代表在feature map中第i個卷積核(x,y)坐標(biāo)處經(jīng)過了ReLU激活函數(shù)的輸出,這個式子的含義就是一個值和它前后的n個值做標(biāo)準(zhǔn)化。k,n,α,β都是超參數(shù),本文由驗證集確定為k=2,n=5,α=10?4,β=0.75。求和發(fā)生在feature map中,相同位置(x,y)的n個相鄰kernel map上。其中N是卷積核的總數(shù),符號max和min是為了表示邊緣幾層的標(biāo)準(zhǔn)化方式。
Overlap Pooling
一般的Pooling是不重疊的,而AlexNet使用的Pooling是可重疊的,也就是說,在池化的時候,每次移動的步長小于池化的邊長。AlexNet池化的大小為3*3的正方形,每次池化移動步長為2,這樣就會出現(xiàn)重疊。
總體而言,AlexNet網(wǎng)絡(luò)的結(jié)構(gòu)如下:
減小過擬合
AlexNet有6000萬個參數(shù),需要考慮過擬合的問題。
數(shù)據(jù)增強
對圖片進(jìn)行一些變換可以增大數(shù)據(jù)集。第一種方法是:原始圖片大小為256*256,在圖片上隨機選取224*224的小塊進(jìn)行訓(xùn)練,還可以這些小塊進(jìn)行水平翻轉(zhuǎn)進(jìn)一步增加數(shù)據(jù)量。另一種方法是使用PCA改變訓(xùn)練圖像RGB通道的像素值。
Dropout
這個方法現(xiàn)在也是大量使用。Dropout將隱層輸出以一定的概率置0,這個神經(jīng)元就不參與前向和后向傳播,就如同在網(wǎng)絡(luò)中刪除了一樣。Dropout也可以看成是一種模型組合,每個樣本都是不一樣的網(wǎng)絡(luò)結(jié)構(gòu)。Dropout減少了神經(jīng)元之間的共適應(yīng)關(guān)系(co-adaptation),一個神經(jīng)元不再依賴另一個神經(jīng)元,強迫網(wǎng)絡(luò)學(xué)習(xí)到更加魯棒的特征表示。
訓(xùn)練
使用SGD進(jìn)行訓(xùn)練,batch大小為128,momentum為0.9,weight decay為0.0005。迭代公式:
vi+1:=0.9?vi?0.0005???wi?????L?w|wi?Di wi+1:=wi+vi+1
在兩塊GTX580上花費了6天時間。
結(jié)果
在ILSVRC-2010上,top-1錯誤率為37.5%,top-5錯誤率為17.0%。比較有趣的是對96個11*11*3的卷積和進(jìn)行可視化:
可以看到這些卷積核學(xué)習(xí)到了很多和頻率、方向相關(guān)的特征,而且在第一個GPU上大多是沒有顏色,而第二個是有顏色的,這樣的結(jié)果和初始化值無關(guān)。神經(jīng)網(wǎng)絡(luò)最后一層4096維的向量可以作為圖像的高級特征,這樣的特征可以用于其他的任務(wù)中。
原文翻譯:http://blog.csdn.net/liumaolincycle/article/details/50496499
其中,在DL開源實現(xiàn)caffe的model樣例中,它也給出了alexnet的復(fù)現(xiàn),具體網(wǎng)絡(luò)配置文件如下https://github.com/BVLC/caffe/blob/master/models/bvlc_reference_caffenet/train_val.prototxt:接下來本文將一步步對該網(wǎng)絡(luò)配置結(jié)構(gòu)中各個層進(jìn)行詳細(xì)的解讀(訓(xùn)練階段):
1. conv1階段DFD(data flow diagram):
2. conv2階段DFD(data flow diagram):
3. conv3階段DFD(data flow diagram):
4. conv4階段DFD(data flow diagram):
5. conv5階段DFD(data flow diagram):
6. fc6階段DFD(data flow diagram):
7. fc7階段DFD(data flow diagram):
8. fc8階段DFD(data flow diagram):
總結(jié)
以上是生活随笔為你收集整理的TensorFlow学习笔记(二十八)CNN的9大模型之AlexNet的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TensorFlow学习笔记(二十七)C
- 下一篇: 分类算法之决策树C4.5算法