訓練結果不好的原因
===
###### tags: `李宏毅`
## 課程資訊
* [Youtube](https://www.youtube.com/watch?v=WeHM2xpYQpw)
## 判斷步驟
1. 先看 Training Data 的預測結果,如果太大就表示是 Model Bias 或是 Optimization 的問題
2. 如果 Training Data 的 Loss 小,但是 Testing 的大,可能就是 Overfitting 或 Mismatch 的問題

## 步驟 1
辨別是 Model Bias 的問題還是 Optimization,可以看比較多層的 Training Data 的表現有沒有比少層的好,沒有的話就是 Optimization 的問題。因為多層的彈性已經比少層的大,所以不會是 Model Bias 的問題。
### Model Bias
Model 太簡單,沒有考慮到重要的資訊,所以要給 Model 更大的彈性,可以增加 Feature 或是用 Sigmoid 之類的函數。

### Optimization
可能卡在 Local Minimum。可以試著先訓練一些簡單的 Model,例如 SVM。

## 步驟 2
### Overfitting
當 Model 彈性很大,而 Training Data 不夠,Model 會為了降低 Loss 而弄出奇怪的 Function。

所以可以透過增加訓練資料和 Data Augmentation,Data Augmentation 是透過一些方法增加訓練資料,例如把圖片左右相反,但是要增加得有道理。

另外也可以降低 Model 的彈性,這就要對問題有更深的理解才可以確認要怎麼限制 Model 的複雜度。例如 CNN 就是 Fully-connected 的子集合,不過也就是因為有一些限制,CNN 在圖片辨識上才會有比較好的結果。

### 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 最小的。

### N-fold Cross Validation
把 Training Data 切成好幾分,每次選擇其中一份當作 Validation Set,每個 Model 把每一次算出的 Error 平均起來,最後比較哪個 Model 表現最好。
