神經網絡的調參效果不理想時->(解決思路)


github博客傳送門
csdn博客傳送門

非過擬合情況

  1. 是否找到合適的損失函數?(不同問題適合不同的損失函數)(理解不同損失函數的適用場景)
    (解決思路)選擇合適的損失函數(choosing proper loss )
    神經網絡的損失函數是非凸的,有多個局部最低點,目標是找到一個可用的最低點。非凸函數是凹凸不平的,但是不同的損失函數凹凸起伏的程度不同,例如下述的平方損失和交叉熵損失,后者起伏更大,且后者更容易找到一個可用的最低點,從而達到優化的目的。
    -. Square Error(平方損失)
    -. Cross Entropy(交叉熵損失)
  2. batch size是否合適?batch size太大 -> loss很快平穩,batch size太小 -> loss會震盪(理解mini-batch)
    (解決思路)采用合適的Mini-batch進行學習,使用Mini-batch的方法進行學習,一方面可以減少計算量,一方面有助於跳出局部最優點。因此要使用Mini-batch。更進一步,batch的選擇非常重要,batch取太大會陷入局部最小值,batch取太小會抖動厲害
  3. 是否選擇了合適的激活函數?(各個激活函數的來源和差異)
    (解決思路)使用激活函數把卷積層輸出結果做非線性映射,但是要選擇合適的激活函數。
    -. Sigmoid函數是一個平滑函數,且具有連續性和可微性,它的最大優點就是非線性。但該函數的兩端很緩,會帶來豬隊友的問題,易發生學不動的情況,產生梯度彌散。
    -. ReLU函數是如今設計神經網絡時使用最廣泛的激活函數,該函數為非線性映射,且簡單,可緩解梯度彌散。
  4. 學習率,學習率小收斂慢,學習率大loss震盪(怎么選取合適的學習率)
    (解決思路)學習率過大,會抖動厲害,導致沒有優化提 , 學習率太小,下降太慢,訓練會很慢
  5. 是否選擇了合適的優化算法?(比如Adam)(理解不同優化算法的適用場景)
    (解決思路)在梯度的基礎上使用動量,有助於沖出局部最低點。


如果以上五部分都選對了,效果還不好,那就是產生過擬合了,可使如下方法來防止過擬合,分別是:



過擬合情況

  1. Early Stopping(早停法)
    (詳細解釋)早停法將數據分成訓練集和驗證集,訓練集用來計算梯度、更新權重和閾值,驗證集用來估計誤差,若訓練集誤差降低但驗證集誤差升高,則停止訓練,同時返回具有最小驗證集誤差的連接權和閾值。
  2. Regularization(正則化)
    (詳細解釋) 權重衰減(Weight Decay)。到訓練的后期,通過衰減因子使權重的梯度下降地越來越緩。
    *. Batch Normalization
    *. Dropout
    *. L1 , L2
  3. 調整網絡結構
  4. 增大訓練數據量
    *. 獲取更多的數據
    *. 數據擴充(圖片: 鏡像 , 翻轉 , 隨機裁剪等.)
print_r('點個贊吧');
var_dump('點個贊吧');
NSLog(@"點個贊吧!")
System.out.println("點個贊吧!");
console.log("點個贊吧!");
print("點個贊吧!");
printf("點個贊吧!\n");
cout << "點個贊吧!" << endl;
Console.WriteLine("點個贊吧!");
fmt.Println("點個贊吧!")
Response.Write("點個贊吧");
alert(’點個贊吧’)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM