---
# System prepended metadata

title: '4.7 Tuning Model Complexity: Bias / Variance Dilemma'
tags: [ML]

---

# 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。
