cs231n_神經網絡筆記_部分總結工作1_理解、準備、訓練

cs231n神經網絡NN(或稱爲人工神經網絡ANN或稱爲多層感知器MLP)基礎知識部分集中在PPT的lecture05~lecture07,且有整理的筆記(搜索關鍵字都能搜到),已經算是非常棒了,此處僅針對個人再做下簡化、整理。


神經網絡的理解:

神經網絡個人理解可以看作是線性函數和非線性函數的組合,所以只要組合得夠好在一定程度上可以逼近任意函數?那麼重點就在於學習如何線性、如何非線性、如何組合?更多的神經元可以表達更復雜的函數也可能造成對訓練數據的過擬合。追求模型的泛化能力,遏制過擬合現象,採取人工干預措施,儘量不通過無腦減少神經元的途徑,干預方法有比如施加權重參數懲罰(正則化)、施加前向傳播噪聲(dropout、data augementation、stochastic pooling)

我們常稱某某知名網絡多少多少層,比如ResNet152層,那麼N層神經網絡的意思?:有N-1個有可學習參數的網絡層(像inception module裏存在並行的層,統一當作一層)(不統計沒有參數可學的pool層之類的個數),另加1個輸出層,於是稱之爲N-1+1層神經網絡。

目前“對於生物神經元的建模是非常粗糙的:在實際中,有很多不同類型的神經元,每種都有不同的屬性。生物神經元的樹突可以進行復雜的非線性計算。突觸並不就是一個簡單的權重,它們是複雜的非線性動態系統。很多系統中,輸出的峯值信號的精確時間點非常重要,說明速率編碼的近似是不夠全面的。鑑於所有這些已經介紹和更多未介紹的簡化”【取自知乎翻譯】,覺着這些“模仿粗糙之處”將可能成爲下一步的神經網絡提升點?更加完整真實地復現神經元工作,更好的學習能力,更好的表現效果?

在選擇非線性函數(激活函數)時常用sigmoid(飽和特性會使得梯度消失,非零中心影響梯度運作)、tanh(飽和、零中心)、ReLU(正向不飽和、非零中心)、Maxout(是對ReLU和Leaky ReLU的一般歸納,好但複雜),目前ReLU受歡迎程度較高。

 

神經網絡中的計算:

神經元的個數?             feature map的每個點都是一個神經元的輸出。所以 神經元個數 = 特徵圖大小。

可學習參數的個數?    卷積層參數計算F*F*Cin*K+K ,其中F是濾波器尺寸,Cin是輸入的depth維度(=通道數),K是濾波核個數。                              詳細的通用的尺寸大小和參數量計算可以看這裏

 

神經網絡的參數更新:

參數更新方法或者稱之爲深度網絡的最優化方法。其中,讓學習率lr隨着epotch的增加而減小(隨步數衰減、指數衰減、1/t衰減、...)是非常有幫助的小技巧,同時還有了隨步數衰減的dropout,也就是說讓超參數例如lr或噪聲例如dropout在學習過程中變化是門有用的研究?

一階的更新方法:SGD、SGD+Momentum、SGD+Nesterov;二階方法:牛頓法、L-BFGS、Adagrad、RMSprop、Adam

 

準備階段:

對輸入數據x進行類似零中心和歸一化(還有PCA/白化、各種norm)的預處理工作(跟介紹激活函數時的評判標準零中心如出一轍,網絡在處理零中心的數據表現更好?),對網絡權重w進行小隨機數等初始化工作,選擇使用norm層,對正則化工作進行選擇和參數設定,對損失函數的表達形式的選擇(折葉損失、平方折葉損失、交叉熵損失...)——可以看出在準備階段處理思路都是針對“損失函數公式loss=F(w·x+b-y)+regularization”逐項進行初始化工作的,甚至有思路對“·”數學操作做了特殊處理。在網絡超參數的選擇上,使用隨機搜索法優於網格搜索法,從大範圍搜索到精細化搜索。

 

訓練階段:

訓練前仍然需要做些檢查工作以期網絡足夠合理能夠開始訓練,1.檢查少量維度上解析梯度是否與數值梯度一致;2.檢查在小量輸入數據下初始損失函數得到的值是否符合預期,然後再訓練觀察損失函數是否能歸到零

訓練中需要關注些數值或圖標的變化以判斷超參數是否合理、網絡是否擬合、網絡是否死亡等信息,1.損失函數曲線;2.訓練集和驗證集的正確率;3.如果是針對圖像的訓練,網絡第一層的可視化效果;4.權重或梯度的更新比例

訓練後有個略微提升測試集正確率的小妙招,即模型集成:1.同一個模型,不同的初始化;2.交叉驗證中不同的超參數對應的不同的模型;3一個模型設置多個記錄點;4訓練時參數備份,跑參數的平均值。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章