1. 程式人生 > >神經網路的調參效果不理想時->(解決思路)

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

github部落格傳送門
部落格園傳送門

非過擬合情況

  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(’點個贊吧’)