前一課我們透過交差驗證發現過度配適的問題,接著該如何解決呢?
一、提升模型常規化來解決過度配適
透過交差驗證之後發現過度配適的問題,那該如何解決呢?其實,根據不同的模型會有不同的解決方案,但是解決方案的觀念都是差不多:避免模型發揮更強的能力時,卻只是去找特徵跟量測誤差的關係,使得訓練資料的預測值跟標籤差距減少,而驗證資料的預測值跟標籤差距卻增加。
有人可能會覺得「就不要用很強的模型呀,比如身高體重的範例裡,一看就知道大約就是二次方或三次方關係,何必加更多高次方的x」。那是因為我們為了方便說明,所以設計一個大家比較好理解的簡單範例,而確實大家可以一下就看出來身高跟體重之間的關係(小編提示:想一下BMI)。問題是實務上,我們會看到很複雜的資料集,根本不知道怎麼設計一個能力剛剛好的模型。為了避免設計一個太弱的模型,導致我們根本找不到特徵跟標籤之間關係,我們會傾向使用一個能力夠強的模型。透過交叉驗證來檢查模型是否有過度配適,並且搭配合適的常規化手法,讓模型不會跑去找特徵跟量測誤差之間的關係。
不過使用常規化也要注意,如果常規化效果開太強,有可能即使模型有很強大的能力,但卻被抑制而無法發揮。因此,如何調整常規化到一個比較剛好的程度,則是很需要經驗的累積。但也不是完全沒有方法可以依循,我們調整常規化的強度後再接著利用交叉驗證檢查結果,就有機會可以找到一個比較合適的模型了。
常見的常規化方法有以下幾個:
最小二乘法(Least Square):控制模型的係數值不能距離0太遠
決策樹(Decision Tree):修剪(prune)分支或是葉片的數量
類神經網路(Neural Network):訓練過程中隨機丟棄部分神經元,又稱丟棄法(drop-out)
二、使用Ridge Regression解決過度配適的問題
為什麼最小二乘法的模型,控制模型的係數值不能距離0太遠,就可以避免過度配適呢?我們可以接續身高、體重的範例來這樣思考:模型多了x⁷後,過度配適就更嚴重了,代表a7≠0。反過來想,如果a7=0,模型就沒有辦法得知x⁷跟標籤之間的關係,代表模型的能力減弱了。而我們希望模型可以找到x⁷跟標籤之間的關係,但又不要過度配適,那就只好要求模型的a7越小越好!
實際的做法是修改我們的目標函數,要求模型除了要讓預測值跟標籤差距越小越好,也要讓所有係數不能距離0太遠:
上述這種方式,我們稱為Ridge Regression。我們根據原始的身高體重資料,搭配Ridge Regression來建立模型,並且對新的身高體重資料做出預測,從圖二跟圖三可以發現即便模型有高次方的x,對訓練資料並不會得到更好的結果,代表身高跟體重之間的關係,大約只是二次方、三次方的關係而已,模型如果發覺更高次方的關係,可能只是誤判特徵跟量測誤差之間有關係。
三、低度配適(Underfitting)
上次小編有提醒讀者:訓練資料的分數有不斷上升且達但我們要的水準,但是驗證資料的分數下降,才是過度配適喔!有些時候訓練資料分數就已經不夠,這時候要先思考模型是不是能力太弱,而非關注有沒有過度配適。當訓練資料分數就已經不夠時,我們稱為低度配適(Underfitting),發生這種狀況也許是模型的能力不夠、訓練過程不正確、或是給模型的資料不夠多不夠乾淨,導致訓練後的模型不太有辦法描述資料,這時候就會發現模型預測訓練資料的結果也很不好,訓練分數不是很高。以身高、體重的範例來看,如果我們是用order = 1的模型(也就是直線),從圖四會發現,當身高比較矮時,預測結果會偏大;反之,身高較高時,預測結果都偏小,而且訓練分數不到0.9。顯然用直線是不足以捕捉資料的特性,這時就是發生了低度配適。
當我們在訓練模型的時候,首先要檢查訓練資料的分數是否有達到我們要的目標,如果訓練資料的分數都不夠(發生低度配適),我們要先調整模型、訓練資料、或是訓練方法,直到模型可以捕捉到訓練資料的特性後,接著我們才會透過交叉驗證等手法,來檢查模型是否發生過度配適。讀者千萬不要搞錯先後順序喔:通常是先檢查訓練分數足夠,沒有低度配適,才開始檢查有沒有過度配適喔。
重點整理
1. 使用合適的常規化手法,並且搭配交叉驗證來決定常規化的強度,有助於我們選擇一個適當的模型,避免過度配適的問題。
2. 通常要先確認模型沒有發生低度配適,接著才開始檢查有沒有發生過度配適。
參考資料
1. Nishiuchi H. (2020). 機器學習的數學基礎:AI、深度學習打底必讀. 1st ed. Translated by 胡豐榮 and 徐先正. Taipei: Flag Technology Co. Ltd.
2. Akaishi M. (2020). 深度學習的數學地圖-用Python實作神經網路的數學模型. 1st ed. Translated by 章奇煒 and 王心薇. Taipei: Flag Technology Co. Ltd.
3. Yukinaga A. (2020). 決心打底!Python深度學習基礎養成. 1st ed. Translated by 吳嘉芳. Taipei: Flag Technology Co. Ltd.
關於作者
Chia-Hao Li received the M.S. degree in computer science from Durham University, United Kingdom. He engages in computer algorithm, machine learning, and hardware/software codesign. He was former senior engineer in Mediatek, Taiwan. His currently research topic is the application of machine learning techniques for fault detection in the high-performance computing systems.