《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/