Bias vs Variance - 世上是沒有完美的Model

相信讀者們在看我寫的文章經常提到Overfit, Regularization等對普通人頗為陌生的字眼,未必能一時理解其意思,甚至覺得一頭霧水。所以我會在這篇文章集中逐一詳解其意思,這些字眼都是描述在建立Supervised Learning的模型時所遇上的問題,和應該作出什麼的取捨或修正。文中免不了數式來解釋,如果看不懂的,可以直接忽略的,筆者會加上淺白的文字和圖像解釋。

這一切都是取捨
香港寸金尺土,那麼用作樓價作為例子,假設我們不知道新樓盤的價錢,但至少我們知道樓盤的實用面積($x$),利用這個資料來估計該物業的價錢($y)$,當然我們可以build一些model,用的可以是最簡單的Regression至更複雜的Neural Network,但當最後選出那個模型是最好的時候,應該要怎樣選擇呢?首先要先明白兩個重要的指標: Bias及Variance。它們均是用作量度誤差,因為學習的過程是Supervised的,我們本來事先已經知道真正答案,即是y-label,只要對比預測出來和真實答案便可得出Error,也就是:
$$error = (真實答案 - 我們的模型預測結果)^2=(y - \hat{f}(x))^2$$

而我們建立出來的模型其實是approximate出來,只是近似不是真正的,因此在f(x)上加上hat:$\hat{f}(x)$以表示我們建立的模型。

兩邊加上Expectation後:
$$E(error) = E(y - \hat{f}(x)))^2$$

假設這個世界有真正的模型, $f(x)$,再加上一些White Noise, $\epsilon$ (平均值為0, Variance為\sigma, 常態分怖的隨機數字),便可以解答到真實的答案,即是$y = f(x) + \epsilon$。只要把剛才的公式作一一些手腳,經過大量的運算,最後變成得出另一條有著其他意思的公式:

$$E(error) = (f(x) - E(\hat{f}(x))^2 + Var(\hat{f}(x)) + \sigma = Bias + Variance + Noise$$

Bias及Variance一同出現鳥!這裡顯而易見,預期的誤差其實是由三個部分造成,Bias的多少是由正確答案和我們的模型得出的答案有多不同,愈高的Bias代表我們模型預測出的結果有愈大的出入,相反,愈低的Bias暗示預測非常接近。讀者們可能心在想一個問題,明明Bias已經是非常直觀地解釋誤差度,為何還要弄個Variance出來了?不用著急,在介紹Variance這個頑皮的傢伙前,先看看以下實用面積和樓價的分佈(注:數據是隨機生成,不是真實的):


明顯地,實用面積似乎和價錢有一個正比的關係,那麼用最簡單的Linear Regression試試看吧,畫完一條最Fit的直線發現,感覺不是預測的模型不是太準,對比正確答案好像有一定出入,Bias都很高的說,這時候我們可以判斷這個模型是Underfitting。



那麼再用一個更複雜的模型,把Bias減到最少吧!結果呢......好像有啲過火了,不過這裡的Bias已經是零,預測的結果跟正確的模型幾乎一樣的,但是有種說不出的違和感!?沒錯,這個模型雖然有很高的準確度,但很可惜再好的準確度都只是測量在Training Data上,如果我換上另一套數據,準確度便立刻減少,也就是Training Error很少,但換上Test data後,Testing Error卻很大,這個現象就是筆者經提起的Overfitting模型過度學習的問題,讓你以為自己模型已經天衣無缝,其實你經已遇上這陷阱。那麼,Variance己經被掀開神秘面紗,它是對訓練數據(Training Data)的變化有多敏感而造成的誤差,愈大的Variance可解作這個模型,也就是Generalization Error愈高,應付一般的情況的能力較差。下圖的模型雖然Bias為0,但Variance卻是最大的,所以並不是理想的模型。





如何取捨Bias, Variance

答案非常簡單,四個字:中庸之道。Model 同時擁有最少的Bias和Variance,就是最好的選擇。如下圖,預測結果和正確答案雖有出入,但至少換上另一套數據後,會有很高的Variance出現。


說就很簡單,但實際操作應該是要如何呢?首先我們要懂得發現Overfitting的問題,畫圖似乎不是一個好方法,因為現實上有很多因素,很多的$x$。因此,我們要用檢查Training Error和Testing Error,看看有沒有Overfitting的問題。好了,那麼發現到了問題,應該怎樣做呢?眼利的讀者們想必看到剛才是因用上了更複雜的模型令Variance很高,沒有錯!如果有數個模型在手,用上沒有簡單點的模型可以了。但如果針對同一個模型著手,何謂複雜或簡單呢?籠統來説是取決於模型有多少的Input Variable,有多少的Parameter。在Overfitting的時候,利用簡單一點的模型,就是選擇較少的Features / Factor來作為Input,或者是減少的參數的數目,如Neural Network選用較少的hidden units,boosting用上較少的estimator。

另外Regularization是一個十分重要的技巧來解防止Overfitting,不得不提,各位可以視Regularization為一個懲罰機制,規範着模型的複雜度,Regularization當中很多方法,有L1, L2或是用Bayesian Prior等,由於Bayesian是對統計中更高階的推論方法,對初學者不易理解,需要花另一大篇幅解釋其原理和應用,以及要對各種distribution有一定的認識,所以此文只重點介紹L1及L2 Regularization。這兩個兄弟為Cost Function加上懲罰機制,請不要忘記Cost Function是量化模型的誤差值,愈高的值代表這個模型表現很差,若果模型的參數愈多的話,或者某參數很"獨食"不懂團結就是力量這硬道理。它的罪狀也就是Loss Function (aka Cost Function)因而熷加,被選上最好的模型的機會也大大減少,所以這個方法一般都能懲罰較多的參數的模型。
$$Loss \:Function = arg min (\sum{error} + regularization\:intensity \times \sum{|w_i|^n})$$

從以上公式可見,更高的regularization intensity有著更顯住的懲罰後果,所以用上一些容易Overfitting的Supervised Learning Algorithm或是很多的Input,可以試著調整更高的強度。如果n=1的話,正正是L1 Regularization,如果用在Linear Regression的話,就是著名的LASSO!若果n=2,即是L2 Regularization,如果模型用上Regression,那麼變成了Ridge Regression。從下圖,橙色的橢圓代表代表的Loss,其圓心的$\beta$在Least Square的計算下是最小的。另一邊廂,可以看見藍色的圖形,同樣地中心點的$\beta$在Original上,代表最少的Loss,受惠最簡單模型。當橙色和藍色一起考慮的時候,就是它們要作出妥協的時候,只有相交點中的$\beta$值能讓它們同時減低最少的損失,這個原理限制住參數$\beta$的值。另外,我們也很容易從圖中得知L1和L2的分別,而最佳的$\beta$值也必定在藍色圖形上,所以比起L1的正方形,當遇上其他形狀的橙色橢圓,$\beta$的值變化會較少,較為穏定。



相關圖片
Source: Alvaro Neuenfeldt Júnior (2017), The Two-Dimensional Rectangular Strip Packing Problem


其實不單止Linear Regression,其他的Supervised Learning的模型如Logistic Regression和Support Vector Machines等也能做Regularization,在Loss Function加上Regularization Term,調整強度便成事了,所以在遇上Overfitting,不妨用這個方法減少Variance的誤差。來到最後,相信這篇文章能幫助各位如何調整參數,更有效地決定選擇什麼的模型。亦希望借此引以為鑑,模型不是萬能的,世上也沒有完美的模型,只有不停作不同的取捨下,獲得最理想的模型。





Comments