記錄一下對Alexnet一些關鍵技術的理解。算法
問題1:網絡設計上Alexnet有什麼新的貢獻?網絡
1)ReLu激活函數:反向傳播時,通過ReLu的梯度要麼是1要麼是0,不會出現sigmoid函數在兩端梯度變化很小的狀況。直觀的效果使網絡更容易訓練,訓練速度更快。架構
2)多GPU的訓練架構:在兩塊gpu上各分配一半神經元節點,但只在第3層卷積和全鏈接層進行通訊。多gpu的設計首要是解決算力不足的問題,但意外帶來了精度提高。很好的啓發了mobilenet等網絡,按通道分組計算的設計思路函數
3)LRN局部歸一化:該算法引入相鄰單元的值,修正當前位置的值。在sigmoid作激活函數的網絡中,一般須要對輸入作歸一化,來減緩其飽和的風險。使用ReLu消除了飽和問題,但對輸入作歸一化依然有增長模型泛化性能的好處。該方法已被BN取代,對輸入數據歸一化,能有效控制輸入數據的分佈,使網絡更容易收斂,同時有減少過擬的做用。性能
4)重疊池化:kernel的移動步長小於kernel大小。此時相鄰兩個卷積使用的像素會有重疊,這部分冗餘的計算信息對性能的提升是否有必要?(僅有輕微的實踐支持)。目前大部分網絡步長取1,加上必定的padding,這樣在卷積操做後特徵圖大小不會變化,更容易調控網絡。學習
問題2:Alexnet採用哪些技術來防止過擬合?測試
1)數據加強:spa
擴展數據集。從256x256中,隨機提取224x224的塊,以及其水平鏡像(翻轉),所以訓練集擴展了2048倍,樣本之間高度相關。模型推理時提取四角和中間的patches以及它們的水平鏡像共10張,再取網絡softmax輸出的平均值。(該方式十分耗費計算量,目前不提倡)設計
RGB像素擾動。對整個訓練圖片集的RGB像素值,作PCA分解。從3x3的RGB矩陣中分解出獨立的基(特徵向量+特徵值),基於該基構造像素值的隨機擾動,添加到原圖的RGB值中。該策略用於捕捉圖片自己的屬性,必定程度排除光照強度和顏色的影響。圖片
2)Dropout:
將隱含層神經元按必定機率(有效比例)設置爲0,"失活」的神經元不參與前向和反向傳播。每次提供一個輸入時,神經網絡採樣不一樣的架構進行預測(因爲共享權重,不會增長計算)。該技術減小了神經元之間複雜的「聯合適應性」(co-adaptations),所以一個神經元不會依賴特定的其餘神經元,經過引入更多樣的鏈接方式,會強制網絡學習更魯棒的特徵。
該策略的直觀效果,至關於測試時合併多個不一樣模型的結果用於減少偏差。另外預測時使用全部神經元,可是將其輸出乘以有效比例,保證和訓練時有一致的容量。
問題3:Alexnet總體結構如何設計?
使用5層卷積和3層全鏈接網絡,解決大分辨率圖片識別問題。模型輸入採用224x224的圖片。
1)Conv_1:kernel大小11x11, 步長4,輸出96維。爲保證輸出圖大小爲55,padding=2,至關於輸入圖228。具體實施時使用兩路gpu每路48個kernel。
2)Max_p1:kernel=3,步長爲2,padding='valid',輸出圖大小爲27。
3)Conv_2:kernel大小5x5,步長1,輸出256維。兩路gpu每路128個kernel。
4)
5)Conv_3:kernel=3, 步長=1,padding='same',維持輸出特徵圖13不變,共輸出382維。兩路gpu每路192維,使用全部256維輸入。
6)Conv_4:重複Conv_3,不一樣的地方是使用前一層一半的輸出192維做爲輸入。
7)Conv_5:重複Conv_4,只是輸出維度變成256維
8)Max_p3:和p1同樣, 輸出維爲6
FC2也是隱含層,以後增長一個dropout層,比例爲0.5