博客 / 詳情

返回

[翻譯][AlexNet 原文] ImageNet Classification with Deep Convolutional Neural Networks

注:全文系手動翻譯,雖經過ai檢查,仍無法避免少許錯誤。若有錯誤,望多多反饋,共同學習進步,謝謝。

ImageNet Classification with Deep Convolutional Neural Networks

From PAPERS.NIPS.CC

Abstract

ImageNet LSVRC-2010 中,需要將 1.2M 張高分辨率圖片分類至 1000 餘種,本模型(AlexNet)效果獲得了 SOTA 。
AlexNet 包括 5 個卷積層(有幾個後面配套了最大池化層), 3 個全連接層,共計 60M 參數、 650K 神經元、 1000 道 softmax 。
為了在全連接層中減輕過擬合,使用了 dropout 正則化。
此外,這個模型訓練過程中使用了 GPU 進行卷積運算。

1. Introduction

背景:目前的識別方法都是 Machine Learning 而不是 Deep Learning 。因此,如果想要提高表現,方法就是:更多訓練數據集、更先進模型、更好防過擬合措施。然而對於在現實複雜背景下的物體本來就不易識別,況且當下的數據集規模太小,大約只有 10K (只適用於 MNIST 這類輕量級簡單分類任務),至於數百萬張標註圖像的大規模數據集,直到最近才可能被收集到。
這個任務識別複雜度很大, ImageNet 提供的數據集大小尚且也不夠,需要用先驗知識去補充沒有的數據。
而卷積層的容量是可控制的,因此相比於那些層的大小一直不變的單向傳遞的神經網絡,使用CNN層能有相當小的連接與參數,使用這種局部連接的高效架構,自然更容易訓練。
不過, CNN 也有缺陷。對這麼大分辨率的圖像集的應用依舊是很貴的。這裏就需要使用 GPU 訓練了,因為 GPU 非常適合執行 2d 卷積,大大加速訓練 CNN 層的過程。

導讀:
訓練了一個卷積神經網絡;寫了一個高度優化的使用GPU實現卷積的方法;發現 5 層 CNN 、 3 層全連接是最恰當合適的深度;理論上還能再優化,通過更長訓練時間、更快 GPU 、更大數據集
Section 3:使用特殊的方法減少訓練時間、提升表現
Section 4:防過擬合的手段
Section 6:在 ILSVRC-2012 上的表現

2. The Dataset

ImageNet 是一個由 15M 個, 22k 類別的高分辨率標籤過的數據集。 ILSVRC 使用了 1.2M 個訓練圖片、 50K 個驗證圖片, 150K 測試圖片。 ILSVRC-2010 是唯一公開測試集標籤的版本,因此本模型以此為測試模型的數據集。

模型所要求的輸入維度是固定的,而 ImageNet 所提供的圖片分辨率是不一樣的,因此我們希望將該輸入圖片下采樣至 \(256\times256\) ,所以先進行縮放,使圖片的短邊為 \(256\) ,而後切出中心的 \(256\times256\) 圖片塊。除了對每個像素減去訓練集像素的像素均值外,沒有對訓練集進行任何的其他預處理。也就是説,我們是在中心化了的像素的原始RGB值上訓練網絡。

3. The Architecture

3.1. ReLU Nonlinearity

對於一個神經元的輸出 \(f\) ,標準使用函數的是 \(f(x)=tanh(x)\)\(f(x)=(1+e^{-x})^{-1}\) 。然而,因為我們使用的是梯度下降法,這種飽和[1]非線性的激活函數會訓練很慢,不如非飽和線性的激活函數 \(f(x)=max(0,x)\) ,即矯正線性單元( \(ReLU\) ) 。
Figure \(1\) 展示了 ReLU 和 tanh 各自在 \(4\) 層卷積神經網絡中的表現。在保證各自的學習率都是最優、沒有施加任何歸一化的條件下,在 CIFAR-10 數據集中達成相同的 \(25\mathcal{\%}\) 訓練 Error 時,使用 ReLU 函數的神經網絡比使用 tanh 函數的快了 \(6\) 倍。
可見,面對這麼大的神經網絡, ReLU 函數會有更小的迭代次數,是傳統飽和神經元模型所不能實現的。
當然,前人也曾嘗試革新 CNN 中的神經元模型過,如使用 \(f(x)=|tanh(x)|\) ,並接着使用本地平均池化。然而,這個創新的主要目的是避免過擬合,因此他們並沒有過多關注對訓練集的加速能力效果。快速學習對大數據集上訓練出來的大模型的表現有很大影響。

3.2 Training on Multiple GPUs

單卡 ( GTX 580 ) 只有 3GB 顯存,限制了最大可訓練網絡的大小,而這個網絡需要使用 \(1.2\) M個訓練用例,單卡就受不了了,因此這裏將網絡散佈至兩塊 GPU 上。當下 GPU 支持跨卡平行化,可以在不經過主機內存的情況下直接讀寫另一塊卡的顯存。
這個平行化計劃將卷積核(或神經元)分成兩半放在兩張卡里面,同時採用了一個小技巧:這兩張卡只會在特定的層進行交流。比如 layer 3 接受所有 layer 2 中卷積輸出,而 layer 4 只接受 layer 3 中只來自相同顯卡的卷積輸出。
當然,這種聯通模式對交叉驗證不是很友好,但是這允許我們精確調整雙卡間交流的數量直到這種交流產生的額外計算在整體計算的佔比達到一個可接受的情況。

這種結果架構與 Cireşan, D C 的柱式 CNN[2] 相似,但是我們的處理單元並不是完全相互獨立的。

通過構建一個每層卷積核量減半的單 GPU 網絡,雙 GPU 網絡的訓練仍然比單 GPU 的快。
不過這裏嚴謹而言並不是每層都減半卷積核,因為最後一層的卷積核數是相等的。這是因為網絡的大部分參數都在第一個全連接層,而這層以最後一個卷積層的輸出為輸入。為了保證全連接層大概一致的參數量,不能簡單地減半最後一層的卷積層,因此這裏是有偏差的。

3.3 Local Response Normalization

ReLU 有非常美好的屬性,就是不需要對輸入進行歸一化來避免飽和。只要有正數輸入,學習過程都會發生。然而,我們仍然找到了如下的本土歸一化方案,能夠提高泛化能力。
不妨讓 \(a^i_{x,y}\) 代表一個被施加了 \((x,y)\) 處的卷積 \(i\) ,然後進行了 ReLU 的神經元激活值。那麼進行了本土歸一化的激活值 \(b_{x,y}^i\) 可以表示為:

\[\begin{equation} b^i_{x,y}=a_{x,y}^i\big/\left(k+\alpha\sum_{j=\text{max}\left(0,i-\frac{n}{2}\right)}^{\text{min}\left(N-1,i+\frac{n}{2}\right)}\left(a_{x,y}^j\right)^2\right)^\beta \end{equation} \]

這裏的和跑過了 \(n\) 個相鄰的在同一空間位置的卷積,而 \(N\) 是一層卷積核的總數,而卷積映射之間的順序則是訓練前決定好的。這種歸一化進行了受真正神經元啓發的一種側抑制,創造了用不同卷積核計算的神經元輸出之間的競爭。 \(k,n,\alpha,\beta\) 是超參數,是通過驗證集確定的,這裏使用的是 \(k=2,n=5,\alpha=10^{-4},\beta=0.75\)
這層歸一化是緊跟着部分的 ReLU 層實施的。

這個方案和 Jarrett et al. 的 Local Contrast Normalization 相似,但是我們的更適合名稱“亮度歸一化”,因為我們不減去均值。在 CIFAR-10 數據集上,一個 4 層 CNN 的網絡沒有歸一化和有歸一化的 error 率分別是 \(13\mathcal{\%}\)\(11\mathcal{\%}\)

3.4 Overlapping Pooling

CNN 中的池化層總結了相同卷積核映射中的臨近組神經元的輸出,而傳統中,相鄰池化單元並不會重疊。準確來説,一個池化層可以被視作由一些間隔為 \(s\) 個像素的池化單元組成的網絡,每一個池化單元都表示着一箇中心點在池化單元處大小為 \(z\times z\) 的鄰域。如果我們令 \(s=z\) ,就得到了一個常用於 CNN 中的傳統的局部池化;如果令 \(s\lt z\) ,就有了重疊池化層。本次訓練中使用的是 \(s=2,z=3\) 。經過觀察得出,這樣的重疊池化層使模型更難過擬合。

3.5 Overall Architecture

現在可以描述模型的整體架構了。如 Figure \(2\) 所示,網絡由 \(8\) 層擁有權重的層;其中前 \(5\) 個是卷積的,而剩下的 \(3\) 個全連接層的輸出被送到 \(1000\) 維的 softmax 函數,產生 \(1000\) 類預測標籤的分佈。我們的網絡最大化了多項式的邏輯迴歸目標,這相當於最大化訓練樣例中的對預測分佈正確標籤的概率平均的對數。

Figure \(2\) . 展示了兩個GPU之間的職責劃分。一個 GPU 負責運行圖中頂部的層部件,另一個 GPU 則負責運行底部的層部件。兩個 GPU 僅在特定層進行通信。該網絡的輸入維度為 \(150, 528\) - 維,其餘各層的神經元數量分別為 \(253,440\) - \(186,624\) - \(64,896\) - \(64,896\) - \(43,264\) - \(4096\) - \(4096\) - \(1000\)

第二、四、五卷積層中的卷積核只與在相同 GPU 中的先前的層連接着;第三卷積層上與第二層中所有卷積映射連接;全連接層中的神經元和前一層的所有神經元相連。響應歸一化層跟着第一、二、五個卷積層, ReLU 在每個卷積、全連接層後面都被應用。

第一個卷積層用 \(96\)\(11\times11\times3\) 、步幅為 \(4\) 像素的卷積核過濾 \(224\times224\times3\) 的輸入圖像,這個步幅就是卷積核中臨近神經元之間感受野的距離。第二個卷積層將前面響應正則化與池化後的輸出作為輸入,使用 \(256\)\(5\times5\times48\) 卷積核過濾。第三、四、五個卷積層相互連接,但中間沒有池化或正則化層。第三個卷積層將前面響應正則化與池化後的輸出作為輸入,使用 \(384\)\(3\times3\times256\) 卷積核過濾。第四個卷積層使用 \(384\)\(3\times3\times192\) 卷積核,第四個卷積層使用 \(256\)\(3\times3\times192\) 卷積核,而全連接層各有 \(4096\) 個神經元。

Reducing Overfitting

我們的神經網絡架構有 60M 個參數。儘管吧 ILSVRC 的 \(1000\) 種類別讓每個訓練樣本從圖片到標籤的映射控制在 \(10\) bits 之內,仍然不足以在沒有相當大的過擬合下學習這麼多的參數。於是,下面我們描述了兩種我們抗擊過擬合的方式。

4.1 Data Augmentation

最簡單普通的方法來在圖片數據上減輕過擬合是通過保護標籤的變換人工擴大數據集。我們採用了兩種不同的方式來增強數據,每一種都讓從原圖片變換的過程計算量小,因此變換後的圖片就無需儲存在磁盤上。我們的操作中,變換後的圖片是在 CPU 上由 Python 代碼生成的,而 GPU 在同時負責訓練先前變換過的一批圖片。因此,這些數據增強計劃,實際上是無額外計算負擔的。

第一種數據增強形式由生成圖像變換和水平的翻轉構成。我們從 \(256\times256\) 圖像中隨機提取出的 \(224\times224\) 的小塊(和它們的水平鏡像),並用這些提取出的小塊訓練我們的模型。這提升了我們訓練集的大小(翻了 \(2048\) 倍),儘管這產生的訓練樣例是相互依賴的。若沒有這個方案 ,我們的網絡就會承受潛在的過擬合,從而迫使我們使用小一些的網絡。測試時,網絡通過在圖片的四角、中心處提取出 \(5\)\(224\times224\) 的小塊與他們的水平鏡像(那麼就是一共 \(10\) 塊)產生預測,並且平均這 \(10\) 個網絡 softmax 層預測的結果。

第二種數據增強的方式是改變訓練圖中 RGB 通道的強度,尤其是我們在整個 ImageNet 訓練集的 RGB 像素值集中實施 PCA 時。對於每個訓練圖像,我們發現並倍數增加了主要組件,其大小與相應特徵值成正比,並乘以一個從均值為零、標準差為 \(0.1\) 的高斯分佈中抽取的隨機變量。因此每個 RGB 圖像的像素 \(I_{xy}=[I_{xy}^R,I_{xy}^G,I_{xy}^B]^T\) ,我們增加如下的數量:

\[[\mathbf p_1,\mathbf p_2, \mathbf p_3][\alpha_1\lambda_1,\alpha_2\lambda_2,\alpha_3\lambda_3]^T \]

其中 \(\mathbf p_i\)\(\lambda_i\) 各自是 \(3\times 3\) 的 RGB 像素值的協方差矩陣第 \(i\) 個特徵值與特徵向量,並且 \(\alpha_i\) 是上述的隨機變量。每個 \(\alpha_i\) 覆蓋特定的訓練圖像的所有像素,只被繪製一次,直到這張訓練圖被重新用於訓練,屆時會重新繪製 \(\alpha_i\) 。這個方案大致捕捉了一個自然圖像的重要屬性,就是物體的特徵是不隨着光照的強度與顏色改變的。這個方案讓第一個的誤差減少了 \(1\mathcal{\%}\)

4.2 Dropout

結合多個不同模型的預測結果是一個非常成功的減少測試誤差的方法,但是似乎對那些已經花了好幾天訓練的大神經模型太昂貴了。然而,這個有一個非常有效率的模型結合版本,只需花上大約兩倍的訓練成本。這個最近才引入的技巧,被稱作 dropout ,內容是用 \(0.5\) 的概率將每個隱藏神經元的輸出設為零,稱作這些神經元 被丟棄 了。這些被丟棄的神經元並不貢獻前向傳播也不參加反向傳播。因此每次輸入被展現,神經網絡的都採樣了一個截然不同的架構,不過這所有的架構都共享着權重。這個技巧能夠減少神經元間複雜的相互適應,因為一個神經元並不能依賴於另外某些特定的神經元的存在。因此,這強制神經網絡學習更多健壯性特徵,這些特徵需要與許多其他神經元的不同隨機子集結合使用。在測試時,我們使用所有神經元,但將其輸出乘以 \(0.5\) ,這近似於對指數級多個 Dropout 產生的預測分佈進行幾何平均。

5 Details of learning

我們用隨機梯度衰減法,batch_size = 128, momentum = 0.9, weight_decay = 0.0005 訓練我們的模型。我們發現小數量的權重衰減對模型的學習非常重要。換句話説,權重衰減並不只是一個正則化工具:這減少了模型的訓練誤差。對於權重 \(w\) 的更新規則是:

\[\begin{split} v_{i+1}&:=0.9\cdot v_i-0.0005\cdot\epsilon\cdot w_i-\epsilon\cdot\left<\frac{\partial L}{\partial w}\big|_{w_i}\right>_{D_i}\\ w_{i+1}&:=w_i + v{i+1} \end{split} \]

其中 \(i\) 是迭代的索引值,\(v\) 是動量變量,\(\epsilon\) 是學習率,\(\left<\frac{\partial L}{\partial w}\big|_{w_i}\right>_{D_i}\) 是第 \(i\) 個批次 \(D_i\) 的針對目標函數對 \(w\) 的在 \(w_i\) 處導數的平均。

我們從一個零均值,\(0.01\) 標準差的高斯分佈中選擇設置每一層的初始權重,還用常數 \(1\) 初始化了第二、第四、第五卷積層和隱藏全連接層的神經元偏差。 這種初始化通過提供給 ReLU 正輸入加速了學期早期階段。我們同時將剩下層神經元的偏差設為常數 \(0\)

我們對所有層使用了一個相等的學習率,這個學習率是我們從整個訓練中手動選擇的。我們遵循的啓發式方法是,當驗證錯誤率不再隨當前學習率改善時,將學習率除以 \(10\) 。學習率最初設為 \(0.01\) 並且在結束前減少了 \(3\) 次。我們對神經網絡大概訓練了 \(90\) 次循環在整個訓練集的 1.2M 張圖片中。這耗了我們五到六天在兩張 NVIDIA GTX 580 3GB GPU 中。

6 Result

我們在 ILSVRC - 2010 的結果在表一中概括出來了。我們的神經網絡取得了 top-1 \(37.5\%\), top-5 \(17.0\%\) 錯誤率。在ILSVRC - 2010 中最佳結果是 top-1 \(47.1\%\),top-5 \(28.2\%\),使用的方法是對 \(6\) 個在不同特徵上訓練的稀疏編碼模型生成的預測進行平均,從那時起已公佈的最好結果是 top-1 \(45.7\%\),top-5 \(25.7\%\),使用的方法是平均在費舍爾向量(FV)上訓練的兩個分類器的預測結果,費舍爾向量是通過兩種密集採樣特徵計算得到的。

我們也讓我們的模型參加了 ILSVRC - 2012 競賽並在表二中報告了我們的結果。由於 ILSVRC - 2012 的測試集標籤不可以公開得到,我們不能報告我們嘗試的所有模型的測試錯誤率。在這段的其餘部分,我們會互換驗證誤差率和測試誤差率,因為在我們的實驗中它們之差不會超過 \(0.1\%\) 。本文中描述的 CNN 取得了top-5 \(18.2\%\) 的錯誤率。五個類似的 CNN 預測的平均誤差率為 \(16.4\%\)。為了對 ImageNet 2011 秋 發佈的整個數據集(15M 圖像,22K 個類別)進行分類,我們在最後的池化層後添加了一個額外的第六個卷積層,訓練了這個 CNN ,然後在它上面進行用 ILSVRC - 2012 的數據進行模型微調,並在此取得了 \(16.6\%\) 的錯誤率。平均了在 ImageNet 2011秋 發佈的整個數據集上預訓練的兩個 CNN 和前面提到的五個 CNN 的預測進行,我們得到了 \(\mathbf{15.3\%}\) 的錯誤率。第二名通過對由幾個不同密集採樣特徵計算得到多個 FV 上訓練的一些分類器的預測結果進行平均,得到的最好的競賽實體僅僅取得了 \(26.2\%\) 的錯誤率。

最後,我們在 2009 秋的有 10184 分類,8.9M圖像的 ImageNet 上發表了我們的錯誤率。在這個數據集中我們遵循了用一半數據訓練一半數據測試的傳統。因為沒有提前已建立的測試集,我們的數據集的分割有必要不同於以前作者的數據集的,但這並不明顯地影響結果。我們得到的的 top-1 和 top-5 錯誤率是 \(67.4\%\)\(40.9\%\) ,使用的是上面描述中在最後的池化層之後有一個額外的第六個卷積層的網絡。這個數據集上公開可獲得的最好結果是 \(78.1\%\)\(60.9\%\)

6.1 Qualitative Evaluations

圖三展示了從網絡的兩個數據手機層學習得到的卷積核。這個網絡學習了大量的頻率選擇性、方形選擇性網絡,還有大量的顏色點。注意到兩個 GPU 所表現出來的專業化,這是 Section 3.5 中限制雙 GPU 之間連接性的結果。GPU 1 上的核大部分是沒有顏色的,而 GPU 2 上的核主要是針對有顏色的。這種專業化在每次運行時都會發生,並且是與任何特別的隨機權重初始化(以 GPU 的重新編號為模)無關的。

在圖四的左邊部分,我們通過在八張測試圖像上計算它的 top-5 預測定性地評估了網絡學習到的東西。注意到即使不在圖像中心的目標,例如左上角的蟎蟲,也能被網絡識別。大多數的 top-5 標籤似乎是合理的。例如,對於美洲豹來説,只有其它類型的貓被視作合理的標籤。而在某些案例(格柵,櫻桃)中,圖片中的注意焦點是真的有點歧義的感覺。

探索網絡可視化知識的另一種方式是去思考最後的 \(4096\) 維隱藏層在圖像上得到的特徵激活情況。如果兩幅圖像生成的特徵激活向量之間有較小的歐幾里得距離,我們可以認為在神經網絡的更高層特徵中考慮時它們是相似的。圖四表展示了測試集的 \(5\) 張圖像和訓練集的 \(6\) 張圖像中的每一張在這種度量方式下都是最相似的。注意在像素級別,檢索到的訓練圖像與第一列的查詢圖像在 L2 上通常是不接近的,比如檢索到的狗和大象似乎有很多姿勢。我們在補充材料中展示了更多測試圖像的結果。

通過兩個 \(4096\) 維實值向量間的歐氏距離來計算相似性是效率低下的,但通過訓練一個自動編碼器將這些向量壓縮為短二進制編碼可以使其變得高效。這應該會產生一種比將自動編碼器應用到原始像素上更好的圖像檢索方法,自動編碼器應用到原始像素上的方法沒有使用圖像標籤,因此會趨向於檢索與要檢索的圖像具有相似邊緣模式的圖像,無論它們是否是語義上相似。[3]

7 Discussion

我們的結果展示了,一個大型、深度的卷積神經網絡在一個具有高度挑戰性的數據集上使用純粹的監督學習可以取得破紀錄的結果。值得注意的是,如果移除一個卷積層,我們的網絡的表現會降級。例如,移除任何中間層都會導致網絡在 top-1 上的大約 \(2\%\) 性能損失。因此深度對於實現我們的結果真的真的非常重要。

為了簡化我們的實驗,我們沒有使用任何無監督的預訓練,儘管我們希望它會有所幫助,特別是假如我們獲得了足夠的計算能力來顯著增加網絡的大小,而標註的數據量沒有對應增加。目前為止,我們的結果已經提高了,因為我們的網絡更大、訓練時間更長。但要達到人類視覺系統的下顳葉通路水平,我們仍然有許多待跨越的數量級要實現。最後,我們想在視頻序列上使用非常大的深度卷積網絡,視頻序列的時序結構會提供非常有幫助的信息,這些信息在靜態圖像上是缺失的或遠不那麼明顯。


  1. 左/右飽和: \(x\) 趨向負/正無窮時函數導數趨於 \(0\) 。 ↩︎

  2. (arXiv:1102.0183) 不再用全連接卷積層,用隨機連接表連接層間的特徵圖,如第二層的每個特徵圖只專注於第一層的一部分特徵圖。第二層的每個特徵圖,連同它從第一層接收連接的那一小部分特徵圖,可以看作一個相對獨立的處理單元或“柱”。這個“柱”專注於學習從某個特徵子集組合而成的更復雜的特徵。 ↩︎

  3. 這···這不是 Transformer 中的 Embedding 嗎 ?! ↩︎

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.