## Overfitting vs. Underfitting 以下是Copilot對於兩者的介紹以及差異之處。 >Overfitting(擬合過度),指模型在訓練過程中過度擬合訓練資料,導致模型在訓練集上表現非常好,但在測試集上表現不佳,原因可能是訓練資料不足、訓練次數過多或是模型太過複雜。 >Underfitting(擬合不足),指模型過於簡單,無法很好地擬合訓練資料,導致訓練集(trainingset)和驗證集(validationset)的表現都不好,通常發生在模型尚未訓練完全或訓練次數不足的情況下。 :::info 若想了解訓練集、驗證集、測試集之間的差別,請詳看「[資料的劃分-訓練集、驗證集、測試集](https://hackmd.io/@lcaMuWOwR1Ox5o5yeTEupA/ryQiIU_E0)」的文章,簡單來說,在這裡所指的驗證集,就是來自一部分的訓練集,用來初步評估模型能力、訓練超參數,與測試集的功能有所不同。 ::: ### 偏差與方差的權衡(Bias-VarianceTradeoff) 在提到 Overfitting 與 Underfitting 時,不得不提到 Bias-Variance Tradeoff 的觀念。 那什麼是 Bias(偏差)和 Variance(方差/變異數)呢?用簡單的概念可以想像成是打靶的「精準度」,如下圖所示,Bias 越小代表越「準」,每一槍離紅色靶心的距離越近,而 Variance 越小代表越「精」,每一槍彼此間的距離越近,但不等同於離靶心越近。 如果說能把 bias 以及 Variance 降到最低,讓所有的點能夠接近圓心又彼此間互相緊靠,就如同左上角的圖示一般,那豈不是太完美了嗎?但是,現實中機器學習的狀況並沒有那麼地完美。 ![image](https://hackmd.io/_uploads/ByPedmPNA.png=70%x) 還記得之前文章提到,簡單模型(例如線性函式)與複雜模型(例如高次方函式)之間的區別,可以搭配下圖一起思考,簡單模型無法適當地描述資料間分布情形,可以看到模型的預測值與每一筆訓練資料的誤差很大,造就了偏差(bias)很大;反之,複雜模型幾乎通過了所有訓練資料,模型的預測值與每一筆訓練資料的誤差或是偏差很小,幾乎等同於將所有訓練資料都硬背下來,對於驗證集(未看過的資料)預測能力就會很差,造就了方差(variance)很大。 因此,最好的情況是讓模型的預測值能適當地描述訓練集(training set)的分佈關係,即誤差(bias)不太大,也在驗證集(validation set)上能夠有還不錯的預測能力,即方差(variance)也不太大的情形下,就會獲得好的模型。 ![image](https://hackmd.io/_uploads/Hk5LfEwN0.png) ### Overfitting / Underfitting 與 Bias-Variance tradeoff 的關係 講了這麼多,其實只需要用心了解下方圖片即可,但對於詳細內容的介紹還是建議將上面的文字看過一次喔!橫軸(x-axis)為模型複雜度(Model Complexity),縱軸(y-axis)為模型的預測值與實際值的誤差(Prediction Error),這是在一開始提到,目前還沒有完美的情況使得偏差(bias)與方差(variance)同時達到最小值,僅能從兩者中找到權衡,這便是Bias-Variance tradeoff的核心概念。 紅色U型曲線代表的是 Total Error,位於中間位置達到了最小值,這正是我們要的理想模型;左端因為模型過於簡單,大 bias 小 variance 導致了 Underfitting 的問題;右端因為模型過於複雜,小 bias 大 variance 導致了 Overfitting 的問題。 ![image](https://hackmd.io/_uploads/B1Xl94w40.png) ## 如何解決 Underfitting / Overfitting? ### 三種解決 Underfitting 方式: #### a. 增加模型的迭代次數 #### b. 增加模型的深度、神經元數量 #### c. 增加模型的特徵(features)與參數量(parameters) ### 五種解決 Overfitting 方式: #### a. 減少特徵與參數量 #### b. 增加訓練資料量 #### c. 早停(Early stopping) 首先將一部分的訓練集作為驗證集,每一個 epoch(所有的訓練資料)結束時,計算驗證集的 accuracy,在訓練集上的準確度逐漸提高,但是在驗證集上誤差開始增加時,就終止訓練。 ![image](https://hackmd.io/_uploads/B1a3_bhN0.png) #### d. 正則化(Regularization) 主要分為兩種類型,分別是 Lasso(L1)和 Ridge(L2)正則化,就是在 Loss Function 後加上對應的 L1 及 L2 penalty(懲罰項),並求得兩者總和之最小值,即下方兩個圖形之交點位置,其中 λ 為超參數,詳細的推導過程來自於 Lagrange 乘數,有興趣可以自行多做研究。 從二維的幾何圖形來看,L1 懲罰項的圖形為正方形,交點容易接觸於四個頂點上,使得某一個參數(Wieght)變為零,對模型進行特徵選擇(Feature Selection);而 L2 懲罰項的圖形為圓形,無法像 L1 進行特徵選擇,但可以讓 w 的值向圓點(或零)靠近。 ![image](https://hackmd.io/_uploads/Sy83iwTNC.png) #### e. Dropout Step 1: 前向傳播:在訓練時,對於每一層神經元(通常是隱藏層),會以機率 p 隨機丟棄部分神經元,例如,若 p = 0.5,則該層會有 50% 的神經元將被丟棄。 Step 2: 反向傳播:被丟棄的神經元不參與梯度更新,因此在該次訓練過程中,它們的權重不會被調整,剩餘的神經元仍然正常執行梯度計算與更新。 Step 3: 測試階段(推論時):所有神經元都會被使用,但它們的輸出結果會乘上 (1−p),以補償在訓練時丟棄部分神經元所造成的影響。 ![image](https://hackmd.io/_uploads/rkfHGO6VR.png) ## 總結 在這篇文章中,講述了 Overfitting 與 Underfitting 各自代表的意義與對模型的負面影響,並且和 Bias-Variance tradeoff 的概念作結合,最後也討論了解決這些問題的常見方式,希望對你有所幫助。 --- :::info 以上就是這篇文章「Overfitting v.s. Underfitting 以及其解決方式」的所有內容,第一次看的人會花比較多時間消化吸收,這是很正常的事情,若有任何問題,歡迎在下方與我聯繫、討論,接下來也會繼續分享相關文章,敬請期待。