# 4.7 Tuning Model Complexity: Bias / Variance Dilemma # 背景 前幾節裡,我們都在討論: 如果我們想要知道一個 population 的 distribution,基於無法取得整個 population 的資訊這個原因,我們會去取一個 sample $X = \{x^t,r^t\}_{t=1}^N$,試圖代表整個 population。 有了 sample 以後,我們接著想要找出一個 estimator(一個 function)$g(x)$,來去 fit 這個 sample 裡的 $N$ 個 data points。 但是 $g(x)$ 到底長怎麼樣 —— 裡面的 parameters $\theta$(代表一個 set of parameters)到底是什麼我們不清楚,所以我們要想辦法去估計 $\theta$ 的值,並且透過一些方法去計算選出來的 $\theta$ 值到底好不好。 > 前一節筆記「[4.6 Regression](https://hackmd.io/@pipibear/HyGiwbGO0)」就在做這件事。 但是在前一節裡,我們在使用 error functions 來評估 $\theta$ 選擇的好壞時,我們都是在加總一整個 sample 裡所有 sample points 所產生的 error,例如 SSE: \begin{equation} E(\theta|X) = \sum_{t=1}^N (r^t - g(x^t|\theta))^2 \end{equation} 而在這個小節裡,不一樣的是我們去看我們的 estimator 在一個特定的點 $x$ 所產生的 expected square error,也就是說去看我們的 model 的 local performance。 為什麼要用這樣的做法,是因為透過分析 point-wise 的 expected squared error,我們可以知道一個 model 是否 overfit 或 underfit。 也就是說,本節的目標就是要藉由接下來的內容,來判斷一個 model 之於我們的 data 背後隱含的 function,到底是不是過於複雜(overfit)或過於簡單(underfit)。 ![image](https://hackmd.io/_uploads/B1djXJrdR.png) --- # 單一 sample 產生的平均 error 下圖在計算的: \begin{equation} E[(r - g(x))^2|x] \end{equation} 代表的是當我們的 input 為 $x$ 時,透過我們的 estimator 預測的值 $g(x)$ 和實際的值 $r$ 之間差距的平方,平均來說會是多少。 ![image](https://hackmd.io/_uploads/B16nHRE_A.png) > 關於圖中 $4.17$ 的推導可參考筆記「[4.3 Evaluating an Estimator: Bias and Variance](https://hackmd.io/@pipibear/BkS_CMuS0)」。 從上圖我們發現,平均的 square error 會由兩個部分組成,一個是無法避免的由 noise 所產生的 error,這部分跟我們的 $g()$ 如何選擇無關;因此我們針對後半部分會因為 $X, g()$ 而改變的 squared error 再進一步討論。 # 多個 samples 產生的平均 error 如圖中所說,為了不受到我們的 training set 的選擇而影響對一個 estimator 好壞的判斷,我們不是只去考慮單一個 $X$,而是去考慮所有可能的 datasets 再去取平均。 也就是取 $M$ 個 samples $X_i$,每個 $X_i$ 裡都有 $N$ 個 data points,而且這些 samples 每個都是從某個 joint density 為 $p(r,x)$ 的 population 中所取得的。每個 $X_i$ 長這樣: \begin{equation} X_i = \{x^t_i,r^t_i\}_{t=1}^N = \{(x^1_i,r^1_i),(x_i^2,r^2_i),...,(x^N_i,r^N_i)\} \end{equation} 我們令這些 samples 所成的集合為: \begin{equation} \chi = \{X_i\} = \{X_1,X_2,...,X_M\} \end{equation} 那我們把 squared error 再取 expectation over $\chi$,就會是: ![image](https://hackmd.io/_uploads/HygYAyIuA.png) 結果會由 bias 和 variance 組成,我們分別來看這兩部分的意義。 ## bias / variance ### 意義 bias: ![image](https://hackmd.io/_uploads/HyBzye8O0.png) variance: ![image](https://hackmd.io/_uploads/BkLrJeLOC.png) ### 例子 稍微詳細一點的舉例: ![image](https://hackmd.io/_uploads/SJtVqlIO0.png) > 這個例子裡我們假設 $f(),\epsilon$ 已知。 > > 也就是我們能夠知道描述背後 population 的 distribution 的 deterministic function 長怎樣,讓我們把 input 丟進去就能產生正確的 output(不考慮 noise 的情況下。) > 而知道 noise $\epsilon$ 的 distribution,再和我們的 $f(x)$ 結合,就讓我們也可以知道有 noise 的情況下真正的 output。 > > $\rightarrow$ 但這當然在現實中不可能做到。 ### complexity 對 bias / variance 的影響 接著,我們再舉個例子看看兩種 models 不同的 complexity 會對 bias 和 variance 有什麼影響: ![image](https://hackmd.io/_uploads/Hy_2je8_0.png) > 第二種將 estimator 令為 $r^t$ 平均的方式會降低 bias 卻會提升 variance,那整體來說會比較好還是比較差呢? > > 普遍來說在圖中的這種情況下,bias 降低的量會比 variance 增加的量還要多,所以整體的 error 會減少。 ### bias / variance dilemma 最後再來看看一個 polynomial regression 的例子: ![image](https://hackmd.io/_uploads/r1zA3xLOA.png) > (a): 描述背後 distribution 的真正 function $f(x) = 2\sin(1.5x)$,但是可以看見圖中的 data points 沒有都在這條曲線上,因為我們有 noise $\epsilon \sim N(0,1)$ >> 也就是 noise 的 distribution 為 normal,with mean $=0$, variance $=1$ >> > 接著我們取五個 samples,每個 sample 含 $20$ 個 data points,即: > > $\chi = \{X_i\}_{i=1}^5, \quad X_i = \{x_i^t,r_i^t\}_{t=1}^{20} \ \forall i=1,...,5$ > > 接著在圖(b)(c)(d)中,每條實線都是我們根據一個 sample 所建立的 estimator,共五個 samples,所以每張圖有五個 estimator;此外,每張圖中有一條虛線,是這五個 estimator 的平均,也就是 $\bar{g}(x) = \frac{1}{5}\sum_{i=1}^5 g_i(x)$。 > > 而這三張圖的差異在於 model 的 complexity,(b)是我們用 order $1$(也就是一條直線)去 fit 這些點,(c)(d)則分別是 function 次方為 $3,5$。 當我們的 model order 增加時,dataset 有一點改變就會造成 fitted polynomials 更大的變動,也就是 variance 會增加。 > variance 是在算 $g_i(x) - \bar{g}(x)$ 的平均,所以當我們很精確地去 fit 每個點時,每個 $g_i(x)$ 都盡可能地去貼近取出來的 sample 中的點,於是就和相對 general 的 $\bar{g}(x)$ 間的差距就越大(因為 $\bar{g}(x)$ 是取這些不同 samples 所分別產生的 estimator 平均),因此等同於 variance 越大。 但是就像我們前面講的,比較 comlpex 的 model 平均來說會是對 underlying function 的一個 better fit,因此 bias 會變小。 這樣的特性我們稱作 <font color = "snake">bias / variance dilemma</font>,且這樣的現象並不只是針對 polynomial regression 才成立,而是對任何的 machine learning system 都成立。 總結就是: :::warning 為了降低 bias,我們的 model 應該要夠有彈性,但是風險就是 high variance;如果 variance 要維持很低的狀態,那我們可能就沒辦法得到一個 good fit,bias 就會高。 ::: $\rightarrow$ 因此我們的 optimal model 就是在 bias 和 variance 間的 best trade-off。 另外,如果有 bias,代表我們的 model class 並不包含 solution,稱作 <font color = "snake">underfitting</font>;如果有 variance,代表我們的 model class 太過於 general 以至於會去 learn noise,稱作 <font color = "snake">overfitting</font>。 如果 $g()$ 和 $f()$ 在同個 hypothesis class,舉例來說,他們是有相同 order 的 polynomial,那麼 $g()$ 就是個 unbiased estimator,且++隨著 models 的數量增加,estimated bias 就會減少++。 $\rightarrow$ 這件事就是選擇正確的 model 會產生的 error-reducing effect(在第二章裡我們稱作 <font color = "snake" >inductive bias</font>。) > 關於 inductive bias,還有上面的 underfitting、overfitting 其實在之前的筆記「[2.7 Model Selection and Generalization](https://hackmd.io/@pipibear/S14QwU4VC)」都講過了,忘記的話可以參考。 至於 variance,它也會 depend on training set 的大小,++當 sample 的大小增加時,因為 sample 所產生的 variability 就會變小++。 最終的總結: :::warning 要讓 error 小,我們要有適當的 inductive bias(為了讓 bias 小),然後有足夠大的 dataset 來讓 model 的 variability 能夠受限於 data。 ::: Note: :::warning 當 ++variance 大++的時候 bias 小,代表 ++$\bar{g}(x)$ 是一個好的 estimator++。 $\rightarrow$ 所以如果我們想要 error 小,我們可以取很多的 high-variance models,然後用它們的平均來當作我們的 estimator。 ::: > 假設 variance 大,那麼 bias 小,即 $\frac{1}{N}\sum_{t=1}^N[\bar{g}(x^t) - f(x^t)]^2$ 小,代表我們的 estimator $\bar{g}()$ 對每個點所做出的 prediction 和 $f()$ 所產生的真正 output 差距總和小,因此也就代表 $\bar{g}()$ 的預測結果平均來說和正確的 output 相近,所以我們就認為它是個好的 estimator。