## 訓練模型時常見的問題 以下用一張簡化的示意圖,展示在訓練模型時可能面臨的狀況,並會在接下來的文字中給予相對應的解法。 還記得先前的文章「[如何訓練出好模型呢?](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 以上就是這篇文章「新手訓練模型攻略指南」的所有內容,第一次看的人會花比較多時間消化吸收,這是很正常的事情,若有任何問題,歡迎在下方與我聯繫、討論,接下來也會繼續分享相關文章,敬請期待。 :::