1. 程式人生 > >深度學習筆記(2):2.3|2.4 指數加權平均及理解 | 2.5 指數加權平均的偏差修正

深度學習筆記(2):2.3|2.4 指數加權平均及理解 | 2.5 指數加權平均的偏差修正

接下來介紹一些比梯度下降法計算速度更快的優化演算法。

2.3  指數加權平均

為了更好地介紹這些優化演算法,這裡先介紹一個概念----指數加權平均(exponentially weighted averages),全稱為指數加權移動平均(exponentially weighted moving averages)。

下圖展示的是倫敦一年溫度的例子,散點圖如下圖所示。

對該資料擬合曲線,假設V0=0,而估計每一天的溫度(Vt)等於前一天的溫度(Vt-1)和當天溫度(\theta_{t})的加權平均,為什麼說是指數加權平均呢?這是因為通過展開,把每一項都用V0和實際溫度表示,會發現V_{t}=\beta ^{t}V_{0}+(1-\beta )\beta ^{t-1}\theta _{1}+(1-\beta )\beta ^{t-2}\theta _{2}+...+\theta _{t},上例中\beta=0.9,再加上初始值為0的假設,則第t天的溫度就是前t天真實溫度的指數加權平均。根據這個方法,擬合出來的曲線如圖中紅線所示。

其實,V_{t}近似等於前\frac{1}{1-\beta }天真實溫度的平均值,比如在上例中,\beta=0.9,則紅色曲線的每一點近似為前10天真實溫度的平均值。若\beta取0.98,則擬合曲線中的每一點近似為前50天真實溫度的平均值,擬合曲線如圖中綠色所示,若\beta取0.5,則擬合曲線中的每一點近似為前2天真實溫度的平均值,擬合曲線如圖中黃色所示。

由上圖所示,我們發現\beta是一個很重要的引數,它決定了我們的擬合曲線是較平滑的還是比較粗糙的。在上述三個例子中,紅色擬合曲線是最好的,為什麼?根據V_{t}的表示公式,我們可以發現,\beta反應我們要估計的溫度對當天實際溫度的依賴程度,即\beta越小,模型對當天實際溫度依賴程度越高,模型的波動就更大,模型就更不穩定,因為比如\beta取0.5時,V_{t}僅僅由前兩天的真實溫度取值決定,所以波動更大。

實際問題中決定\beta的大小需要我們根據實際需求決定,比如我們需要模型能夠及時反映資料波動情況,那我們可以取較小的\beta值,希望模型對當前實際值依賴度更強。這也反應綠色擬合曲線的缺點,\beta值取0.98,過分依賴過去,使結果出現一定的延遲,不能及時反映現在的情況。所以紅色擬合曲線在這三種模型中是最好的,既能夠及時反映現在情況,模型波動也不是那麼大。

2.4  理解指數加權平均本質

指數加權平均本質上就是用來計算平均數的手段。

如上圖所示,我們利用公式將V_{100}拆分成真實溫度的指數加權平均,但是計算V_{100},我們到底需要之前多少天的資料呢?我們不可能計算過去的每一天,因為從拆分公式中也可以看到,距離當天越遠,過去溫度的權重呈指數級遞減。這裡有一個想法是權重低於1/e

的我們不再考慮。我們知道\varepsilon \rightarrow 0^{+}時,(1-\varepsilon)^{\frac{1}{\varepsilon}}\rightarrow 1/e,而當\beta取0.9時,即\varepsilon取0.1時,0.9^{10}\approx 1/e,所以此時每天的溫度估計大約是前10天溫度的平均值。

我們實際使用指數加權平均是怎麼操作呢?如下圖所示:

首先初始化V_{\theta }=0,然後每次讀取新的\theta _{t}代入式子V_{\theta }=\beta V_{\theta }+(1-\beta )\theta _{t}中去更新V_{\theta },整個過程只需要一條命令,佔用極少記憶體。這正是我們用指數加權移動平均代替直接計算平均數的原因,因為直接計算平均數需要儲存所有最近的資料,且計算效率不高,而指數加權移動平均雖然可能不是最好的或不是最精確的計算平均數的方法,但是從計算效率和記憶體使用情況上來看,在實際情況中我們更樂於使用後者去代替平均值的計算。

2.5  指數加權平均的偏差修正(bias correction)

指數加權平均的偏差修正是為了讓平均數的計算更加準確。具體實現方法如下圖所示:

上一節的例子中,我們介紹了當\beta取0.98時,我們的擬合曲線應該是綠色那條,但這樣說是不太準確的,因為在我們將V0初始化為0的條件下,我們擬合的曲線應該是紫色那條,而這兩條曲線區別就在前面一小部分。為什麼會有這樣結果呢?我們可以用例項計算一下,如上圖所示, 令V0=0,且\beta=0.98,我們可以得到V1、V2結果如上圖所示,假設前兩天的溫度都為40度,那麼通過V2的計算式我們可以推出V2約為8度,比綠線值低很多。

我們可以使用上圖中右側式子進行修正,即\frac{V_{t}}{1-\beta ^{t}},比如當t等於2時,V2就可以通過該式子進行修正。發現這個修正只對前部分資料作用較大,因為隨著t的增加,1-\beta ^{t}的值也會趨近於1。其實通過偏差修正,我們可以更加理解用指數加權移動平均來代替平均數計算的原因,因為修正後的溫度值實際上是之前溫度值的加權平均,比如在該例中,0.0196+0.02=0.0396。其實我們用數學方法也可以很容易證明,在該例中,就是\beta (1-\beta )+(1-\beta )=1-\beta ^{2}。所以當t很大時,對Vt而言,前t時刻所有實際溫度的權重和近似為1。

但其實在實際中,有些人在訓練中並不care前部分曲線的擬合情況,而是直接使用未修正的,這樣也可以,但是我們要明白偏差修正的意義,那就是為了讓平均數計算得更準確。