《ImageNet Classification with Deep Convolutional Neural Network》

  本篇論文是在ImageNet上大放異彩,將CNN應用於cv大舞臺,論文的作者是Alex Krizhevsky,來自加拿大多倫多大學Hinton組,所以論文中的模型又叫AlexNet

概述

  ImageNet數據集共有150萬張圖片,分爲22000個類別。Image Large-Scale Visual Recognition Competition(ILSVRC-2010)和ILSVRC-2012是其中的一個子集,AlexNet在ILSVRC-2010上取得了很好的成績,top-1和top-5的錯誤率分別爲37.5%和17.5%。在ILSVRC-2012上top-1和top-5的錯誤率分別爲15.3%和26.2%。AlexNet具有6M參數和65萬個神經元。文中提出了很多觀點,如今仍然沿用,所以說這篇文文章具有開創性的貢獻。

模型結構

  AlexNet具有5個卷積層和3個全連接層,需要說明的是大部分參數都是在全連接層,每一個卷積層包含不到1%的參數。而且作者強調去掉模型中的任何一層都會影響模型的精度。模型結構圖如下所示:
AlexNet結構圖
我們可以看出這是上下兩個相同的結構,由於當時GPU的顯存不夠大,作者使用的GTX580只有3G的顯存,所以採用兩個GPU並行計算。模型結構爲conv->max pooling->conv->max pooling->conv->conv->conv->max pooling->fc1->fc2->fc3。最後的全連接層有1000個神經元,目的是爲了分1000個類別。以第一層爲例,說明下參數分別爲什麼:
輸入圖像大小:224*224*3
卷積核大小:11*11  96個
步長:4
輸出feature map爲:96個size爲55*55的feature map

ReLU Nonlinearity

  作者提出在常見的激活函數爲tanh(x)sigmoid ,但是它們都有飽和區,在飽和區訓練速度比非飽和區要慢很多。而且我們都知道飽和區非常容易造成梯度彌散,ReLU的出現就是爲了解決這一個問題。
ReLU函數的表達式爲f(x)=max(0,x)

多GPU訓練

由與參數數量巨大,單GPU無法完成訓練,所以作者採用兩塊GPU一塊訓練,每一塊GPU上具有一半的kernels。大家可以查看上面模型圖,第一層具有96個kernels,作者在下面畫了48個在上面畫了48個。GPU之間通信只發生在部分層中。第2、4、5層僅與上一層駐留在同一個GPU中的kernels相連,第3層和全連接層與前層的兩塊GPU相連接。

Local Response Normalization局部響應歸一化

  局部響應歸一化使得模型的top-1和top-5錯誤率分別降低了1.4%和1.2%。現在有了BatchNormalization這個好像用的不太多了。

bx,yi=ax,yi/(k+αj=max(0,in/2)min(N1,i+n/2)(αx,yj)2)β

上面這個公式中,knαβ 均爲超參數,N爲該層所有kernel的個數。就是在所有feature map的(x,y)位置處做一個歸一化,我們可以想象其中一種情況。當j 的範圍爲(in/2,i+n/2) 時,就是把第i 個feature map的(x,y) 處的像素值比上第i 個feature map的前後各n/2 個feature map的(x,y) 處的像素值的和。

Overlapping Pooling

  下采樣的過程中步長小於kernel的大小。這個方法使得top-1和top-5的錯誤率分別下降了0.4%和0.3%。

減少過擬合

1、數據增強

  第一種數據增強的方法是數據裁剪,訓練時從256*256大小的數據上提取224*224大小的數據,以及原圖的水平和垂直翻轉之後也進行這樣的操作。這直接使數據集變爲原來的2048倍。測試時,對輸入數據從四個角和中心處提取224*224大小的patch,以及對輸入數據的水平翻轉之後也這樣操作,所以測試數據共提取了10個塊,對這10個塊分別進行預測,然後取平均。
  第二中數據增強的方法是採用PCA改變訓練數據的RGB通道的像素值。

2、Dropout

  Dropout以一定的概率將神經元的輸出置0,使得這個神經元既不參與前向計算也不參與後向傳播。降低了神經元之間的相互依賴性,迫使其它神經元必須學習更多的信息。由於每次丟棄神經元不同,也就使得模型每次都略有不同,所以也就相當於訓練了多個模型,最終的結果 由多個模型共同計算得出。 在測試時間,我們使用所有的神經元,但將它們的輸出乘以0.5,這對於採用指數衰減網絡產生的預測分佈的幾何平均值是合理的近似。

訓練

  採用隨機梯度下降法,並且網絡參數的初始化方式爲權重初始化方式是均值爲0,標準差爲0.01。第2、4、5和全連接層的偏置爲1,這樣可以使得神經元在初始階段爲正值,因爲ReLU的負數部分激活值爲0。其它層的偏置初始化爲0。120萬張圖像在兩塊GTX580上訓練了6天時間。

結果

  ILSVRC-2010數據集上top-1和top-5的錯誤率分別爲37.5%和17.0%。
而且在第一層卷積層中可視化96個kernels的結果如下:
這裏寫圖片描述
上面3行爲第一塊GPU的結果,是顏色無關的。下面3行爲第二塊GPU的結果,是顏色有關的。

參數數量

  AlexNet中有60million(6000萬)個參數和650000+個神經元,如果算上輸入圖像的話共有約809800個神經元。
這裏寫圖片描述

  解析可能還有些問題,請批評指正。

reference
[1] https://vimsky.com/article/3664.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章