訓練結果不好的原因 === ###### 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)