卷積神經網路模型(2)-AlexNet解讀
最近要開始找工作啦,準備將自己看過的文章及其實現通過專欄的方式記錄一下,也希望能一起交流。主要內容包括:深度學習模型、目標檢測、語義分割、細粒度識別、目標追蹤、遷移學習、通用學習等,主要是論文及自己的思考,目前在一步步構建中。
說起深度學習在圖像領域的應用,不得不提Hinton實驗室的AlexNet在ILSVRC-2012上的矚目表現,也是卷積神經網路在大規模數據集的開篇巨作。同時我把該專欄第一篇文章留給了LeNet-5,由於要寫BP傳播、卷積池化的作用比較繁瑣,所以先寫了第二篇文章AlexNe本文組織框架如下:AlexNet的創新點及其意義、網路結構及特點、實驗結果。同時我正在通過TensorFlow實現AlexNet,爭取下一篇文章放出。1、意義
AlexNet首次在大規模圖像數據集實現了深層卷積神經網路結構,點燃了深度學習這把火。其在ImageNet LSVRC-2012目標識別的top-5 error為15.3%,同期第二名僅為26.2%,碾壓其他傳統的hand-craft 特徵方法,使得計算機視覺從業者從繁重的特徵工程中解脫出來,轉向思考能夠從數據中自動提取需要的特徵,做到數據驅動。得益於GPU計算性能的提升以及大規模數據集的出現,自此後每年的ImageNet LSVRC挑戰賽都被深度學習模型霸佔著榜首。
2、創新點
- 訓練出當前最大規模的卷積神經網路,此前LeNet-5網路僅為3個卷積層及1個全連接層。
- 實現高效的GPU卷積運算結構,也使得此後GPU成為深度學習的主要工具,老黃做夢都要笑醒了。
- 通過眾多的skills(dropout、RELU、Data Augmentation)解決深層神經網路的過擬合問題,使得該網路在60 million參數的情況下依舊能很好收斂。這些方法現在已經成為了CNN不可或缺的一部分。
3、網路結構
由於當時的GPU運算能力比較低,AlexNet通過兩個GPU協同訓練,因此文章給出的網路結構不如NetScope的清晰,參見Netscope。
該網路共包含8個權重層,其中5個卷積層,3個全連接層。1,2卷積層後連有LRN層,不過此後的網路也證明LRN並非CNN中必須包含的層,甚至有些網路加入LRN後效果反而降低。每個LRN及最後層卷積層後跟有最大池化層,並且各個權重層均連有RELU激活函數。全連接層後使用了dropOut這一神器以解決過擬合。上面這幅圖的feature map 維度需要綜合上下兩個GPU的結果,其輸入為224*224*3的圖片,第一層卷積層的kernel個數為96,size為11*11*3,步伐為4,其得到的feature map size為55*55*48。有個細節,計算feature map size時我們發現,(224-11)/4 並不能整除,也就是說kernel在水平移動時的最後一個感受野並非為11*11。不過這個細節在NetScope中已經修改了,裡面的輸入被resize到227*227*3。其後的卷積、池化及全連接就比較好理解了,當我們發現卷積的kernel size不能整除時,自動pad就好啦。
卷積1步伐為4,kernel size為11*11*96,feature map 為55*55*96
Pooling1步伐為2,kernel為3*3,feature map 為27*27*96
卷積2步伐為1,kernel size 為5*5*256,feature map 為27*27*256,feature map大小未變說明卷積前左右各pad 2
Pooling2步伐為2,kernel 為3*3,feature map 為13*13*256
卷積3步伐為1,kernel size 為3*3*384,feature map 為13*13*384
卷積4步伐為1,kernel size 為3*3*384,feature map 為13*13*384
卷積4步伐為1,kernel size 為3*3*256,feature map 為13*13*256
Pooling3步伐為2,kernel 為3*3,feature map 為6*6*256
全連接6、7的神經元個數為4096,全連接層8神經元個數為1000,對應於ImageNet的1000類。
4、網路特點
- RELU的使用
- LRN
雖然後來的很多網路都不屑於使用LRN,甚至直接說LRN對於網路沒有任何提升,但是思路真的很新奇呀。
LRN加在RELU的激活後面,能夠增加網路的泛化能力,並在ILSVRC-2012上降低1%的錯誤率。傳說思路來源於神經元的側向抑制機制,不同的神經元都在做特徵提取這件事,能否讓他們相互競爭呢?
其中為kernel i 在x,y坐標的feature map,j為x,y位置的其他相鄰kernel的feature map,這樣我們就可以通過其他kernel的響應抑制我們的我們的feature map啦。文章給出了超參數的經驗值,估計試了很多很多次吧。成功開啟深度學習調參之路。- Overlapping Pooling
也算是創新點之一吧,畢竟此前的文章的池化沒有重疊的,不過後續的其他文章也鮮有重疊。重疊池化的意思是,池化步伐小於kernel size,這樣池化後的feature map的感受野其實是有部分重疊的。
- Data Augmentation
- DropOut
5、實驗結果
比第二名高出太多,其實FV方法直到現在都是很常用的方法,也衍生出了FV-CNN,可以說當時是非常流弊的方法了。關於代碼部分,第三篇文章補上。6、參考
論文下載地址:http://machinelearning.wustl.edu/mlpapers/paper_files/NIPS2012_0534.pdf
推薦閱讀:
※如何理解卷積神經網路中的權值共享?
※如何看待顧險峰《看穿機器學習(W-GAN模型)的黑箱》這篇文章?
※ICML 2016上哪些論文值得關注?
※是不是對於任意 n×n 大小的圍棋棋盤,人類都贏不了 AlphaGo Zero 了?
※美國cs博士一般幾年能畢業?
TAG:深度学习DeepLearning | TensorFlow | 机器学习 |