天天看點

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

目錄

1 指數權重移動平均

2 TensorFlow中滑動平均模型   

3 偏差修正

1 指數權重移動平均

        指數權重移動平均exponentially weighted moving average (EWMA),又叫指數移動平均exponential moving average (EMA)。

  • 算術平均(權重相等)—>權重平均(權重不等)—>移動平均(大約是隻取最近的N次資料進行計算)—> 批量歸一化(BN)及各種優化算法的基礎
  • EMA:是以指數式遞減權重的移動平均,各數值的權重影響力随時間呈指數式遞減,時間越靠近目前時刻的資料權重影響力越大

        對于序列Y,EMA公式為:

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

        這裡,α是一個介于(0,1)之間的權重系數;Yt是目前時刻t的值;St是目前時刻序列Y的指數移動平均值(EMA);S(t-1)是上一個時刻Y的EMA。

        由該公式可以看出,EMA的一個好處就是,可以由目前時刻的Y值和上一時刻的EMA值,計算出目前時刻的EMA值,相比需要知道所有序列值,才能計算出的算術平均值,EMA節省了很多存儲空間,且計算簡單。

        将EMA公式對Y序列展開,如下:

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

        可以看出離目前時刻 t 越遠的Y值,其權重(1-α)成指數型衰減。

        從這裡可以看出EMA名字的來源。   

2 TensorFlow中滑動平均模型   

        TensorFlow中的滑動平均模型使用的是滑動平均(Moving Average)算法,又稱為指數權重移動平均算法(exponenentially weighted average),這也是ExponentialMovingAverage()函數的名稱由來。

        先來看一個簡單的例子,這個例子來自吳恩達老師的DeepLearning課程。

        首先這是一年365天的溫度散點圖,以天數為橫坐标,溫度為縱坐标,你可以看見各個小點分布在圖上,有一定的曲線趨勢,但是并不明顯:

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

        接着,如果我們要看出這個溫度的變化趨勢,很明顯需要做一點處理,也即是我們的主題,用滑動平均算法處理。

        首先給定一個值 v0,然後我們定義每一天的溫度是 a1,a2,a3·····,接着,我們計算出v1,v2,v3····來代替每一天的溫度,也就是上面的a1,a2,a3。

        EWMA 的表達式如下: 

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

        上式中 θt 為時刻 t 的實際溫度;系數 β 表示權重下降的速率,其值越小下降的越快;vt 為 t 時刻 EWMA 的值。

        在下圖中有兩條不同顔色的線,分别對應着不同的 β 值。

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

        當 β=0.9 時,有 

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

,對應着圖中的紅線,此時雖然曲線有些波動,但總體能拟合真實資料

  當 β=0.98β=0.98 時,有 

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

,對應着圖中的綠線,此時曲線較平,但卻有所偏離真實資料

  在 t=0 時刻,一般初始化 v0=0 ,對 EWMA 的表達式進行歸納可以将 t 時刻的表達式寫成:    

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

        從上面式子中可以看出,數值的權重系數随着時間呈指數下降。在數學中一般會以 

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

 來作為一個臨界值,小于該值的權重系數的值不作考慮,接着來分析上面 β=0.9 和 β=0.98 的情況。

        當 β=0.9 時,

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

 約等于 

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

 ,是以認為此時是近10個數值的權重平均。

  當 β=0.98 時,

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

約等于 

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

,是以認為此時是近50個數值的權重平均。這種情況也正是移動權重平均的來源。

        具體的分析如下圖所示:

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

        然後說一下這個滑動平均模型和深度學習有什麼關系:通常來說,我們的資料也會像上面的溫度一樣,具有不同的值,如果使用滑動平均模型,就可以使得整體資料變得更加平滑——這意味着資料的噪音會更少,而且不會出現異常值。但是同時β太大也會使得資料的曲線右移,和資料不拟合。需要不斷嘗試出一個β值,既可以拟合資料集,又可以減少噪音。

        滑動平均模型在深度學習中還有另一個優點:它隻占用極少的記憶體。當你在模型中計算最近十天(有些情況下遠大于十天)的平均值的時候,你需要在記憶體中加載這十天的資料然後進行計算,但是指數權重平均值約等于最近十天的平均值,而且根據vt = v(t-1) * β + at * (1-β),你隻需要提供at這一天的資料,再加上v(t-1)的值和β值,相比起十天的資料這是相當小的資料量,同時占用更少的記憶體。

3 偏差修正

        在初始化 v0=0 時實際上會存在一個問題。具體的如下圖所示:

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

        從上圖中可以看出有一條綠色和紫色的曲線,都是對應于 β=0.98 時的曲線。理想狀況下應該是綠色的曲線,但當初始化 v0=0 時卻會得到紫色的曲線,這是因為初始化的值太小,導緻初期的數值都偏小,而随着時間的增長,初期的值的影響減小,紫色的曲線就慢慢和綠色的曲線重合。我們對公式做一些修改:

指數權重移動平均1 指數權重移動平均2 TensorFlow中滑動平均模型   3 偏差修正

        當 t 很小時,分母可以很好的放大目前的數值;當 t 很大時,分母的數值趨于1,對目前數值幾乎沒有影響。

   EWMA 主要是被應用在動量優化算法中,比如Adam算法中的一階矩和二階矩都采用了上面修改後的EWMA算法。

指數權重移動平均法(EWMA):https://www.pianshen.com/article/6077318422/

AI數學基礎21——指數權重移動平均:https://www.jianshu.com/p/c1c5c5be02dc

指數權重移動平均法(EWMA):https://www.cnblogs.com/jiangxinyang/p/9705198.html

繼續閱讀