當咱們費勁周章不斷調參來訓練模型時,不可避免地會思考一系列問題,模型好壞的評判標準是什麼?改善模型的依據何在?什麼時候中止訓練爲佳?學習
要解決上述問題,咱們須要引入誤差和方差這兩個概念,理解他們很重要,也是後續瞭解過擬合、正則化、提前終止訓練、數據加強等概念和方法的前提。測試
這是一張常見的靶心圖。能夠想象紅色靶心表示爲實際值,藍色點集爲預測值。在模型不斷地訓練迭代過程當中,咱們能碰到四種狀況:大數據
咱們從簡單的迴歸模型來入手,對於訓練數據集S = {(xi , yi)},令yi = f(xi) + ε,假設爲實際方程,其中ε是知足正態分佈均值爲0,標準差爲σ的值。spa
咱們再假設預測方程爲h(x) = wx + b,這時咱們但願總偏差Err(x) = ∑i [yi - h(xi)]2 能達到最小值。給定某集合樣本(x, y),咱們能夠展開偏差公式,以生成用方差、誤差和噪音組合的方式。翻譯
在此以前,咱們來引入一個輔助公式,令z爲知足正態分佈的隨機值集合,再令z = E(z),即z 爲z的平均值。3d
則E [(z - z)2] = E [z2 -2zz + z2]blog
= E [z2] - 2E [z]z + z2 注:E[z] = z,由於z是一個均值,其偏差便是本身資源
= E [z2] - 2zz + z2 深度學習
= E [z2] - z2 數學
能夠獲得一個輔助公式: E [z2] = E [(z - z)2] + z2 ,最後讓咱們來開展偏差公式:
E [y - h(x)]2 = E [y2 - 2yh(x) + h(x)2]
= E [y2] - 2E[y] E[h(x)] + E[h(x)2]
= E [(y - y)2] + y2 - 2E[y]h(x) + E [(h(x) - h(x))2] + h(x)2
= E [(y - (fx))2] + f(x)2 - 2f(x)h(x) + E [(h(x) - h(x))2] + h(x)2
= E [(h(x) - h(x))2] + (h(x) - f(x))2 + E[(y - (fx))2]
= variance + bias2 + noise
注:y = E[y] = E[f(x) + ε] = E[f(x)] + E[ε] = E[f(x)] = f(x),ε均值已經被假定爲0,對於具體的x,其E[f(x)] = f(x)
因而可知,偏差 = 方差 + 誤差2 + 噪音 組成,通常來講,隨着模型複雜度的增長,方差會逐漸增大,誤差會逐漸減少,見下圖:
誤差的變化趨勢相信你們都容易理解,隨着模型的不斷訓練,準確度不斷上升,天然誤差逐漸下降。但方差的變化趨勢卻不易理解,爲什麼訓練初始階段是低方差,訓練後期易是高方差?
注意方差的數學公式爲:E [(h(x) - h(x))2] ,也就是說爲每一個預測值與預測均值差的平方和再求平均數,能夠表現爲一種波動變化,低方差意味低變化,高方差意味高變化。那咱們能夠經過訓練的不一樣階段來直觀感覺方差的變化:
上圖爲訓練初始階段,咱們的模型(藍線)對訓練數據(紅點)擬合度不好,是高誤差,但藍線近似線性組合,其波動變化小,套用數學公式也可知數值較小,故爲低方差,這個階段也稱之爲欠擬合(underfitting),須要加大訓練迭代數。
上圖爲訓練的後期階段,可明顯看出模型的擬合度很好,是低誤差,但藍線的波動性很是大,爲高方差,這個階段稱之爲過擬合(overfitting),問題很明顯,藍線模型很適合這套訓練數據,但若是用測試數據來檢驗模型,就會發現泛化能力差,準確度降低。
所以咱們須要二者之間的一個模型。
上圖這個藍色模型可認爲是「剛好」的一個模型,既能跟訓練數據擬合,又離完美擬合保持必定距離,模型更具通用性,用測試數據驗證會發現準確度也不錯。
這個模型怎麼來呢?咱們能夠採起不少手段,好比:
由此看出,深度學習不可是一門科學,更像是一門藝術。咱們選擇一個好的模型,不斷調整參數來跨越欠擬合,避免過擬合,創建心目中理想的「剛好」模型。這看上去更像一個不斷升級打怪的經驗之學,須要咱們多多練習,但其背後支撐的數學原理也是須要咱們去好好理解和掌握。