加權移動平均法:是對觀察值分別給予不同的權數,按不同權數求得移動平均值,並以最后的移動平均值為基礎,確定預測值的方法。
采用加權移動平均法,是因為觀察期的近期觀察值對預測值有較大影響,它更能反映近期變化的趨勢。
指數移動加權平均法:是指各數值的加權系數隨時間呈指數式遞減,越靠近當前時刻的數值加權系數就越大。
下面是一年 $365$ 天的溫度散點圖,以天數為橫坐標,溫度為縱坐標,可以看到各個小點分布在圖上,有一定的曲線趨勢,但是並不明顯。
指數加權平均的表達式如下:
$$v_{t} = \beta v_{t - 1} + (1 - \beta)\theta_{t}$$
其中,$\theta_{t}$ 代表第 $t$ 天的溫度值,$\beta$ 表示加權下降的速率,其值越小下降的越快,$v_{t}$ 為第 $t$ 天的移動加權平均值。
令 $v_{0} = 0$,將這個式子展開得:
$$v_{t} = \beta v_{t - 1} + (1 - \beta)\theta_{t} \\
= \beta\bigg [ \beta v_{t - 2} + (1 - \beta)\theta_{t-1} \bigg ] + (1 - \beta)\theta_{t} \\
= \beta^{2}v_{t - 2} + \beta(1 - \beta) \theta_{t-1} + (1 - \beta)\theta_{t}\\
= \beta^{2}\bigg [ \beta v_{t - 3} + (1 - \beta)\theta_{t-2} \bigg ] + \beta(1 - \beta) \theta_{t-1} + (1 - \beta)\theta_{t} \\
= \beta^{3} v_{t - 3} + \beta^{2}(1 - \beta)\theta_{t-2} + \beta(1 - \beta) \theta_{t-1} + (1 - \beta)\theta_{t} \\
\cdots \\
= \beta^{t}v_{0} + \beta^{t-1}(1 - \beta)\theta_{1} + \beta^{t-2}(1 - \beta) \theta_{2} + \cdots + (1 - \beta)\theta_{t} \\
= (1 - \beta) \sum_{i=1}^{t}\beta^{t-i}\theta_{i}$$
可以看到,計算第 $t$ 天的移動加權平均值 $v_{t}$ 其實就是第 $1$ 天到第 $t$ 天每天溫度的加權和,每一天溫度的權重系數為
$$(1 - \beta)\beta^{t-i}$$
$(1-\beta)$ 是一個常數,由 $(1-\beta)^{t-i}$ 可知:天數越靠近 $t$,$t - i$ 越小,$(1-\beta)^{t-i}$ 越大,即那一天溫度對應的權值越大。
$\beta$ 越大,后項收到前項的影響越大,越平滑,但是適應新變化更加困難。
重要性質:一般而言,$v_{t}$ 是前 $\frac{1}{1-\beta}$ 天溫度的指數加權平均值。易知極限:
$$\lim_{\varepsilon \rightarrow 0}\left ( 1 - \varepsilon \right )^{\frac{1}{\varepsilon}} = \frac{1}{e}$$
令
$$1 - \beta = \varepsilon$$
因為 $\beta$ 是在 $0-1$ 之間,所以 $1-\beta$ 可以認為趨於 $0$,於是有
$$\beta^{\frac{1}{1 - \beta}} \approx \frac{1}{e}$$
也就是說第 $t - \frac{1}{1 - \beta}$ 天的溫度對 $v_{t}$ 的影響已經不足 $\frac{1}{e}$ 了,在這之前的溫度影響都可以忽略了。
回到最初的那幅圖,如果我們要看出這個溫度的變化趨勢,很明顯需要做一點處理,我們用指數加權移動平均來平滑,取 $\beta = 0.9$,
然后計算出每個 $v_{t}$ 來代替 $\theta_{t}$,把所有的 $v$ 計算完之后畫圖,紅線就是 $v$ 的曲線:
紅色曲線第 $t$ 天的溫度就約等於前 $10$ 天溫度(藍色散點圖所記錄)的平均值。現在增大 $\beta$,將其值改為 $0.98$,那么 $\frac{1}{1-\beta}$ = 50,
按照加權平均的性質,新的 $v_{t}$ 就代表前 $50$ 天的平均溫度,求出所有 $v$ 值畫出曲線,如圖綠線所示:
可以明顯看到綠線比紅線的變化更遲,紅線達到某一溫度,綠線要過一陣子才能達到相同溫度。因為綠線是前 $50$ 天的平均溫度,變化就會
更加緩慢,而紅線是最近 $10$ 天的平均溫度,只要最近 $10$ 天的溫度都是上升,紅線很快就能跟着變化。
再看看另一個極端情況:$\beta$ 等於 $0.5$,意味着 $v_{t}$ 約為最近兩天的平均溫度,曲線為如下黃線:
可以看出黃色曲線和原本的溫度很相似,但曲線的波動幅度也相當大!
滑動平均模型和深度學習有什么關系:
通常來說,我們的數據也會像上面的溫度一樣,具有不同的值,如果使用滑動平均模型,就可以使得整體數據變得更加平滑——這意味着數據的噪音會更少,
而且不會出現異常值。但是同時 $\beta$ 太大也會使得數據的曲線右移,和數據不擬合。需要不斷嘗試出一個 $\beta$ 值,既可以擬合數據集,又可以減少噪音。
滑動平均模型在深度學習中還有另一個優點:它只占用極少的內存。當你在模型中計算最近十天(有些情況下遠大於十天)的平均值的時候,你需要在內存
中加載這十天的數據然后進行計算,但是指數加權平均值約等於最近十天的平均值,而且根據遞推公式,你只需要提供 $\theta_{t}$ 這一天的數據,再加上 $v_{t-1}$
的值和 $\beta$ 值,相比起十天的數據這是相當小的數據量,同時占用更少的內存。
偏差修正:當 $\beta$ 等於 $0.98$ 的時候,還是用回上面的溫度例子,曲線實際上不是像綠線一樣,而是像紫線:
注意到在紫線剛剛開始的時候,曲線的值相當的低,這是因為在一開始的時候並沒有前 $50$ 天的數據,而是只有寥寥幾天的數據,相當於少加了幾十天
的數據,所以 $v_{t}$ 的值很小,這和實際情況的差距是很大的,也就是出現的偏差。修正方法是:
$$v_{t} = \frac{\beta v_{t - 1} + (1 - \beta)\theta_{t}}{1 - \beta^{t}}$$
隨着 $t$ 增加,$\beta^t$ 接近於 $0$,所以當 $t$ 很大的時候,偏差修正幾乎沒有作用,因此當 $t$ 較大的時候,紫線和綠線重合了。不過在開始學習
階段,偏差修正可以更好地預測溫度。