1. 程式人生 > >《ImageNet Classification with Deep Convolutional Neural Network》

《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個神經元。
這裡寫圖片描述

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