過擬合及應對方法

2021-10-05 07:49:58 字數 1908 閱讀 3339

訓練誤差和泛化誤差

訓練誤差

模型在訓練資料集上表現的誤差

泛化誤差

模型在任意乙個測試資料樣本上表現的誤差期望,常常通過測試資料集上的誤差來近似

計算訓練誤差和泛化誤差可以使用損失函式(loss),線性回歸使用平方誤差損失函式 softmax回歸使用交叉熵損失函式

模型選擇

從嚴格意義上講,測試集只能在所有超引數和模型引數選定後使用一次,不可以使用測試集選擇模型,如調參。、

也無法從訓練誤差來估計泛化誤差,因此也不能依賴訓練資料選擇模型。鑑於此,可以預留一部分在訓練資料集和測試資料集以外的資料

進行模型選擇。這部分資料叫做驗證資料集,也稱為驗證集。

在實踐中驗證資料集和測試資料集的界限比較模糊。

k折交叉驗證

由於驗證資料集不參與模型訓練,當訓練資料不夠時,預留大量的驗證資料是太奢侈了。通常使用k折交叉驗證,來改善這種狀況.

k折交叉驗證

把原始訓練集分割成k個不重合的子資料集,然後我們做k次模擬訓練和驗證。每次使用乙個資料子集作為驗證資料集,其他k-1個

子資料集來訓練模型。在這個k次訓練和驗證中,每次用來驗證模型的子資料集都不同,最後對k次訓練誤差和驗證誤差分別求平均

''''''

欠擬合 過擬合

欠擬合模型無法得到較低的訓練誤差

過擬合訓練誤差遠小於他在測試集上的誤差

一般我們要盡可能的同時應對過擬合 欠擬合 現在一般討論的兩個因素是 模型複雜度和訓練資料集大小

''''''

模型複雜度

在高階多項式函式模型中,引數更多,所以可選的模型函式更多,所以高階多項式函式的複雜度更高。因此高階多項式函式模型比

低階多項式函式模型更容易在相同的訓練集上得到更低的訓練誤差。給定訓練資料集,如果模型的複雜度過低,很容易出現欠擬合

模型複雜度更高,容易出現過擬合,因此要根據資料集選擇合適複雜度模型

訓練資料集大小

一般來說訓練資料集樣本數過少,特別是比模型引數(按元素計算)更少時,容易過擬合

泛化誤差不會隨著訓練資料集裡面的樣本數量增加而增大。在計算資源允許的情況下,我們希望資料集大一些,特別是

模型複雜度比較高時。

'''

控制過擬合的四種方法

(1)l1正則化

我們經常聽到這樣的話:「l1正則化是為了產生稀疏矩陣」,l1正則化的實現是在loss函式後面新增乙個權重絕對值之和的項,該和再乘以乙個係數,這個係數就是l1正則化的係數。這樣做可以使得一些權重的值為0,降低了模型的複雜度,從而控制過擬合。

(2)l2正則化

l2正則化跟l1正則化的區別在於loss函式後加的是權重^2之和,該和再乘以乙個係數,這個係數就是l2正則化的係數。這樣做可以使得一些高次方項的權重為0,從而也降低了模型複雜度,控制了過擬合。以下是l2正則化的簡單實現

weight_decay (float, optional): weight decay (l2 penalty) (default: 0)

optimizer_w = torch.optim.sgd(params=[net.weight], lr=lr, weight_decay=wd)

def l2_penalty(w):

return (w**2).sum()/2

(3)早停法

早停是在訓練過程中所採用的方法,在訓練模型的時候觀察驗證集上的表現,如果驗證集上的loss開始上公升的時候,停止訓練模型,從而阻止了模型進一步變得複雜

(4)丟棄法

丟棄法一般用於全連線神經網路,它指的是一些神經元不繼續傳遞其值,從而活動的神經元的數量變少,減少了模型的複雜度。

過擬合 欠擬合及避免方法

在我們機器學習或者訓練深度神經網路的時候經常會出現欠擬合和過擬合這兩個問題,但是,一開始我們的模型往往是欠擬合的,也正是因為如此才有了優化的空間,我們需要不斷的調整演算法來使得模型的表達能拿更強。但是優化到了一定程度就需要解決過擬合的問題了,這個問題也在學術界討論的比較多。之前搜了很多有的部落格,講...

過擬合及解決方法

在機器學習演算法中,我們經常將原始資料集分為三部分 訓練集 training data 驗證集 validation data 測試集 testing data 1.validation data是什麼?它事實上就是用來避免過擬合的。在訓練過程中,我們通經常使用它來確定一些超引數 比方,依據vali...

過擬合及解決方法

過擬合,指的是模型在訓練集上表現的很好,但是在交叉驗證集合測試集上表現一般,也就是說模型對未知樣本的 表現一般,泛化 generalization 能力較差。通俗一點地來說過擬合就是模型把資料學習的太徹底,以至於把雜訊資料的特徵也學習到了。在機器學習演算法中,我們常常將原始資料集分為三部分 trai...