網絡架構:
整個網絡一共有八層,包括5層卷積層,3層全連接層,最后一層為輸出層,輸出1000維的vector,表示該image在1000類圖像的分布情況。
每一卷積層和全連接層的都與激活層相連。第一,第二層卷積層之后,緊連著局部響應歸一化層(Local Response Normalization),之后為池化層(下采樣,MaxPooling)。第五層卷積層,緊連著池化層。
各層策略:
Local Response Normalization:
將當前神經元的輸出與其鄰近的n個神經元做歸一化,對輸出做一個尺度變換,(使得每個輸出分布更集中,加快收斂,泛化性能)。ai表示第i個神經元輸出,bi表示歸一化后的神經元輸出,k,a,n為常量,為超參數。
Maxpooling層:
Max Pooling對得到的結果進行下采樣,縮小輸出結構。以往的池化層,采取無重疊池化。在AlexNet中,作者采用有重疊池化。實驗結果表明,有重疊池化較無重疊池化更難于過擬合。假設輸入為I,pooling區域大小為F,步長為stride,則輸出大小為:(I - F)/stride? + 1
當無重疊池化時,F=stride,即 I/stride - F/stride + 1 = I/stride。
文中取F = 3,stride =2 即 (I - 3)/2 + 1
個人感覺重疊池化做法,與HOG特征生成過程中的歸一化有點類似,歸一化過程 ,block之間是有重疊的。重疊池化,考慮周圍特征,把局部最顯著的特征留下。
激活層(激活函數的選擇):
文中從收斂速度角度對比了tanh與ReLu激活函數,如圖(實線表示ReLu,虛線表示tanh)。從圖可看到,以tanh為激活函數,需要經過更多個epoch才能達到0.25的錯誤率。以ReLu為激活函數,模型收斂速度更快。
整體架構:
input(224 * 224 *3)
first layer:
Conv(Filter : 11*11*96,stride=4): (224 - 11)/4 +1 = 55? , 55*55 * 96? ?(拆成 55*55 * 48,,55*55*48便于兩塊CPU并行工作)
maxpooling: (55 - 3) /2 +1 = 27
second layer:
Conv (Filter:3*3*256,stride = 1,zero padding,padding = 1):(27+2 - 3)/1 +1 = 27, 27*27*256? (拆成 27*27 * 128,,27*27*128)
maxpooling: (27 - 3) /2 +1 = 13
thrid layer:
Conv (Filter:3*3*384,stride = 1,zero padding,padding = 1):(13+2 - 3)/1 +1 = 13, 13*13*384? (拆成 13*13* 192,,13*13*192)
fourth layer:
Conv (Filter:3*3*384,stride = 1,zero padding,padding = 1):(13+2 - 3)/1 +1 = 13, 13*13*384 (拆成 13*13 * 192,,13*13*192)
Fifth layer:
Conv (Filter:3*3*256,stride = 1,zero padding,padding = 1):(13+2 - 3)/1 +1 = 13, 13*13*256? (拆成 13*13 * 128,,13*13*128)
maxpooling: (13 - 3) /2 +1 = 6
全連接層
全連接層可看成上一層特征與同等大小的卷積核卷積得到。
第六層:
輸入為: 6*6*128
濾波器:6*6 * 4096(4096個濾波器,每個濾波器有128個卷積核,每個卷積核大小 6*6) 得到 1*1*4096
下一層:1*1* 4096
最后一層:1*1*1000(1000個濾波器,每個濾波器有4096個卷積核,每個卷積核大小 1*1)
訓練及優化:
減少過擬合風險:
數據增強(data argumentation):
對現有的數據進行一定的變換,用于訓練。變換需是有意義的變換
1.對一256*256的圖像,隨機采樣得到224*224的圖片,并變換得到其水平反射圖像,訓練的樣本增加2048倍((256-224)**2 * 2)
2.原本圖像加上主成分特征向量與特征值和一個隨機變量的乘積。
dropout:以0.5的概率將一些的神經元輸出設為0。
訓練:
訓練策略:用隨機梯度下降的動量形式訓練模型。
參數初始化:
以均值為0,標準差為0.01的高斯分布初始化參數w。
學習率的改變:
初始化為0.01,當驗證集錯誤率停止上升時,學習速率除以10,學習速率減小。
問題:為什么歸一化層只在前兩層?激活層:從線性到非線性的映射。濾波器3*3?maxpooling,3,4,5層的作用。從卷積層到最后輸出采用全連接層的作用。
歸一化的作用?
overlapping Pooling?
ReLu負半軸為0,未能激活?
代碼:https://github.com/kratzert/finetune_alexnet_with_tensorflow