過擬合、欠擬合以及解決方法
訓練誤差和泛化誤差
在機器學習中,我們將數據分為訓練數據、測試數據(或者訓練數據、驗證數據、測試數據,驗證數據也是訓練數據的一部分。)訓練誤差是模型在訓練數據集上表現出來的誤差,泛化誤差(也可稱為測試誤差)是在測試數據集上表現出來的誤差的期望。,例如線性回歸用到的平方損失函數和softmax回歸的交叉熵損失函數。
測試數據集只能在所有超參數和模型參數選定之后使用一次,不可以用來選擇模型,如調參。
驗證數據集是預留一部分在訓練集和測試集以外的數據以外的數據進行模型的選擇。但是由於數據集有限,一般采用K折交叉驗證的方法。
訓練集:用於模型的構建
驗證數據集:可選,用於輔助模型構建,可以重復使用。
測試數據集:用於檢測模型,評估模型的准確率。
模型訓練過程中會出現兩種問題:欠擬合和過擬合
欠擬合:模型無法得到較低的訓練誤差。
過擬合:模型的訓練誤差遠小於它在測試數據集熵的誤差。
導致這兩種擬合問題的因素有很多,模型復雜度和訓練數據集的大小是主要因素。
給定數據集,模型復雜度和誤差之間的關系:
訓練數據集過少時,比模型參數數量更少時會,更容易出現過擬合。
解決方法
欠擬合常見的解決方法:
1、增加新特征,可以加入特征組合、高次特征,來增大假設空間。
2、添加多項式特征。例如線性模型通過添加二次項或者三次項使模型泛化能力更強。
3、減少正則化參數,正則化的目的使用來防止過擬合,大那是模型出現欠擬合,則需要減少正則話參數。
4、使用非線性模型
5、集成學習方法。
過擬合的解決方法:
1、正則化(Regularization) (L1范式和L2范式)
2、數據擴增,即增加訓練數據集
3、Dropout
4、Early stopping
L2范數正則化
L2范數等價於正則化。正則化通過模型損失函數添加懲罰項時使學習的模型參數值較小。
L2范數正則化是在原損失函數的基礎之上添加L2范數懲罰項,從而得到訓練所需要的最小化函數。L2范數懲罰項是模型權重參數每一個元素的平方和與與一個正的常數的乘積。
以線性回歸 為例
將權重參數使用向量\(\mathbf{w}=[w_{1},w_{2}]\)表示,帶有L2范數的懲罰項的新損失函數為:
超參數\(\lambda>0\)。當權重參數均為0時,懲罰項最小。當\(\lambda\)較大時,懲罰項在損失函數中的比重較大,通過使學到的權重參數的元素較接近於0.當\(\lambda\)設為0時,懲罰項完全不起作用。
增加L2范數懲罰項之后,小批量隨機梯度下降中,權重的\(w_1,w_{2}\)的迭代方式為:
L2范式正則化令權重\(w_{1},w_{2}\)先自乘小於1的數,再減去不含懲罰項的梯度。權重衰減通過懲罰項絕對值較大的模型參數為需要學習的模型增加了限制,這可能對過擬合有效。
數據擴增
數據擴增時解決最有效的方法,只要給足夠多的數據的,就可以不斷的修正自己,從而得到更好的結果。
1、從數據源頭獲取更多數據
2、根據當前數據集估計數據分布參數,使用該分布產生更多的數據(一般不用)
3、通過一定規則擴充數據。例如圖像的平移、翻轉、縮放、切割等手段。
Dropout(丟棄法)
設丟棄概率為\(p\),那么有\(p\)的概率hi會被清零,有\(1-p\)的概率\(h_{i}\),會除以\(1-p\)拉伸。丟棄概率時丟棄方的超參數。設隨機變量\(\theta _{i}\)為0和1的概率分別為\(p\)和\(1-p\)。
丟棄法隨機(例如50%的概率)忽略隱層的某些節點,相當於從\(2^{n}\)(n個神經元的網絡)個模型中采樣選擇模型。
Early stopping
early stopping是提前結束訓練迭代過程的方法防止過擬合。在每一個Epoch結束計算validation data的accuracy,當accuracy不再提高,就提前停止訓練。
總結
欠擬合現象:模型無法達到一個較低的誤差
過擬合現象:訓練誤差較低但是泛化誤差依然較高,二者相差較大。