#我在頭條搞創(chuàng)作#
上節(jié)課我們講了MLP在MNIST數(shù)據(jù)集上的分類應用,我們在構建模型時涉及到的模型結構和超參數(shù)可以自行更改去驗證更好的模型效果。我們在實驗過程中常會出現(xiàn)一種情況:模型在訓練數(shù)據(jù)集上效果很好,但是在測試數(shù)據(jù)集上效果一般或者比較差,這種現(xiàn)象被稱為——過擬合(overfitting)。
與過擬合相對應的是欠擬合(underfitting),我們常用訓練誤差(training error)和泛化誤差(generalization error)區(qū)分兩者,誤差由損失函數(shù)計算所得(比如前面講的線性回歸用到的平方損失函數(shù)和 softmax 回歸用到的交叉熵損失函數(shù))。
即訓練數(shù)據(jù)集表現(xiàn)得好,不代表實際測試數(shù)據(jù)集就一定表現(xiàn)好。因此,模型在訓練選擇時應更多地關注如何降低泛化誤差,提高泛化能力。
模型選擇
我們在訓練前需要確定超參數(shù)和模型參數(shù),過程中通過多次epoch來達到較好的訓練效果,每個epoch對應一個模型文件,那么如何選擇最佳的模型和設置超參數(shù)呢?此時需要驗證數(shù)據(jù)集(validation data set)輔助判斷,因為理論上,我們之前用的測試集只能在所有超參數(shù)和模型參數(shù)確定后使用一次,因此引入了驗證集。驗證集一般是從訓練集中隨機選取一部分作為驗證集。
訓練集、驗證集和測試集比例一般是6:2:2。
即驗證集可以輔助我們選擇誤差較小的模型文件。
過擬合VS欠擬合
欠擬合
欠擬合可理解為模型對訓練數(shù)據(jù)的特征提取不充分,沒有學習到數(shù)據(jù)背后的規(guī)律,或者評判標準過于寬松,導致模型在測試數(shù)據(jù)集上無法做出正確判斷。表現(xiàn)為:訓練誤差和泛化誤差都相對較高。
當樣本特征較少、模型復雜度較低時,對樣本的特征提取不夠充分,就可能導致欠擬合問題。
過擬合
過擬合可理解為模型對特征信息提取過多,把數(shù)據(jù)噪聲當作規(guī)律學習,評判標準過于嚴格。表現(xiàn)為:訓練誤差低,泛化誤差高。
當數(shù)據(jù)集質量不高、噪聲較大、訓練樣本數(shù)較少,或是模型復雜度較高、參數(shù)過多,就會導致學習到的特征并不普遍適用,模型高度擬合訓練數(shù)據(jù),出現(xiàn)過擬合問題。
過擬合與欠擬合比喻圖解
這兩種擬合問題是所有深度學習從事人員“深惡痛絕”的問題,打個比喻,某同學平時學習認真,模擬考試成績也很好,但是期末考試成績卻很難保證會一樣好或者更好??陀^原因一般是試卷難或者是平時模擬試卷做的少導致一些題型沒遇到。
類比到深度學習模型擬合問題的導致因素主要有兩方面:模型復雜度(試卷難)和訓練數(shù)據(jù)集大?。ㄆ綍r學習的題型少)。
模型復雜度
為了模擬過擬合和欠擬合兩種現(xiàn)象,我們選擇一個復雜的模型和一個簡單的模型來測試。
高復雜度模型選擇高階多項式函數(shù)
低復雜度模型選擇低階多項式函數(shù):一階多項式函數(shù)又稱為線性函數(shù):y=wx+b
上面兩個模型函數(shù)均采用平方損失函數(shù)來擬合模型。
給定訓練數(shù)據(jù)集,如果模型的復雜度過低,很容易出現(xiàn)欠擬合;如果模型復雜度過高,很容易出現(xiàn)過擬合。應對擬合和過擬合的個辦法是針對數(shù)據(jù)集選擇合適復雜度的模型。
訓練數(shù)據(jù)集
影響欠擬合和過擬合的另一個重要因素是訓練數(shù)據(jù)集的大小。一般來說,如果訓練數(shù)據(jù)集中樣本數(shù)過少,特別是模型參數(shù)數(shù)量(按元素計)更少時,過擬合更容易發(fā)生。隨著我們增加訓練數(shù)據(jù)量,泛化誤差通常會減少。因此,在硬件允許的情況下應盡可能增加訓練數(shù)據(jù)集,特別是當模型復雜度較高時。
實驗過程展示如下(基于Pytorch):
我們將生成一個人工數(shù)據(jù)集。在訓練數(shù)據(jù)集和測試數(shù)據(jù)集中,給定樣本特征x,我們使用如下的三階多項式函數(shù)來生成該樣本的標簽
噪聲項服從正態(tài)分布,平均值為0,標準差為0.1。我們將為訓練集和測試集各合成100個樣本
1.三階多項式函數(shù)擬合(正常情況)
我們先是與數(shù)據(jù)生成函數(shù)同階的三階多項式函數(shù)擬合。實驗表明,這個模型的訓練誤差和在測試數(shù)據(jù)集的誤差都較低。訓練出的模型參數(shù)也接近真實值:w1 = 1.2, w2 = 3.4, w3 = 5.6, b= 5。
2.線性函數(shù)擬合(擬合)
我們再試試線性函數(shù)擬合。很明顯,該模型的訓練誤差在迭代早期下降后便很難繼續(xù)降低。在完成最后次迭代周期后,訓練誤差依舊很大,即模型復雜度不夠。
3.訓練量不足(過擬合)
事實上,即便是與數(shù)據(jù)成模型同階的三階多項式函數(shù)模型,如果訓練量不足,該模型依然容易過擬合。讓我們僅僅使用5個樣本來訓練模型。顯然,訓練樣本過少了,甚至少于模型參數(shù)的數(shù)量。這使模型顯得過于復雜,以至于容易被訓練數(shù)據(jù)中的噪音影響。在迭代過程中,即便訓練誤差較低,但是測試數(shù)據(jù)集上的誤差卻很大 。這是典型的過擬合現(xiàn)象。
前面提到,增大訓練數(shù)據(jù)集可能會減輕過擬合,但是獲取額外的訓練數(shù)據(jù)往往代價高昂。在訓練數(shù)據(jù)集固定的情況下,一般使用權重衰減和丟棄法來解決過擬合問題。后續(xù)我們將繼續(xù)講解解決過擬合問題的方法。