機器學習基本觀念:Bias-Variance Tradeoff

1 前言
模型訓練完之後,我們會用測試資料集來衡量它的效能,也就是計算模型的 Error。這個 Error 其實由兩個部分組成:Bias 與 Variance。理想上兩個都愈小愈好,但現實是「魚與熊掌不可兼得」,降低 Bias 往往會讓 Variance 變高,反過來壓低 Variance 又會把 Bias 拉上去。
本文會說明什麼是模型的 Bias 與 Variance、兩者為什麼會互相拉扯,以及模型該訓練到什麼程度才算取得平衡。
閱讀之前,建議先對「什麼是機器學習」、「機器學習的模型、訓練與推論」以及「機器學習五步驟」這幾個主題有基本的概念(本系列前幾篇文章都有介紹)。
- Bias 是模型的輸出與正確答案之間的誤差。Bias 大代表模型沒學到輸入與輸出的關係,屬於 Underfitting。
- Variance 是模型針對不同輸入資料時,輸出的變異程度。Variance 大代表模型連訓練資料中的雜訊都背了起來,屬於 Overfitting。
- 兩者會隨模型複雜度往相反方向移動,所以無法同時最小化。
- 真正要追求的不是把某一項壓到最低,而是讓 Total Error 落在 U 型曲線的谷底。
2 Model 的 Bias
拿到訓練資料集之後,我們就會開始用這些資料訓練模型。所謂訓練,講白了就是不斷調整模型裡的參數,讓資料丟進去之後,模型的輸出愈接近正確答案 (Label) 愈好。換個角度看,模型就是一個 Function,負責把輸入資料對應 (Mapping) 到某個輸出。
用一個很小的訓練資料集來說明。資料集裡只有 5 個樣本,每個樣本都有「身高」與「體重」兩個數值。我們希望把「身高」輸入模型,模型吐出「體重」,也就是用身高預測體重。
每個樣本用 (x, y) 表示,x 是身高,y 是體重:
- (160, 60)
- (163, 70)
- (165, 72)
- (168, 75)
- (170, 70)
把這 5 個樣本畫在 2 維平面上,長這樣:

假設我們用這個資料集訓練出一個模型,也就是下圖中的那條紅線:

這時候會發現一件事:輸入身高 = 163,模型輸出的體重並不是 70。輸入 165、168、170 也一樣,模型給的答案都跟正確答案有落差。
模型的輸出與正確答案之間的誤差,就稱為 Bias,也就是下圖中灰色框框標示出來的距離:

當模型的 Bias 很大,代表它要嘛訓練得不夠徹底,要嘛複雜度太低,總之就是沒有從訓練資料集裡學到該學的東西,根本沒搞懂輸入與輸出之間的關係。這種模型拿到一筆身高資料,可能會給出一個錯得離譜的體重。我們會說這個模型 Underfitting。
3 Model 的 Variance
看到這裡,你八成會想到一個解法:「那我用一個超級複雜的模型,一路訓練到每一筆樣本都預測得分毫不差不就好了?」照這個思路做下去,你大概會得到這樣的模型:

這條曲線看起來完美,訓練資料集裡的每一筆數據它都命中。問題出在沒看過的資料上:輸入身高 = 169,模型的輸出可能落在 72 附近;輸入身高 = 170,模型輸出 70;輸入身高 = 175,模型的輸出卻可能掉到 60。
明明身高只差幾公分,模型的輸出卻上下劇烈跳動。針對不同的輸入資料,模型輸出的變化(變異性)分佈就稱為 Variance。
Variance 很大,代表模型把訓練資料集裡的所有東西都硬吞了進去,連「雜訊」也一起學。以上面那條曲線為例,一般來說身高愈高、體重也會愈重,所以第 5 個樣本 (170, 70) 相對於前面的趨勢就可以視為雜訊。模型把這筆雜訊也學起來之後,就會得出一個荒謬的結論:「身高愈高體重愈重,但只要超過 168,體重就會突然暴跌」。
說穿了,這種模型同樣沒有理解輸入與輸出之間的關係,只是把每一筆樣本的對應關係死背下來。一旦餵給它一筆從沒見過的身高,它照樣可能給出錯得離譜的答案。這種模型我們稱為 Overfitting。
4 Bias-Variance Tradeoff
到這裡兩個極端都出現了:模型太簡單會 Underfitting,太複雜會 Overfitting。這兩者跟 Bias、Variance 的對應關係,可以用下圖來理解:

模型非常「複雜」(參數量很大)時,有能力把訓練資料集裡的每個樣本都記下來,此時 Variance 很高、Bias 很低,也就是前面說的 Overfitting;模型過於「簡單」(參數量很小)時,根本學不到東西,此時 Bias 很高、Variance 很低,也就是 Underfitting。
回到開頭那句話:模型的 Total Error 同時包含 Bias 與 Variance。既然壓低其中一個就會推高另一個,我們就必須在兩者之間權衡,找出讓 Total Error 最低的那個點,這就是 Bias-Variance Tradeoff。
下圖把這件事畫得很清楚:

橫軸是模型複雜度,Bias 隨著複雜度上升而下降,Variance 則反過來上升,兩條線相加得到的 Total Error 呈現 U 型。只盯著 Bias 或只盯著 Variance 調整,都不會落在 U 型的谷底。實務上要找的,就是那個讓 Total Error 最小的甜蜜點。
5 結論
模型的 Error 由 Bias 與 Variance 組成:Bias 大代表模型沒學到輸入與輸出的關係,屬於 Underfitting;Variance 大代表模型把訓練資料連雜訊一起背了起來,屬於 Overfitting。兩者會隨模型複雜度往相反方向移動,所以調模型時真正該追的不是把某一項壓到最低,而是讓 Total Error 落在 U 型曲線的谷底。
下次在調整模型架構或訓練輪數時,不妨先判斷目前卡在哪一端:訓練誤差就降不下來,多半是 Bias 的問題;訓練表現好、測試表現差,那就是 Variance 在作祟。