文章目錄
- 訓練數據集
- 數據預處理
- 神經網絡模型
- 模型訓練
- 正則化技術
- 模型性能
- 其他補充
訓練數據集
- 模型主要使用2010年和2012年的
ImageNet
大規模視覺識別挑戰賽(ILSVRC)提供的ImageNet
的子集進行訓練,這些子集包含120萬張圖像。 - 最終,模型還使用2009年秋天版本的完整
ImageNet
數據集進行了訓練,該數據集包含8900萬張圖像,分屬于10184個類別。數據集中一半的圖像用于訓練,另一半用于測試。
數據預處理
- 圖像裁剪:因為模型需要固定大小的圖像輸入,因此首先將數據集中的圖像的短邊縮放到
256
個像素,再從得到的圖像中裁剪出中間的256 × 256
的圖像塊。 - 像素處理:從每張圖像的像素中減去了所有圖像中該像素的平均值。這樣的處理即對像素數據進行了歸一化,可以加速模型的訓練并使得訓練更加穩定。
- 數據增強:
- CPU運行的數據增強:
AlexNet
使用了兩種計算量都很低的數據增強方式,所以增強后的圖像無需存儲在計算機的硬盤中備用。數據增強過程使用 Python 進行編程,在CPU上運行。由于數據增強無需使用正在訓練模型的GPU,因此作者們認為數據增強是“計算免費”的,即不會影響模型的訓練過程。 - 兩種數據增強方式:
- 圖像平移和水平翻轉:從
256 × 256
的圖像中提取正中央和四個角的224 × 224
的圖片塊及其水平翻轉得到的圖片塊(共十張),并最終平均網絡的Softmax
對十張新圖片的分類結果得到最終的分類結果。作者們發現如果不這樣做,模型就會產生嚴重的過擬合。 - 改變圖像中RGB通道的強度:對整個
ImageNet
訓練集中的RGB像素值執行主成分分析(PCA),作者們發現這種方式可以降低模型的分類錯誤率。
- 圖像平移和水平翻轉:從
- CPU運行的數據增強:
備注:由于GPU技術的發展比CPU快多了,因此如果從現在的角度看,在CPU上做數據增強反而會成為模型效率的瓶頸。
神經網絡模型
- 模型主要特點:非常大且非常深,是截至當時最大的卷積神經網絡。
- 模型參數量:
6000萬
參數和65萬
神經元。 - 模型基本結構:
- 神經網絡層構成:包含五個卷積層(一些卷積層帶有最大池化層)、三個全連接層和一個最終的 1000-way 的
Softmax
層。 - 卷積核情況:第一個卷積層的卷積核大小是
11 × 11 × 3
,個數為96個,步長為5;第二個卷積層的卷積核大小為5 × 5 × 48
,個數為256個;第三個卷積層的卷積核大小為3 × 3 × 256
,個數為 384 個;第四卷積層有 384 個大小為3 × 3 × 192
的核;第五個卷積層有 256個3 × 3 × 192
的核。 - 全連接層情況:每個全連接層都有4096個神經元。
- 神經網絡層構成:包含五個卷積層(一些卷積層帶有最大池化層)、三個全連接層和一個最終的 1000-way 的
- 層疊池化方法:作者們發現層疊池化可以略微降低模型分類的錯誤率,但是也會使得模型會變得略微難以收斂。
備注:
- AlexNet 中包含的兩個隱藏的全連接層是其性能的一大瓶頸,也是其設計的缺陷。現在的CNN不會使用那么大的全連接層,因此Dropout的使用減少了,反而是循環神經網絡系列的模型使用 Dropout 更多。
- 層疊池化方法在后續的卷積神經網絡中已經基本上沒有繼續使用了。
模型訓練
- 激活函數:使用
ReLU
作為激活函數,文中稱為一種非飽和神經元,用于加速訓練過程。作者們認為相較于當時主流的激活函數tanh
,ReLU
激活函數可以大大加快模型的訓練過程。在模型中,每一個卷積層和全連接層的輸出都使用了ReLU
激活函數進行處理。 - 訓練設備:使用GPU進行高效的卷積操作。具體而言,使用的是兩個型號為
GTX 580
的GPU,兩個GPU的顯存都是3GB
。 - 分布式訓練:
- 基本模式:受限于GPU的顯存,作者們將模型分布在兩個GPU上進行訓練。作者們將模型的卷積核對半分到兩個GPU上,且兩個GPU只在模型中的某些層進行交互。作者們發現使用雙GPU的網絡訓練時間比使用單GPU的網絡更快一些。
- 兩個GPU訓練結果的區別:作者們最后發現第一個GPU對顏色敏感,而第二個GPU對顏色不敏感,并且每一次訓練模型都是這樣,他們不清楚是什么原因。
- 優化器:
- 優化器類型:使用隨機梯度下降優化器(
SGD
)進行模型訓練。 - 優化器超參數設置:批次大小設置為
128
,動量設置為0.9
,權重衰減設置為0.0005
。作者們發現少量的權重衰減非常重要,因為減少了模型的訓練誤差。所有的層采用相同的學習率,初始化為0.01
,當驗證錯誤率隨著學習率的提高而升高時,將學習率除以10
。現在設置模型的學習率時,往往從小到大,然后慢慢減小。
- 優化器類型:使用隨機梯度下降優化器(
- 模型初始化:
- 權重初始化:以標準差為
0.01
的零均值高斯分布來初始化模型每一層的權重。 - 偏置初始化:用常數
1
來初始化第二、第四和第五卷積層以及全連接隱藏層中的神經元偏置,剩余層的偏置初始化為0
。作者們認為這樣的偏置設置可以為ReLU
提供積極的輸入來加速早期的學習。
- 權重初始化:以標準差為
- 迭代次數和訓練時間:迭代了
90
次,總共花費了五到六天的時間進行模型訓練。
備注:
- 現在看起來,使用 ReLU 作為激活函數并沒有比其他的激活函數對模型訓練有多強的加速效果,只是單純因為它足夠簡單。
- 在目前看來,將 AlexNet 拆分到兩個GPU上進行訓練,這個非常工程化的細節并不是特別重要。并且,實際上 在代碼編寫得好的情況下,使用一個 GTX 580 GPU也是可以訓練模型的。
- 當年SGD并不是主流的模型訓練器,因為其調參過程相對而言比較困難。但是現在SGD已經是最主流的模型學習器。
- 權重衰減實際上就是L2正則項,其不是加在模型上,而是優化算法上。
- 現在設置模型優化器的學習率時,往往從小到大,然后慢慢再減小,類似于一個余弦曲線。
正則化技術
- Dropout:
- 功能和原理:用于緩解全連接層的過擬合現象。對每一個隱藏神經元,有
0.5
的概率將其輸出設置為0
,使得它們不參與前向傳播和反向傳播過程。在測試階段,將所有神經元的輸出都乘0.5
。作者們發現如果不使用Dropout
,模型就會存在嚴重的過擬合現象,但是Dropout
也會使得模型需要的迭代次數翻倍。 - 文中的觀點:作者們認為,在處理模型的輸入時,增加了 Dropout 之后相當于每一次都是不同的神經網絡,這樣迫使模型學習更加穩健的特征。
- 功能和原理:用于緩解全連接層的過擬合現象。對每一個隱藏神經元,有
- 局部響應歸一化:一種正則化方法,作者們發現使用了該歸一化方法也可以降低模型分類的錯誤率。局部響應歸一化層在第一和第二卷積層之后。
備注:
- 目前的觀點認為 Dropout 不是模型融合,而是在線性模型上等價于一個L2正則項。它產生一個正則的效果,但是無法構造出一個和它相同的正則方式。
- 局部響應歸一化也不是很重要,后面基本上沒有人繼續使用。
模型性能
- 2010年 ImageNet 大規模圖像識別挑戰賽:top-1 和 top-5 的錯誤率分別為
37.5%
和17.0%
,顯著優于之前最先進的模型。 - 2012年 ImageNet 大規模圖像識別挑戰賽:top-5 的錯誤率為
15.3%
,遠高于第二名的26.2%
的水平。 - 特征向量使用:如果兩張圖像通過模型后獲得的特征向量之間的歐氏距離很小,則可以認為這兩張圖像是相似的。
- 未來展望:作者們指出該模型的性能在出現了更快的GPU和更大的數據集時還可以繼續提升。
其他補充
- 訓練模型的啟示:
- 為了提升機器學習算法的性能,我們可以收集更大的數據集、訓練更強大的模型和使用更好的技術來防止過擬合。
- 數據集相關:
- 在 AlexNet 提出的時代,大部分有標注的圖像數據集相對而言都比較小,只有數萬張圖片,例如
NORB
、Caltech-101/256
、CIFAR-10/100
等。 LabelMe
是一個包含有數十萬張全分割的圖像的數據集。ImageNet
包含有1500萬張有標注的高分辨率的圖像,這些圖像分屬于超過2200個類別。
- 在 AlexNet 提出的時代,大部分有標注的圖像數據集相對而言都比較小,只有數萬張圖片,例如
- 模型相關:
- 卷積神經網絡具有先驗知識來彌補圖像數據集不夠大的問題,因為它們對圖像的本質特征有假設。相較于相似規模的標準前饋神經網絡,卷積神經網絡的參數量和連接數都少得多,因此更加容易訓練,它們的理論最優性能僅僅略低于前饋神經網絡。
- 作者們發現模型的深度(即神經網絡中的層數)非常重要,移除任意一個卷積層都會導致模型性能的下降,盡管卷積層的參數數量非常少。現在看來,這個觀點不太對,因為雖然神經網絡的深度非常重要,但是移除一個神經網絡層不一定會導致性能下降,通過優化超參數可以達到相同的性能。
ReLU
的一個理想特性是,它不需要對輸入進行歸一化來防止飽和。只需要一些訓練樣本向ReLU
產生了正輸入,那么學習就可以發生。- 卷積神經網絡中的池化層用于匯總同一特征圖中相鄰神經元組的輸出。
- 最簡單和最常用的降低過擬合的方式是使用保留標注的數據增強來人為地擴大數據集。
- 結合多個不同模型的預測結果是一種降低測試錯誤率的好用的方法,但是往往代價高昂。
- 無監督預訓練可以幫助神經網絡獲取較為優秀的早期權重,本文中作者也提到,雖然他們出于簡化沒有這么做,但是他們認為這么做是有幫助的。
- 神經網絡的深度很重要,但是寬度也很重要,不能特別寬特別淺,也不能特別深但是特別窄。
- 過擬合是深度學習的一個派別,現在研究者們又認為正則不是那么重要,最重要的是模型本身的結構。
- 硬件相關:
- 2007年 NVIDIA 推出了
CUDA
庫,使得用GPU訓練模型變得普遍。當時的研究人員研究人員主要是使用 Matlab 進行編程。 - GPU對2D卷積進行了高度優化,能夠很好地促進大型卷積神經網絡的訓練過程。
- 現代的GPU設計非常適合跨GPU并行,因為它們可以直接讀寫其他GPU的顯存,而不需要以計算機的內存作為中介。
- 2007年 NVIDIA 推出了
- 論文閱讀相關:
- 閱讀機器學習和深度學習領域的論文,對于工程上的細節,如果不是需要復現,則可以暫時忽略掉。
- 論文的實驗部分,如果不是領域專家或者需要復現論文,一般不用太了解,這樣可以節約時間。