---
# System prepended metadata

title: Overfitting v.s. Underfitting 以及其解決方式
tags: [深度學習, 模型訓練技巧]

---

## 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 以及其解決方式」的所有內容，第一次看的人會花比較多時間消化吸收，這是很正常的事情，若有任何問題，歡迎在下方與我聯繫、討論，接下來也會繼續分享相關文章，敬請期待。