1、學習速率。首先設學習速率為乙個較大的值,確保training cost在不斷下降。當accuracyy在n個epoch內不再增加時,使得學習速率減小一半。重複迭代,直到學習速率變成原來的1/1024。
2、學習速率要根據訓練cost調。但是網路層數和神經元數目,mini-batch size要根據驗證集的acc調。
3、關於正則項係數。可以先設為0,選好learning rate,再將正則係數增大或者縮小十倍粗調。大概確定數量級後,再微調。
4、關於mini-batch,如果太小,和on-line learning很接近,加速效果可能不明顯。如果太大,權重更新不夠頻繁,優化過程較長。因此,可以畫出驗證集準確率和真正時間的曲線,確定乙個acceptable mini-batch。
5、避免過擬合的方法有很多:early stopping、資料集擴增(data augmentation)、正則化(regularization)包括l1、l2(l2 regularization也叫weight decay),dropout。
6、加上正則項之後,權重會衰減。較小的權重意味著較低的網路複雜度。因為對於過擬合的網路,權重往往振盪較大,很小的區間內函式值變化較大。由於輸入可大可小,必須選擇權重係數較大。正則化約束了網路的權重,降低了過擬合的情況。
7、加入l2正則化,權重衰減。加入l1正則化,若權重本身為正,會減小,本身為負,會增加。因此,使得權重趨近於零。
8、神經網路引數初始化。傳統的方法是從高斯分布中初始化引數,或者全部初始化為0或者1。sigmoid函式為例,為使導數較大,保證輸入大概在【-4, 4】之間。獲得較快的權重更新速率。因此,可以選擇初始權重,使得神經元初始啟用函式值落在想要的範圍之內。
9、方差損失函式,當神經元實際輸出值較大時,損失函式和權重導數值較小。交叉熵損失函式,導數值中不包含損失函式和實際輸出導數項,只包含誤差項。誤差越大,更新越快,誤差越小,更新越小。
10、optimizer: adam和adadelta收斂速度都比較快,但是結果來看,sgd和rmsprop的正確率較高。
11、理論上,batch size=1 結果最優。但是驗證集準確率容易振盪。
12、優化方法,不同的優化方法對學習率做了不同的變化。
adagrad:累加之前所有梯度的平方。前期可以放大梯度,後期可以約束梯度。適合處理稀疏梯度。後期可能訓練提前結束。
adadelta:累加之前梯度平方時不直接加,而是乘以乙個權重後再加。訓練前期,加速效果很好。訓練後期,在區域性最小值附近抖動。不依賴全域性學習率。
rmsprop:adadelta的特例。權重取0.5,對rnn效果很好。
adam:同時考慮之前梯度的一階矩和二階矩,引數比較平穩。
13、這就導致了tanh特徵相差明顯時的效果會很好,在迴圈過程中會不斷擴大特徵效果顯示出來,但有是,在特徵相差比較複雜或是相差不是特別大時,需要更細微的分類判斷的時候,sigmoid效果就好了
為神經網路是不斷反覆計算,實際上變成了它在嘗試不斷試探如何用乙個大多數為0的矩陣來嘗試表達資料特徵,結果因為稀疏特性的存在,反而這種方法變得運算得又快效果又好了
神經網路訓練技巧入門
神經網路基本訓練技巧 兩部分 1.降低訓練誤差 2.降低測試誤差 增加泛化能力 1.如何降低訓練誤差 1.使用恰當的loss function 好處 e.g.cross entroypy的效果好於square error 2.使用mini batch進行訓練 隨機梯度下降 細節 將整體樣本分為n個m...
神經網路訓練
學習了bp神經網路演算法,剛開始最終要的一點不明白的就是前一層和後一層 這裡指的只有三層,輸入層,隱藏層,輸出層 的權重,其實神經網路演算法中,前一層的每乙個節點和後一層的每乙個節點都有連線權重,初始權重是隨機的。而更新權重是通過輸出層的值來反向更新的。基本過程如下 1.輸入第乙個訓練樣本 對應的就...
神經網路的訓練
既然我們希望網路的輸出盡可能的接近真正想要 的值。那麼就可以通過比較當前網路的 值和我們真正想要的目標值,再根據兩者的差異情況來更新每一層的權重矩陣 比如,如果網路的 值高了,就調整權重讓它 低一些,不斷調整,直到能夠 出目標值 因此就需要先定義 如何比較 值和目標值的差異 這便是損失函式或目標函式...