當我們費勁周章不斷調參來訓練模型時,不可避免地會思考一系列問題,模型好壞的評判標准是什么?改善模型的依據何在?何時停止訓練為佳?
要解決上述問題,我們需要引入偏差和方差這兩個概念,理解他們很重要,也是后續了解過擬合、正則化、提早終止訓練、數據增強等概念和方法的前提。
一、概念定義
- 偏差(bias):偏差衡量了模型的預測值與實際值之間的偏離關系。通常在深度學習中,我們每一次訓練迭代出來的新模型,都會拿訓練數據進行預測,偏差就反應在預測值與實際值匹配度上,比如通常在keras運行中看到的准確度為96%,則說明是低偏差;反之,如果准確度只有70%,則說明是高偏差。
- 方差(variance):方差描述的是訓練數據在不同迭代階段的訓練模型中,預測值的變化波動情況(或稱之為離散情況)。從數學角度看,可以理解為每個預測值與預測均值差的平方和的再求平均數。通常在深度學習訓練中,初始階段模型復雜度不高,為低方差;隨着訓練量加大,模型逐步擬合訓練數據,復雜度開始變高,此時方差會逐漸變高。
二、圖形定義
這是一張常見的靶心圖。可以想象紅色靶心表示為實際值,藍色點集為預測值。在模型不斷地訓練迭代過程中,我們能碰到四種情況:
- 低偏差,低方差:這是訓練的理想模型,此時藍色點集基本落在靶心范圍內,且數據離散程度小,基本在靶心范圍內;
- 低偏差,高方差:這是深度學習面臨的最大問題,過擬合了。也就是模型太貼合訓練數據了,導致其泛化(或通用)能力差,若遇到測試集,則准確度下降的厲害;
- 高偏差,低方差:這往往是訓練的初始階段;
- 高偏差,高方差:這是訓練最糟糕的情況,准確度差,數據的離散程度也差。
三、數學定義
我們從簡單的回歸模型來入手,對於訓練數據集S = {(xi , yi)},令yi = f(xi) + ε,假設為實際方程,其中ε是滿足正態分布均值為0,標准差為σ的值。
我們再假設預測方程為h(x) = wx + b,這時我們希望總誤差Err(x) = ∑i [yi - h(xi)]2 能達到最小值。給定某集合樣本(x, y),我們可以展開誤差公式,以生成用方差、偏差和噪音組合的方式。
在此之前,我們來引入一個輔助公式,令z為滿足正態分布的隨機值集合,再令z = E(z),即z 為z的平均值。
則E [(z - z)2] = E [z2 -2zz + z2]
= 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),問題很明顯,藍線模型很適合這套訓練數據,但如果用測試數據來檢驗模型,就會發現泛化能力差,准確度下降。
因此我們需要兩者之間的一個模型。
上圖這個藍色模型可認為是“恰好”的一個模型,既能跟訓練數據擬合,又離完美擬合保持一定距離,模型更具通用性,用測試數據驗證會發現准確度也不錯。
這個模型怎么來呢?我們可以采取很多手段,比如:
- 加大數據量,數據越多,自然其泛化能力也越強。但現實情況我們不能像大公司那樣擁有很多資源,那怎么辦?一種可行的辦法就是根據已有的數據做數據增強,比如旋轉、反轉、白增強等操作造出很多數據;
- 正則化(regularization,個人感覺中文翻譯未能表達英文原義,應該是表達約束、調整的意思),通常來說有dropout、L2、L1等正則化手段;
- 提早結束訓練,防止訓練過擬合化。
五、結論
由此看出,深度學習不但是一門科學,更像是一門藝術。我們選擇一個好的模型,不斷調整參數來跨越欠擬合,避免過擬合,建立心目中理想的“恰好”模型。這看上去更像一個不斷升級打怪的經驗之學,需要我們多多練習,但其背后支撐的數學原理也是需要我們去好好理解和掌握。