模型性能的度量

在監督學習中,已知樣本 (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(橙色點)是真實值加上噪音,特定模型重複多次訓練會得到多個具體的模型,每一個具體模型對測試樣本進行一次預測,就在靶上打出一個預測值(圖上藍色的點)。所有預測值的平均就是預測值的期望(較大的淺藍色點),淺藍色的圓圈表示預測值的離散程度,即預測值的方差。

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

理解誤差期望值

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

進一步理解誤差期望值

再看一個更接近實際的例子,來自 Bias-Variance in Machine Learning

我們設置真實模型 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)
  2. 測試樣本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)
  3. 測試樣本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)

  4. 樣本噪音與預測值無關 因為 varepsilonhat{f} 不相關,所以 \ E[varepsilonhat{f}] = E[varepsilon]E[hat{f}] qquad(4) (參考維基百科-期望值)
  5. 誤差的期望 公式推導如下 \ E[(y-hat{f})^2] = E[y^2 + hat{f}^2 - 2yhat{f}] \ = E[y^2] + E[hat{f}^2] - E[2yhat{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[2fhat{f} +2varepsilon hat{f}] \ = Var[y] + Var[hat{f}] + f^2 + (E[hat{f}])^2 - E[2fhat{f}] -E[2varepsilon 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. 多項式回歸

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

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

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

2.正則化項

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

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

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

3.樣本數量

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

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

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

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

4.神經網路

K-Fold 交叉驗證

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

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

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

參考

維基百科 - Bias–variance tradeoff

Bias-Variance in Machine Learning

維基百科 - 方差

維基百科 - 期望值

《Pattern Recognition and Machine Learning》之 3.2. The Bias-Variance Decomposition

推薦閱讀:

查看原文 >>
相关文章