1. 程式人生 > >偏差(Bias)和方差(Variance)——機器學習中的模型選擇

偏差(Bias)和方差(Variance)——機器學習中的模型選擇

模型效能的度量

在監督學習中,已知樣本 $(x_1, y_1),(x_2, y_2),...,(x_n, y_n)$,要求擬合出一個模型(函式)$\hat{f}$,其預測值$\hat{f}(x)$與樣本實際值$y$的誤差最小。

考慮到樣本資料其實是取樣,$y$並不是真實值本身,假設真實模型(函式)是$f$,則取樣值$y=f(x)+\varepsilon$,其中$\varepsilon$代表噪音,其均值為0,方差為$\sigma^2$。

擬合函式$\hat{f}$的主要目的是希望它能對新的樣本進行預測,所以,擬合出函式$\hat{f}$後,需要在測試集(訓練時未見過的資料)上檢測其預測值與實際值$y$之間的誤差。可以採用平方誤差函式(mean squared error)來度量其擬合的好壞程度,即 $(y-\hat{f}(x))^2$

誤差期望值的分解

經過進一步的研究發現,對於某種特定的模型(下面還會進一步說明“特定模型”的含義),其誤差的期望值可以分解為三個部分:樣本噪音、模型預測值的方差、預測值相對真實值的偏差

公式為:$$E((y-\hat{f}(x))^2) = \sigma^2 + Var[\hat{f}(x)] + (Bias[\hat{f}(x)])^2$$其中 $Bias[\hat{f}(x)] = E[\hat{f}(x) - f(x)]$

即:誤差的期望值 = 噪音的方差 + 模型預測值的方差 + 預測值相對真實值的偏差的平方先看一個圖比較直觀。

圖1 誤差期望值的分解

使用特定模型對一個測試樣本進行預測,就像打靶一樣。

靶心(紅點)是測試樣本的真實值,測試樣本的y(橙色點)是真實值加上噪音,特定模型重複多次訓練會得到多個具體的模型,每一個具體模型對測試樣本進行一次預測,就在靶上打出一個預測值(圖上藍色的點)。所有預測值的平均就是預測值的期望(較大的淺藍色點),淺藍色的圓圈表示預測值的離散程度,即預測值的方差。

所以,特定模型的預測值 與 真實值 的誤差的 期望值,分解為上面公式中的三個部分,對應到圖上的三條橙色線段:預測值的偏差、預測值的方差、樣本噪音。

理解誤差期望值

回顧一下,期望值的含義是指在同樣的條件重複多次隨機試驗,得到的所有可能狀態的平均結果(更詳細的定義參考維基百科-期望值)。對於機器學習來說,這種實驗就是我們選擇一種演算法(並選定超引數),以及設定一個固定的訓練集大小,這就是同樣的條件,也就是上文所說的特定的模型。然後每次訓練時從樣本空間中選擇一批樣本作為訓練集,但每次都隨機抽取不同的樣本,這樣重複進行多次訓練。每次訓練會得到一個具體的模型,每個具體模型對同一個未見過的樣本進行預測可以得到預測值。不斷重複訓練和預測,就能得到一系列預測值,根據樣本和這些預測值計算出方差和偏差,就可以幫助我們考察該特定模型的預測誤差的期望值,也就能衡量該特定模型的效能。對比多個特定模型的誤差的期望值,可以幫助我們選擇合適的模型。

進一步理解誤差期望值

我們設定真實模型 $f(x) = x + 2sin(1.5x)$,函式影象如下圖曲線所示。樣本值 y 就在真實值的基礎上疊加一個隨機噪音 N(0, 0.2)。

圖2 模型及樣本

現在我們用線性函式來構建模型,訓練樣本來自隨機採集的一組 y,經過多次重複,可以得到一系列具體的線性模型,如下圖中那一組聚集在一起的黑色直線所示,其中間有一條紅色線是這一組線性函式的平均(期望值)。這就是特定模型(線性函式)在同樣條件下(每次取20個樣本點)重複多次(得到50個線性函式)。

根據生成的50個具體的線性函式來考察該線性模型的預測效能,選取一個樣本點,比如選擇 x=5 時(下圖中紅色豎線位置),真實值 f(x) = 6.876,樣本 $y \approx 6.876$,y 與 f(x) 的偏差體現在圖片右下方的噪音(noise) 部分。紅色線性函式在 x=5 位置的值是這50個線性函式在該位置的期望值,黑色直線在 x=5 位置的一系列值的分佈則反映了它們的方差(Variance)。50個預測的期望值與真實值 f(x) 之間的距離體現了偏差(Bias)。(參考下圖右下部分的 variance 和 bias)。

圖3 偏差、方差計算

總之,在機器學習中考察 偏差 和 方差,最重要的是要在不同資料集上訓練出一組特定模型,這些模型對一個測試樣本進行預測,考察這一組預測值的方差和偏差。

誤差的期望值公式推導

誤差的期望值公式為什麼可以分解為 噪音、偏差和方差,可以從數學上推導得來。先準備幾個推導中需要用到的公式,為了方便,我們簡化符號,記作$$f = f(x) \ hat{f} = hat{f}(x)$$

  1. 方差的定義和計算公式

$$Var[X] = E[X^2] - (E[X])^2$$即 隨機變數X的方差 = X平方的期望 - X期望的平方(參考 維基百科-方差),移項後得到$$E[X^2] = Var[X] + (E[X])^2 \qquad(1)$$

  1. 測試樣本y的期望值

因為真實值$f$是一個確定的值,所以$$E[f] = f$$另外根據上文測試樣本值和噪音的定義$$y=f+varepsilon \E[varepsilon]=0 \Var[varepsilon] = sigma^2$$所以$E[y] = E[f+\varepsilon] = E[f] = f$,即$$E[y] = f \qquad(2)$$

  1. 測試樣本y的方差

$$ Var[y] = E[(y - E[y])^2] = E[(y-f)^2] \\ = E[(f+\varepsilon-f)^2] = E[\varepsilon^2] \\ = Var[\varepsilon] + (E[\varepsilon])^2 = \sigma^2 $$

即 $$Var[y] = \sigma^2 \qquad(3)$$

  1. 樣本噪音與預測值無關

因為 $\varepsilon$ 與 $\hat{f}$ 不相關,所以$$E[\varepsilon\hat{f}] = E[\varepsilon]E[\hat{f}] \qquad(4) $$(參考維基百科-期望值)

  1. 誤差的期望

公式推導如下

$$ E[(y-\hat{f})^2] = E[y^2 + \hat{f}^2 - 2y\hat{f}] \\ = E[y^2] + E[\hat{f}^2] - E[2y\hat{f}] \\ = \Big(Var[y] + (E[y]))^2 \Big) + \Big(Var[\hat{f}] + (E[\hat{f}])^2 \Big) - E[2(f+\varepsilon) \hat{f}] \\ = Var[y] + Var[\hat{f}] + (E[y])^2 + (E[\hat{f}])^2 - E[2f\hat{f} +2\varepsilon \hat{f}] \\ = Var[y] + Var[\hat{f}] + f^2 + (E[\hat{f}])^2 - E[2f\hat{f}] -E[2\varepsilon \hat{f}] \\ = Var[y] + Var[\hat{f}] + f^2 + (E[\hat{f}])^2 - 2fE[\hat{f}] -2E[\varepsilon]E[\hat{f}] \\ = Var[y] + Var[\hat{f}] + \Big(f^2 + (E[\hat{f}])^2 - 2fE[\hat{f}] \Big) \\ = Var[y] + Var[\hat{f}] + (f - E[\hat{f}])^2 \\ = \sigma^2 + Var[\hat{f}] + (Bias[\hat{f}])^2 $$

最後得到的三個項分別是:噪音的方差、模型預測值的方差、預測值相對真實值的偏差的平方。

偏差 - 方差的選擇

理想中,我們希望得到一個偏差和方差都很小的模型(下圖左上),但實際上往往很困難。

選擇相對較好的模型的順序:方差小,偏差小 > 方差小,偏差大 > 方差大,偏差小 > 方差大,偏差大。方差小,偏差大 之所以在實際中排位相對靠前,是因為它比較穩定。很多時候實際中無法獲得非常全面的資料集,那麼,如果一個模型在可獲得的樣本上有較小的方差,說明它對不同資料集的敏感度不高,可以期望它對新資料集的預測效果比較穩定。

選擇假設集合

很多時候,機器學習所面臨的問題,我們事先並不確切的知道要擬合的是一個怎樣形式的函式,是幾次多項式,是幾層神經網路,選擇樣本的哪些特徵,等等,都缺乏先驗的知識來幫助我們選擇。我們在一個基本上無窮大的假設(模型)集合中,憑藉有限的經驗進行嘗試和選擇。

機器學習有多種演算法,以及每種演算法中經常又可以選擇不同的結構和超引數。它們所覆蓋的假設集合有不同的大小。所以,選擇一種演算法(包括其結構和超引數),就是選擇(限定)了一個假設集合。我們期望真實模型存在於我們所選定的假設集合範圍內,並且該假設集合越小越好。

下面兩幅圖粗略表現了不同假設集合的關係

不同的假設集合

正則化項對假設集合的影響

我們思考一下監督學習的整個流程,其實就是一個不斷縮小假設集合的過程。從大的方面看可以分為兩個步驟。

  1. 選擇一個假設集合,包括模型及相關結構、超引數等。
  2. 使用樣本資料進行訓練,使該模型儘量擬合樣本,就是從上面選定的假設集合中找到一個特定的假設(模型)。

上面第一個步驟中,我們可以選擇一些不同的假設集合,然後通過考察它們的偏差方差,對各假設集合的效能進行評估。比如多項式的次數,上圖假設真實模型是一個二次多項式,那麼線性函式集合中的模型會欠擬合(方差低,偏差太高),高次多項式集合中的模型容易過擬合(方差太高,偏差低),二項式集合中的模型能夠有較好的折中(方差和偏差都相對較低),總體誤差最小。

偏差 - 方差權衡

下面幾個案例來自 Andrew Ng 的公開課《Machine Learning》。

  1. 多項式迴歸

多項式迴歸模型,我們可以選擇不同的多項式的次數,對模型的影響如下。

多項式次數對模型偏差方差的影響

多項式次數 模型複雜度 方差 偏差 過/欠擬合
欠擬合
適度
過擬合

多項式次數對訓練誤差/測試誤差的影響

多項式次數 模型複雜度 訓練誤差 測試誤差
  1. 正則化項

新增正則化項(Regularization)相當於對模型引數施加懲罰,壓縮了引數的範圍,限制了模型的複雜度,從而有助於緩解模型過擬合問題,選擇不同的 正則化項權重λ 對模型的影響如下。

正則化項對模型偏差方差的影響

正則化項權重λ 模型複雜度 方差 偏差 過/欠擬合
欠擬合
適度
過擬合

正則化項對訓練誤差/測試誤差的影響

正則化項權重λ 模型複雜度 訓練誤差 測試誤差
  1. 樣本數量

一般來說,我們希望樣本數量越多越好。隨著樣本數量增加,訓練誤差會逐漸增長,測試誤差會逐漸降低。

樣本數量對訓練誤差/測試誤差的影響

模型方差較高時,增加樣本會有幫助

模型偏差較高時,增加樣本幫助不大

  1. 神經網路

神經網路結構

神經網路結構 模型複雜度 方差 偏差 過/欠擬合
欠擬合
適度
過擬合

K-Fold 交叉驗證

計算偏差、方差可以幫助評估不同的假設集合,不過它需要較多的樣本,以及重複多次擬合模型,需要比較多的資料和計算資源(參考上面圖3)。

實際中,比較常用的方法是K-Fold交叉驗證。它與標準的偏差、方差計算過程不太一樣。簡單的說,就是將訓練樣本分成k份,每次取其中一份作為驗證集,另外 k-1 份作訓練集。這樣進行 k 次訓練得到 k 個模型。這 k 個模型對各自的驗證集進行預測,得到 k 個評估值(可以是誤差、準確率,或按某種規則計算的得分等等)。注意到每個樣本參與了 k-1 個模型的訓練(導致模型之間存在關聯),每個樣本有一次被用作測試(沒有用另外的從未見過的測試集資料),所以這與標準的計算過程是不一樣的。

不過,K-Fold依然是很有價值的模型效能評估。可以直接針對這 k 個模型的評估值(誤差、準確率,或按某種規則計算的得分等等)進行分析,取其平均可以體現該模型的預測準確性。對這 k 個值,比如k個誤差值,計算方差,可以反應該模型的預測誤差的離散程度,即後續用於未見過的樣本資料時,模型的預測準確性是否穩定。

參考