---
# System prepended metadata

title: 新手訓練模型攻略指引
tags: [李宏毅, 入門基礎, 機器學習]

---

## 訓練模型時常見的問題
以下用一張簡化的示意圖，展示在訓練模型時可能面臨的狀況，並會在接下來的文字中給予相對應的解法。

還記得先前的文章「[如何訓練出好模型呢？](https://hackmd.io/@lcaMuWOwR1Ox5o5yeTEupA/BJxlQH1NA)」中提到，需要挑選一個適合的模型（Model）、誤差函數（Loss function），以及最佳化（Optimization）得到一組最佳的參數使誤差達到最低。

當餵給模型訓練資料（Training data）時，loss 呈現較高的數值遲遲無法降低，潛在的問題可能是「Model bias」或者是「Optimizaiton」；此外，模型在訓練資料上充分地描述資料間的關係，loss 呈現較低的數值，卻在測試資料（Testing data）也就是沒看過的資料上表現地很差，loss 的數值不減反增，潛在的問題可能是「Overfitting」或者是「Mismatch」。

如果在訓練資料以及測試資料上所得到的 loss 的數值都很小，代表模型（model）在已知/未知的資料上都表現得很好，那就恭喜模型沒有上述的問題。

![image](https://hackmd.io/_uploads/H15n0eQN0.png)

## 在訓練資料上 loss 大有什麼問題？
### 1. Model bias
聽到 Model bias 有沒有一種熟悉的感覺，沒錯，我們在上一篇文章中也有提及到，線性模型在大多數的狀況下過於簡單，無法完全代表訓練資料間的關係，因為資料分布可能較接近拋物線或是更複雜的形狀，因為模型過於簡單而不足以描述資料間的關係，此種狀況稱為「Model bias」。

若欲解決 Model bias 的問題，可以嘗試增加 x（features）的數量和參數量，也就是增加模型的彈性，使得模型能夠更趨近於資料的分布，從下圖可看到，從原本簡單的線性模型 y = w*x₁ + b 到非線性模型 y = σ（z），大幅降低發生 Model bias 的可能性。

![image](https://hackmd.io/_uploads/H1IIzLkV0.png)
### 2. Optimization
相信大家還記得，最佳化的目的就是要找到一組讓 loss 變成最小值的理想參數！而讓參數無法繼續更新，使得 loss 卡在一個較高的位置，便是遇到了偏微分為零或者是斜率為零的地方，也就是所謂的「Critical point」，但是在機器學習或者是深度學習裡 Critical point 往往不是最主要的問題，有關於 Optimization 可能的情境、問題較多，會在下一篇文章與大家分享。

:::info
那你可能會有個疑惑，模型在訓練資料上的表現較差，潛在的問題可能是「Model bias」或者是「Optimizaiton」，那該如何判斷是屬於哪一個問題呢？

最迅速判別的方式，直接拿兩個多層的類神經網絡（neural network），其中一組較少層（ex: 20 layers），另一組較多層（ex: 56 layers），原因是具有多層的類神經網絡（neural network）表達能力較好，還記得前面有提到 shallow v.s. deep 的對決嗎？

沒錯，利用這個效果就能夠知道，多層理論上比少層表現得更好，也就是 Training loss 的數值更低，如果正好相反，多層的類神經網絡 Training loss 反而較高，即可推論不是 Model bias 而是 Optimization 的問題。

![image](https://hackmd.io/_uploads/HJjTpZmEA.png =100%x)
:::

## 在訓練資料上表現好，卻在測試資料上表現差？
### 1. Overfitting
Overfitting 的定義是在訓練資料（Training data）上表現好，卻在測試資料（Testing data）上表現差，當然這是較簡單的說法，也有可能是 mismatch 也會在接下來文字中解釋。

在這裡可以想像成模型過度擬合訓練資料的分布，可能會認為完全符合訓練資料的分布不是最好的嗎？不是這樣的，即使利用很複雜（或彈性很大）的模型，使得 Training loss 趨近於零，但 Testing loss 數值很大，在未來模型預測結果上也會有很差的表現，這很顯然地不是我們要的結果。

另外，在真實世界中，訓練資料的分布並非完美剛好落在曲線上（ex: 拋物線），有些少數資料可能離大多數資料的分布區域非常遠，稱之為「離群點」，為了擬合這些離群點，很有可能使得訓練出來的模型「走鐘」。

:::info
五種解決 Overfitting 的方式：
a. Less features and parameters：限制模型的彈性或複雜度。
b. More training data：使得模型更趨近於大多數訓練資料的分布。
c. Early stopping（早停）：模型變得複雜（more features、more parameters），並在 testing loss 開始上升時停止訓練。
d. Dropout：停止某些 Neuron 運作，讓每次的輸出可以透過不同結構的 Neural Network 獲得。
e. Regularization（正則化）：限制權重（wieght, w）大小，減少模型（曲線）複雜程度。
:::

這邊寫得相對簡潔，讓初學者能輕鬆理解，如果想要更進一步了解每個項目的詳細內容，可以點擊下方連結觀看「[Overfitting v.s. Underfitting](https://hackmd.io/@lcaMuWOwR1Ox5o5yeTEupA/ByCVKNQNA
)」的文章。
### 2. Mismatch
此問題發生在，訓練資料（training data）與測試資料（testing data）的分布不匹配時，即使增加訓練資料的數量也無法解決該問題。

假設要創造一個模型能夠從圖片中找出車子，訓練資料來自於網路下載且低解析度的車子照片，而測試資料來自於相機拍攝且高解析度的車子照片，這兩邊的資料便是不對等的，就可能導致 Mismatch。

## 總結，攻略指引
在訓練模型的過程中，所面臨到的問題是相當複雜且多樣性的，但並非無跡可尋，只要照著最上面的攻略進行判斷，排除大部分的可能性，最後找到真正的問題，再針對問題思考對應的解決辦法，如此就能節省大多數碰壁的時間。

---
:::info
以上就是這篇文章「新手訓練模型攻略指南」的所有內容，第一次看的人會花比較多時間消化吸收，這是很正常的事情，若有任何問題，歡迎在下方與我聯繫、討論，接下來也會繼續分享相關文章，敬請期待。
:::