模型選擇、過擬合和欠擬合
訓練誤差和泛化誤差
在解釋上述現象之前,我們需要區分訓練誤差(training error)和泛化誤差(generalization error)。通俗來講,前者指模型在訓練數據集上表現出的誤差,後者指模型在任意一個測試數據樣本上表現出的誤差的期望,並常常通過測試數據集上的誤差來近似。計算訓練誤差和泛化誤差可以使用之前介紹過的損失函數,例如線性迴歸用到的平方損失函數和softmax迴歸用到的交叉熵損失函數。
機器學習模型應關注降低泛化誤差。
模型選擇
驗證數據集
從嚴格意義上講,測試集只能在所有超參數和模型參數選定後使用一次。不可以使用測試數據選擇模型,如調參。由於無法從訓練誤差估計泛化誤差,因此也不應只依賴訓練數據選擇模型。鑑於此,我們可以預留一部分在訓練數據集和測試數據集以外的數據來進行模型選擇。這部分數據被稱爲驗證數據集,簡稱驗證集(validation set)。例如,我們可以從給定的訓練集中隨機選取一小部分作爲驗證集,而將剩餘部分作爲真正的訓練集。
K折交叉驗證
由於驗證數據集不參與模型訓練,當訓練數據不夠用時,預留大量的驗證數據顯得太奢侈。一種改善的方法是K折交叉驗證(K-fold cross-validation)。在K折交叉驗證中,我們把原始訓練數據集分割成K個不重合的子數據集,然後我們做K次模型訓練和驗證。每一次,我們使用一個子數據集驗證模型,並使用其他K-1個子數據集來訓練模型。在這K次訓練和驗證中,每次用來驗證模型的子數據集都不同。最後,我們對這K次訓練誤差和驗證誤差分別求平均。
過擬合和欠擬合
接下來,我們將探究模型訓練中經常出現的兩類典型問題:
- 一類是模型無法得到較低的訓練誤差,我們將這一現象稱作欠擬合(underfitting);
- 另一類是模型的訓練誤差遠小於它在測試數據集上的誤差,我們稱該現象爲過擬合(overfitting)。
在實踐中,我們要儘可能同時應對欠擬合和過擬合。雖然有很多因素可能導致這兩種擬合問題,在這裏我們重點討論兩個因素:模型複雜度和訓練數據集大小。
模型複雜度
爲了解釋模型複雜度,我們以多項式函數擬合爲例。給定一個由標量數據特徵和對應的標量標籤組成的訓練數據集,多項式函數擬合的目標是找一個階多項式函數
來近似 。在上式中,是模型的權重參數,是偏差參數。與線性迴歸相同,多項式函數擬合也使用平方損失函數。特別地,一階多項式函數擬合又叫線性函數擬合。
給定訓練數據集,模型複雜度和誤差之間的關係:
訓練數據集大小
影響欠擬合和過擬合的另一個重要因素是訓練數據集的大小。一般來說,如果訓練數據集中樣本數過少,特別是比模型參數數量(按元素計)更少時,過擬合更容易發生。此外,泛化誤差不會隨訓練數據集裏樣本數量增加而增大。因此,在計算資源允許的範圍之內,我們通常希望訓練數據集大一些,特別是在模型複雜度較高時,例如層數較多的深度學習模型。
注意:
(1)測試數據集不可以調整模型參數,如果使用測試數據集調整模型參數,可能在測試數據集上發生一定程度的過擬合,此時將不能用測試誤差來近似泛化誤差。
(2)過擬合是指訓練誤差達到一個補償的水平,而泛化誤差依然克服。欠擬合是指訓練誤差和泛化誤差都不能達到一個重置的水平。發生欠擬合的時候在訓練集上訓練誤差不能達到一個比較低的水平,所以過擬合和欠擬合不可能同時發生。
(3)過擬合還可以使用權重衰減和替換法來緩解,即使在一個比較小的數據集上使用了權重衰減和替換法之後也能夠達到一個比較好的效果。
權重衰減
方法
權重衰減等價於 範數正則化(regularization)。正則化通過爲模型損失函數添加懲罰項使學出的模型參數值較小,是應對過擬合的常用手段。
L2 範數正則化(regularization)
範數正則化在模型原損失函數基礎上添加範數懲罰項,從而得到訓練所需要最小化的函數。範數懲罰項指的是模型權重參數每個元素的平方和與一個正的常數的乘積。以線性迴歸中的線性迴歸損失函數爲例
其中是權重參數,是偏差參數,樣本的輸入爲,標籤爲,樣本數爲。將權重參數用向量表示,帶有範數懲罰項的新損失函數爲
其中超參數。當權重參數均爲0時,懲罰項最小。當較大時,懲罰項在損失函數中的比重較大,這通常會使學到的權重參數的元素較接近0。當設爲0時,懲罰項完全不起作用。上式中範數平方展開後得到。
有了範數懲罰項後,在小批量隨機梯度下降中,我們將線性迴歸一節中權重和的迭代方式更改爲
可見,範數正則化令權重和先自乘小於1的數,再減去不含懲罰項的梯度。因此,範數正則化又叫權重衰減。權重衰減通過懲罰絕對值較大的模型參數爲需要學習的模型增加了限制,這可能對過擬合有效。
丟棄法
多層感知機中神經網絡圖描述了一個單隱藏層的多層感知機。其中輸入個數爲4,隱藏單元個數爲5,且隱藏單元()的計算表達式爲
這裏是激活函數,是輸入,隱藏單元的權重參數爲,偏差參數爲。當對該隱藏層使用丟棄法時,該層的隱藏單元將有一定概率被丟棄掉。設丟棄概率爲,那麼有的概率會被清零,有的概率會除以做拉伸。丟棄概率是丟棄法的超參數。具體來說,設隨機變量爲0和1的概率分別爲和。使用丟棄法時我們計算新的隱藏單元
由於,因此
即丟棄法不改變其輸入的期望值。讓我們對之前多層感知機的神經網絡中的隱藏層使用丟棄法,一種可能的結果如圖所示,其中和被清零。這時輸出值的計算不再依賴和,在反向傳播時,與這兩個隱藏單元相關的權重的梯度均爲0。由於在訓練中隱藏層神經元的丟棄是隨機的,即都有可能被清零,輸出層的計算無法過度依賴中的任一個,從而在訓練模型時起到正則化的作用,並可以用來應對過擬合。在測試模型時,我們爲了拿到更加確定性的結果,一般不使用丟棄法
總結
-
欠擬合現象:模型無法達到一個較低的誤差
-
過擬合現象:訓練誤差較低但是泛化誤差依然較高,二者相差較大