偏差/方差 - 欠擬合/適度擬合/過擬合
阿新 • • 發佈:2018-12-22
我們稱左邊的為圖一,中間的為圖二,右邊的為圖三
從圖上我們可以看到有兩個資料分佈 , 我們需要將他們進行分類開.
圖一:
處於欠擬合(訓練時間不夠或者網路結構較小的時候產生的) 我們也稱之為高偏差 .
檢測方法: 計算出訓練集的誤差和理想誤差的差距 , 並估計是否存在高偏差 .
解決辦法: 增加訓練時間 , 使用較大的網路結構 , 嘗試更先進的優化演算法(如Adam) , 或者修改網路結構(可能有效可能無效)
圖二:
處於適度擬合的狀態(就是我們想要的狀態)
檢測方法: 訓練集誤差 和 交叉驗證集誤差都比較低的時候
解決辦法: 這就是我們想要的樣子 , 所以就不需要優化了 .
圖三:
處於過擬合(訓練時間過長或者網路結構較大的時候產生的)我們也稱之為高方差 .
檢測方法: 計算出訓練集的誤差和交叉驗證集的誤差 , 當訓練集誤差很接近理想誤差時 , 交叉驗證集誤差卻很高時 , 網路存在高偏差的情況 .|| 當訓練集誤差很大時 , 交叉驗證集誤差也很大時 , 我們的網路同時存在 高偏差和高方差的情況 .
解決辦法: 首先解決偏差高的問題(解決辦法 同上) , 其次解決高方差的問題 . 最好的解決辦法就是採用更多的資料 , 其次使用正則化(Dropout, Batch Normzation , L1 , L2等等...) , 嘗試新的網路結構(可能有效可能無效 , 也可能同時減少方差和偏差)
總結:
構建一個大的網路 , 正則適度 , 便可以在不影響方差時 , 減少偏差 .
採用更多資料通常可以在不過多影響偏差的同時 , 減少方差 .
print_r('點個贊吧'); var_dump('點個贊吧'); NSLog(@"點個贊吧!") System.out.println("點個贊吧!"); console.log("點個贊吧!"); print("點個贊吧!"); printf("點個贊吧!\n"); cout << "點個贊吧!" << endl; Console.WriteLine("點個贊吧!"); fmt.Println("點個贊吧!") Response.Write("點個贊吧"); alert(’點個贊吧’)