## 訓練模型時常見的問題
以下用一張簡化的示意圖,展示在訓練模型時可能面臨的狀況,並會在接下來的文字中給予相對應的解法。
還記得先前的文章「[如何訓練出好模型呢?](https://hackmd.io/@lcaMuWOwR1Ox5o5yeTEupA/BJxlQH1NA)」中提到,需要挑選一個適合的模型(Model)、誤差函數(Loss function),以及最佳化(Optimization)得到一組最佳的參數使誤差達到最低。
當餵給模型訓練資料(Training data)時,loss 呈現較高的數值遲遲無法降低,潛在的問題可能是「Model bias」或者是「Optimizaiton」;此外,模型在訓練資料上充分地描述資料間的關係,loss 呈現較低的數值,卻在測試資料(Testing data)也就是沒看過的資料上表現地很差,loss 的數值不減反增,潛在的問題可能是「Overfitting」或者是「Mismatch」。
如果在訓練資料以及測試資料上所得到的 loss 的數值都很小,代表模型(model)在已知/未知的資料上都表現得很好,那就恭喜模型沒有上述的問題。

## 在訓練資料上 loss 大有什麼問題?
### 1. Model bias
聽到 Model bias 有沒有一種熟悉的感覺,沒錯,我們在上一篇文章中也有提及到,線性模型在大多數的狀況下過於簡單,無法完全代表訓練資料間的關係,因為資料分布可能較接近拋物線或是更複雜的形狀,因為模型過於簡單而不足以描述資料間的關係,此種狀況稱為「Model bias」。
若欲解決 Model bias 的問題,可以嘗試增加 x(features)的數量和參數量,也就是增加模型的彈性,使得模型能夠更趨近於資料的分布,從下圖可看到,從原本簡單的線性模型 y = w*x₁ + b 到非線性模型 y = σ(z),大幅降低發生 Model bias 的可能性。

### 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 的問題。

:::
## 在訓練資料上表現好,卻在測試資料上表現差?
### 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
以上就是這篇文章「新手訓練模型攻略指南」的所有內容,第一次看的人會花比較多時間消化吸收,這是很正常的事情,若有任何問題,歡迎在下方與我聯繫、討論,接下來也會繼續分享相關文章,敬請期待。
:::