我們已經學會如何編譯和訓練模型,在這過程中我們會先設定訓練週期,但要如何得知模型要訓練到什麼程度才是可以的?那就要看訓練的模型到底有沒有 Overfitting。
Overfitting 在訓練模型的過程中是一個很常發生的現象,也是需要去發生的現象。如果在訓練模型時,發現訓練資料集的評估數值上表現很好,但在新的或是未見過的資料集表現卻沒有很好(如驗證資料集),即為 Overfitting。François Chollet《Deep Learning with Python, Second Edition》一書中提到,可以訓練至訓練資料集表現好,但驗證資料集表現卻開始下降的折返點(該週期數)(但這種方法需要重新訓練模型至該週期停止,之後會介紹一種方法,可以不用這麼麻煩~)。訓練深度學習模型的目標需要先訓練一個模型至 Overfitting,再進行調整。
為什麼還要進行調整,不能就 Overfitting 嗎?可以當作模型訓練(學習)就像是在背餵給它的資料集這個「題庫」,如果一直狂記猛記死背下這整個題庫,之後碰到新的題目或沒看過的題目,可能就會回答不出來了(就像是「學僵了」)。模型可能會去特別學習一些較為偏頗的資料,例如模糊特徵、罕見特徵、虛假關聯或是具有雜訊的資料等。我們希望模型有 Generalization 的特性,要能盡量適用於沒見過的新資料上,不會希望它被這些偏頗的資料受到影響,所以 Overfitting 的模型才會需要去調整。
造成 Overfitting 的原因有很多種可能,如複雜的模型結構(不適合所選的資料集)導致學習到太多細節;訓練的資料數少,無法學習到「通用」的原則;訓練的資料特徵種類多樣性較低,可以檢查有沒有先進行資料洗牌(可能會因為檔案名稱編排及讀取順序關係,導致相似的影像特徵被選取到),或是可以使用資料增強方式讓資料特徵多樣化,也要注意特徵的選擇(不是愈多就愈好)等,還有其他原因可能也會造成 Overfitting。
可以增加訓練資料數量,增加資料集多樣性;使用正則化(之後會介紹)去限制模型複雜度,或是使用 EarlyStopping 方法(之後也會介紹)等,提高模型的 Generalization 能力。
今天比較偏觀念的講解,明天會開始介紹正則化方法,會有範例程式碼,就比較不枯燥乏味了~