《ImageNet Classification with Deep Convolutional Neural Networks》 剖析


 《ImageNet Classification with Deep Convolutional Neural Networks》 剖析

 

CNN 領域的經典之作, 作者訓練了一個面向數量為 1.2 百萬的高分辨率的圖像數據集ImageNet, 圖像的種類為1000 種的深度卷積神經網絡。並在圖像識別的benchmark數據集上取得了卓越的成績。

 

和之間的LeNet還是有着異曲同工之妙。這里涉及到 category 種類多的因素,該網絡考慮了多通道卷積操作, 卷積操作也不是 LeNet 的單通道卷積了 (LeNet僅僅限於 gray image 的 digit recognition , label種類就10個)。 

 

該神經網絡有6千萬個參數,650,000個神經元。包含了五個卷積層(卷積操作層和下采樣層統稱之為卷積層), 和三個全連接層。 為了使得訓練更快,讓網絡實現在GPU上進行卷積操作運算,為了減小overfitting, 全連接層引入一個最近興起的方法:dropout。下面是整個網絡的大致介紹:

 

 

如圖,其中第一層為輸入層,就是一張224X224X3的image, 首先進行的是卷積層,kernel 是11X11X3的, 那么每11X11的圖像大小范圍被卷積操作成為一個新的像素點的一個信道。卷積的步長為4, 說明224 X 224 被卷積成為是 55X55 的大小, 因為卷積核有96個,上下平分(因為被分到不同的GPU進行運算),所以第二層是 55X55X48 的新的層。  

 

 

(1), Relu非線性操作:

我們知道在淺層神經網絡中, 引入非線性操作(也叫激活函數 active function),可以增強神經網絡的泛化能力,使得神經網絡更加robusting。但是在深層網絡中,使用tanh函數,作為激活函數,增加了大量的計算,使得訓練更加慢了,引入Hinton的Rectified Linear units (Relu) 來作為激活函數,

Relu(x) = max(0, x)

這樣的好處: 第一是在論文中也說明了,簡單的max計算,大大減少了計算量,可以提高訓練速度, 第二是梯度在Relu中是直接傳遞的,鑒於深度網絡的梯度衰減的現象,Relu可以保持梯度,減緩梯度衰減的趨勢。 另外一個方面也是bp過程中沒有了梯度換算的操作,加快了訓練。 

 

 

(2), 在多GPU上進行運算

因為整個神經網絡的訓練是卷積之間的操作基本是獨立的,所以可以采用獨立的兩個GPU進行運算,增快訓練的速度。

 

(3), Normalization

為了不讓某一些kernel的weight變得很大,要對不同的kernel進行Normalization。

(為什么weight不能很大,如果某一個kernel 的weight變得很大的話,它的權值稍微變化則會引起很大的影響,那會重點改變它的weight而忽視其他太小weight的kernel)

 

其中, k, n, alpha, beta 這些常量都是“可調參數”, 由最好的validation set決定

 

 

(4), 對下采樣層進行Overlapping Pooling

傳統的下采樣是不重疊的,但是為了精確性,使得識別度更高,對Pooling層進行Overlapping Pooling。

Pooling的好處,有點類似了 SIFT 的pyramid 結構去解讀一張圖片,此外還可以減少 pixels 的個數, 減少后面全連接層的神經元個數。

 

 

這么龐大的神經網絡,這么多參數,很容易陷入overfitting的,減少overfitting的方式有兩種Data Augmentation 和 Dropout

(5),  Data Augmentation

最常用的方法是:增大數據集的量,Label-preserving transformation. 本文中使用了兩種Data Augmentation的方法,第一個是產生圖片transformation和水平轉換。因為有些圖像進行水平轉換是一致的,還有的操作是縮放操作(SIFT中算法的思想),旋轉操作(可以增強物體識別的robustness)等。

第二種是改變訓練圖片的RGB的強度。 對圖片中每一個RGB像素點進行一種變換,通過類似PCA的方法,求出特征向量和特征值,來提取主元

 

其中三個Alpha值對應image的三個channel,一張圖片的每個像素都使用這個特定的隨機值進行提取主元。

按照論文所說的,這種方法獲取了image的天然特性,該特征對光照強度和光照顏色保持魯棒性。

 

 

(6), Dropout

在全連接層,對有些隱層的神經元的輸出置為0,對每個神經元輸出置為0的概率是0.5,Dropout的神經元不會對前向傳播操作造成影響,也退出了反向傳導權值修正。這樣即可以提高訓練效率,也防止了overfitting。

本文的神經網絡在前面的兩個全連接層進行Dropout,有效防止了overfitting。

 

(7), 訓練的過程

每個batch使用128個樣本進行訓練,設置好動量參數,權值decay, 學習率, 等參數。 

 

對於全連接層:

類似淺層神經網絡的訓練,反向傳播,權值修正。BP算法對每一個weight進行反向修正,根據誤差函數對權值的偏導,進行負梯度下降的訓練。  

 

對於卷積層:

矩陣權值修正, 這里涉及到BP算法的二維應用。 卷積層首先在訓練之前是隨機化處理(隨機化應該也是有技巧的隨機化)。

 

評論:

CNN真的是一個充滿前景的深度網絡, 從不同的角度和不同的方式去提取特征,盡可能地去提取圖片中的信息,同時,還需要很多的訓練技巧,防止overfitting。

網絡結構是越大越好,網絡結構越復雜,神經元的個數越多,這個網絡的capacity 越強。  同時在訓練的過程中,訓練技巧則是在防止overfitting 和 underfitting 之間找到那個平衡點。 

最近的參與到openface的訓練,體會到了這兩個至關重要的point。 

 

 

reference: 

(1), http://www.cnblogs.com/tornadomeet/archive/2013/05/05/3061457.html

(2), 在路上 http://zhangliliang.com/2014/07/01/paper-note-alexnet-nips2012/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM