一、資料的量測以及其誤差
在機器學習中,我們會根據手上的資料來訓練一個模型,讓模型可以正確地找出資料之間的關係。比如訓練一個模型,讓它可以在一堆身高、體重資料裡頭,找出兩者之間的關係。接下來只要使用模型,並且知道一個人的身高,就可以預測此人的體重。
再接續往下描述之前,我們先定義幾個重要的名詞:真實值(True Value)代表目標對象的真正數值,比如說一個人真正的體重;觀測值(Observed Value)或標籤(Label)代表目標對象的量測結果,像是體重計顯示出來的數值;預測值(Predicted Value)代表模型根據輸入資料來對目標系統做出的預測結果,比如模型根據一個人的身高來預測這個人的體重。
一般來說,如果我們有良好的儀器以及正確的量測步驟,則真實值與標籤的差異並不會太大,但也不會一模一樣,因為量測的過程中,多少都會有一些量測誤差。而預測值跟標籤的差異,則要看模型的選用、訓練模型的方法等等是否正確。我們在機器學習的課程裡,即是要學習如何正確建立一個模型。
二、什麼是過度配適?
一個監督式學習(Supervised Learning)的模型,其任務是輸入一組特徵(Feature)給模型,接著模型要輸出對應的預測值。而判斷模型的好壞,其中一個指標是「模型的預測值跟標籤是否接近」,因此我們在訓練模型的過程中,會儘量讓模型的預測值接近標籤。但是前文有提到,標籤是真實值加上量測誤差。因此如果模型的預測值非常接近標籤,就代表模型不僅抓到特徵跟標籤的關係,還誤判了特徵跟量測誤差是有關連。事實上量測誤差是一個隨機的數值,跟特徵一點關係也沒有。
當模型誤以為訓練資料中的特徵跟量測誤差有關係時,就會產生一個很不好的結果:由於量測誤差是隨機的數值,因此新的資料(跟訓練資料不同)裡特徵與量測誤差,可能不存在模型從訓練資料中誤判的關係,最後造成模型對新資料的預測值跟標籤差距增加。
這種現象我們稱為過度配適,我們要儘量避免發生這個問題。
我們來看一個範例:有50筆身高、體重資料,如圖一的藍色點。從資料點可以立刻知道身高跟體重的關係絕對不是線性,不過看起來好像是冪次方關係。我們可以用以下數學公式來建立模型,並找出可能的冪次方關係:
從公式可以得知模型根據身高(x)、以及身高的冪次方,來對體重做出預測(y_predicted)。而我們訓練模型的目標是要盡可能減少預測值跟標籤(y_measured)的差異,可以用以下數學公式來做為模型的目標函數:
圖一中橘色實線為order=2模型的預測結果,我們可以發現此模型大略可以抓到身高跟體重之間的關係。如果我們把order設定更大,是不是可以得到更好的結果呢?圖一中的紅色實線為order=7的結果,可以發現因為我們加入更高的x次方,因此模型似乎有更多的能力去找出身高跟體重的關係。
為了方便比較模型的能力,我們可以計算模型的決定係數(Coefficient of Determination),數字越大代表模型越好,想要知道細節可以參考旗標出版的「跨領域學Python:資料科學基礎養成」第11章。從圖二可以看出來,當我們計算模型套用在訓練資料上後的決定係數,可以發現order越大分數越高。但是,將模型套在新的(另外50筆不同人的身高體重)資料,就會發現order越大分數越低。這時候有可能是過度配適的問題。
三、利用交叉驗證(Cross-Validation)發現過度配適
上述我們的做法是直接拿這50筆資料來訓練模型,那麼就沒有辦法在訓練過程中得知是否有發生過度配適,只能等到真正將模型拿去做預測時,發現怎麼預測結果都不太準,才推測可能是過度配適的問題。
不過剛剛我們有提到,體重的量測誤差是隨機,跟特徵(此範例中特徵為身高)一點關係也沒有。因此,如果模型抓出第1筆資料中身高跟體重量測誤差的關係,那模型是沒有辦法透過它找到的這個關係,以及第2筆資料的身高,來預測第2筆資料的體重量測誤差。我們可以將上述的概念擴充:先用前25筆資料來訓練模型,然後再用後25筆資料來驗證模型,如果後25筆的預測結果跟標籤有點差距,代表模型也許出現過度配適的狀況。
你可能會覺得「會不會只是運氣不好」,確實可能會有這種疑慮,因此我們可以把上述概念再擴大:把50筆資料分成5等份,第一輪用前4份訓練模型,然後用第5份驗證模型;第二輪用第1、2、3、5份訓練模型,然後用第4份驗證模型;如圖三所示我們可以重複此流程5次。如果5次驗證資料的平均分數不太理想,那很有可能就是過度配適的狀況。
上面這種方法:將訓練資料分成數等份,一次拿一份出來當驗證資料,其餘拿去訓練模型,重複數次,我們稱為交叉驗證(Cross-Validation)。
將交叉驗證的概念透用在我們的範例:將50筆身高體重資料,分成5等分後進行交叉驗證,並且將5個分數平均起來,可以得到圖三的結果。可以發現當模型有更高次方的x,訓練分數會一直上升,因為模型有更大的可能會誤判特徵跟體重量測誤差之間是有關係。但是驗證分數會先增加之後開始下降,主因是模型會把訓練資料中特徵與體重量測誤差之間的關係,套用在新的測試資料上,然而測試資料的特徵跟量測誤差並不存在模型找出來的關係,分數才會下降。因此我們可以更有把握說目前的問題是過度配適。
小編提醒:訓練資料的分數有不斷上升且達但我們要的水準,但是驗證資料的分數下降,才是過度配適喔!有些時候訓練資料分數就已經不夠,這時候要先思考模型是不是能力太弱,而非關注有沒有過度配適。
重點整理
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.