---
# System prepended metadata

title: 訓練結果不好的原因
tags: [李宏毅]

---

訓練結果不好的原因
===
###### tags: `李宏毅`

## 課程資訊
* [Youtube](https://www.youtube.com/watch?v=WeHM2xpYQpw)

## 判斷步驟
1. 先看 Training Data 的預測結果，如果太大就表示是 Model Bias 或是 Optimization 的問題 
2. 如果 Training Data 的 Loss 小，但是 Testing 的大，可能就是 Overfitting 或 Mismatch 的問題
![](https://i.imgur.com/g1aWzRP.png)


## 步驟 1
辨別是 Model Bias 的問題還是 Optimization，可以看比較多層的 Training Data 的表現有沒有比少層的好，沒有的話就是 Optimization 的問題。因為多層的彈性已經比少層的大，所以不會是 Model Bias 的問題。

### Model Bias
Model 太簡單，沒有考慮到重要的資訊，所以要給 Model 更大的彈性，可以增加 Feature 或是用 Sigmoid 之類的函數。
![](https://i.imgur.com/qWdY0vJ.png)


### Optimization
可能卡在 Local Minimum。可以試著先訓練一些簡單的 Model，例如 SVM。
![](https://i.imgur.com/A8v7O2M.png)


## 步驟 2
### Overfitting
當 Model 彈性很大，而 Training Data 不夠，Model 會為了降低 Loss 而弄出奇怪的 Function。
![](https://i.imgur.com/Hkmx2Y3.png)


所以可以透過增加訓練資料和 Data Augmentation，Data Augmentation 是透過一些方法增加訓練資料，例如把圖片左右相反，但是要增加得有道理。
![](https://i.imgur.com/l1HzJZq.png)


另外也可以降低 Model 的彈性，這就要對問題有更深的理解才可以確認要怎麼限制 Model 的複雜度。例如 CNN 就是 Fully-connected 的子集合，不過也就是因為有一些限制，CNN 在圖片辨識上才會有比較好的結果。
![](https://i.imgur.com/bynMvFn.png)


### Mismatch
它的原因是 Training Data 和 Testing Data 的分佈不同，所以就算 Training Data 再多都沒有用，例如拿 2018 年的 Covid19 人數當 Training Data，拿 2021 年的當作 Testing Data，怎麼樣都會很慘。

所以必須對目前在做的問題有足夠的理解才能解決這個狀況。


## 訓練方式
### Cross Validation
為了避免在預測未知的結果表現得不好，可以使用 Cross Validation 先做一些測試。把整個 Training Data 分成 Training Set 和 Validation Set，然後選 Error 最小的。
![](https://i.imgur.com/JMyjkuj.png)


### N-fold Cross Validation
把 Training Data 切成好幾分，每次選擇其中一份當作 Validation Set，每個 Model 把每一次算出的 Error 平均起來，最後比較哪個 Model 表現最好。
![](https://i.imgur.com/KoiwJIM.png)
