1. 誤差
試想一下,你辛辛苦苦訓練了一個自認爲超級牛逼的神經網絡,但是一到測試集上驗證,發現結果並不符合預期,是不是就開始懷疑人生了呢?爲什麼不對呢?預測結果與真實結果的誤差到底是哪裏來的呢?
誤差的來源無非兩部分:bias + variance,所謂Bias,指的是訓練出的模型已經非常非常努力了,拼命想擬合真實的模型,但是由於種種原因,真的擬合不完全,比如缺失了部分關鍵特徵(就好像有個人沒有了雙腳,你卻非要讓他直立行走一樣,太南南南了);而Variance往往指的是在訓練集上表現比較好,但是一到測試集就廢掉,這個有點像不會變通的機器人,你把它訓練的可以走任何直線,但是一旦遇到彎路就會碰壁。從數學上理解,我們可以使用不同的數據集訓練模型,得出一系列的f,如果得到的f在相同的預測集上得到的結果都差不多,但是跟真實值還是有一定差距,那這就是Bias大,Variance小;如果得到的結果相差比較大,但都圍繞着真實值變化,那就是Bias小,Variance大;如果variance和bias都很大,那哪裏來的自信覺得自己訓練的模型很牛逼!不同情況如下圖示例:
Bias大的主要原因包括:特徵不足;模型複雜度較低(試想用一個線性模型模擬一個非線性函數)
Variance大的主要原因包括:模型過於複雜;樣本量較小(試想用2個點去擬合一個二次函數,不同的樣本得出的結果相差較大,但用20個點就能很好擬合;另一種理解,讓樣本中包含更多信息,讓其覆蓋的解空間更大,比如機器人走直路的例子,樣本量小的話,可能樣本中只有走直路的情況,而沒有走彎路的情況)
使用不同的多項式函數預測f,可能得到的誤差如下(橫座標爲多項式冪次):
當模型比較簡單時(多樣式冪次小於3),主要誤差來源於Bias,此時模型欠擬合;當模型比較複雜時(多項式冪次大於4),主要誤差來源於Variance,此時模型過擬合。
爲了解決過擬合,可以增加正則化
2. 正則化
2.1 正則化
正則化,即在損失函數公式中增加預測參數的範數因子,在減少原Loss的基礎上,同時使範數最小,極端情況下,範數最小的情況爲所有參數爲0,即所謂的“無招勝有招”,當然這是不可能的,但是正則化想要達到的目的也並非全部參數都爲0,而是部分參數爲0,增加模型的稀疏性。
數學上的解釋,正則化相當於對參數增加Laplace先驗,理解如下:
引入正則化後的損失函數如下圖所示:
假設損失函數爲連續可導函數,在任一點處,損失函數存在一階近似:
假設參數向量的參數個數爲2,則損失函數近似函數和正則化項的等高線如下所示:
圖中,紅色直線代表原Loss的等高線,虛線爲範數的等高線,如果想要最小,則的選擇應該是,此時函數有稀疏解。
關於正則化爲什麼可以解決過擬合,理解如下:
正則化後,得到的是稀疏解,有效地降低了原模型的複雜度,可以避免由於模型複雜導致的過擬合。
2.2 正則化
類比正則化,正則化在原Loss中增加了範數,相當於對參數增加了先驗分佈。
圖中,紅線代表原的一階近似等高線,藍線代表正則化的等高線,可以看出,當兩條等高線相切時,取得最小的,此時,模型並非稀疏解。
關於正則化爲什麼可以解決過擬合,理解如下:
增加正則化後,會使得參數的絕對值儘可能小,可以避免某些參數對於模型的絕對控制作用,增強模型的泛化能力。(個人理解,主要解決由於樣本量少,不能覆蓋訓練和測試所有情況的過擬合)
例如,機器人走路控制模型中,原中走直線的參數起決定控制作用,導致在測試集的彎路測試中預測結果較差,但是增加了正則化後,可以適當減少其控制力,進而增強模型的泛化能力,使得在彎路預測中結果不至於太差。