理解指數(shù)加權(quán)平均數(shù)(Understanding exponentially weighted averages)
上個筆記中梯醒,我們講到了指數(shù)加權(quán)平均數(shù),這是幾個優(yōu)化算法中的關(guān)鍵一環(huán),而這幾個優(yōu)化算法能幫助你訓(xùn)練神經(jīng)網(wǎng)絡(luò)。本筆記中暮的,我希望進(jìn)一步探討算法的本質(zhì)作用。
回憶一下這個計算指數(shù)加權(quán)平均數(shù)的關(guān)鍵方程淌实。
v_t=βv_(t-1)+(1-β)θ_t
比如β=0.9的時候冻辩,得到的結(jié)果是紅線,如果它更接近于1拆祈,
比如β=0.98恨闪,結(jié)果就是綠線,如果β小一點放坏,如果是0.5咙咽,結(jié)果就是黃線。
我們進(jìn)一步地分析淤年,來理解如何計算出每日溫度的平均值钧敞。
同樣的公式,v_t=βv_(t-1)+(1-β)θ_t
使β=0.9麸粮,寫下相應(yīng)的幾個公式溉苛,所以在執(zhí)行的時候,t從0到1到2到3弄诲,t的值在不斷增加愚战,為了更好地分析,我寫的時候使得t的值不斷減小齐遵,然后繼續(xù)往下寫寂玲。
首先看第一個公式,理解v_100是什么梗摇?我們調(diào)換一下這兩項(0.9v_99 0.1θ_100)拓哟,v_100=0.1θ_100+0.9v_99。
那么v_99是什么留美?我們就代入這個公式(v_99=0.1θ_99+0.9v_98),所以:
v_100=0.1θ_100+0.9(0.1θ_99+0.9v_98)伸刃。
那么v_98是什么谎砾?你可以用這個公式計算(v_98=0.1θ_98+0.9v_97),把公式代進(jìn)去捧颅,所以:
v_100=0.1θ_100+0.9(0.1θ_99+0.9(0.1θ_98+0.9v_97))景图。
以此類推,如果你把這些括號都展開碉哑,
所以這是一個加和并平均挚币,100號數(shù)據(jù)亮蒋,也就是當(dāng)日溫度。
我們分析v_100的組成妆毕,也就是在一年第100天計算的數(shù)據(jù)慎玖,但是這個是總和,包括100號數(shù)據(jù)笛粘,99號數(shù)據(jù)趁怔,97號數(shù)據(jù)等等。畫圖的一個辦法是薪前,假設(shè)我們有一些日期的溫度润努,所以這是數(shù)據(jù),這是t示括,所以100號數(shù)據(jù)有個數(shù)值铺浇,99號數(shù)據(jù)有個數(shù)值,98號數(shù)據(jù)等等垛膝,t為100鳍侣,99,98等等繁涂,這就是數(shù)日的溫度數(shù)值拱她。
然后我們構(gòu)建一個指數(shù)衰減函數(shù),從0.1開始扔罪,到0.1×0.9秉沼,到0.1×〖(0.9)〗^2,以此類推矿酵,所以就有了這個指數(shù)衰減函數(shù)唬复。
計算v_100是通過,把兩個函數(shù)對應(yīng)的元素全肮,然后求和敞咧,用這個數(shù)值100號數(shù)據(jù)值乘以0.1,99號數(shù)據(jù)值乘以0.1乘以〖(0.9)〗^2辜腺,這是第二項休建,以此類推,所以選取的是每日溫度评疗,將其與指數(shù)衰減函數(shù)相乘测砂,然后求和,就得到了v_100百匆。
結(jié)果是砌些,稍后我們詳細(xì)講解,不過所有的這些系數(shù)(0.10.1×0.90.1×(0.9)^2 0.1×(0.9)^3…),相加起來為1或者逼近1存璃,我們稱之為偏差修正仑荐,下個筆記會涉及。
最后也許你會問纵东,到底需要平均多少天的溫度粘招。實際上〖(0.9)〗^10大約為0.35,這大約是1/e篮迎,e是自然算法的基礎(chǔ)之一男图。
大體上說,如果有1-ε甜橱,在這個例子中逊笆,ε=0.1,所以1-ε=0.9岂傲,(1-ε)^(1/ε)約等于1/e难裆,大約是0.34,0.35镊掖,換句話說乃戈,10天后,曲線的高度下降到1/3亩进,相當(dāng)于在峰值的1/e症虑。
又因此當(dāng)β=0.9的時候,我們說仿佛你在計算一個指數(shù)加權(quán)平均數(shù)归薛,只關(guān)注了過去10天的溫度谍憔,因為10天后,權(quán)重下降到不到當(dāng)日權(quán)重的三分之一主籍。
相反习贫,如果,那么0.98需要多少次方才能達(dá)到這么小的數(shù)值千元?
(0.98)^50大約等于1/e苫昌,所以前50天這個數(shù)值比1/e大,數(shù)值會快速衰減幸海,所以本質(zhì)上這是一個下降幅度很大的函數(shù)祟身,你可以看作平均了50天的溫度。
因為在例子中物独,要代入等式的左邊袜硫,ε=0.02,所以1/ε為50议纯,我們由此得到公式父款,我們平均了大約1/(1-β)天的溫度溢谤,這里ε代替了1-β瞻凤,也就是說根據(jù)一些常數(shù)憨攒,你能大概知道能夠平均多少日的溫度,不過這只是思考的大致方向阀参,并不是正式的數(shù)學(xué)證明肝集。
最后講講如何在實際中執(zhí)行,還記得嗎蛛壳?我們一開始將v_0設(shè)置為0杏瞻,然后計算第一天v_1,然后v_2衙荐,以此類推捞挥。
現(xiàn)在解釋一下算法,可以將v_0忧吟,v_1砌函,v_2等等寫成明確的變量,不過在實際中執(zhí)行的話溜族,你要做的是讹俊,一開始將v初始化為0,然后在第一天使v:=βv+(1-β)θ_1煌抒,然后第二天仍劈,更新v值,v:=βv+(1-β)θ_2寡壮,以此類推贩疙,有些人會把v加下標(biāo),來表示v是用來計算數(shù)據(jù)的指數(shù)加權(quán)平均數(shù)诬像。
再說一次屋群,但是換個說法,v_θ=0坏挠,然后每一天芍躏,拿到第t天的數(shù)據(jù),把v更新為v:=βv_θ+(1-β)θ_t降狠。
指數(shù)加權(quán)平均數(shù)公式的好處之一在于对竣,它占用極少內(nèi)存,電腦內(nèi)存中只占用一行數(shù)字而已榜配,然后把最新數(shù)據(jù)代入公式否纬,不斷覆蓋就可以了,正因為這個原因蛋褥,其效率临燃,它基本上只占用一行代碼,計算指數(shù)加權(quán)平均數(shù)也只占用單行數(shù)字的存儲和內(nèi)存
當(dāng)然它并不是最好的,也不是最精準(zhǔn)的計算平均數(shù)的方法膜廊。如果你要計算移動窗乏沸,你直接算出過去10天的總和,過去50天的總和爪瓜,除以10和50就好蹬跃,如此往往會得到更好的估測。
但缺點是铆铆,如果保存所有最近的溫度數(shù)據(jù)蝶缀,和過去10天的總和,必須占用更多的內(nèi)存薄货,執(zhí)行更加復(fù)雜翁都,計算成本也更加高昂。
所以在接下來的筆記中谅猾,我們會計算多個變量的平均值荐吵,從計算和內(nèi)存效率來說,這是一個有效的方法赊瞬,所以在機器學(xué)習(xí)中會經(jīng)常使用先煎,更不用說只要一行代碼,這也是一個優(yōu)勢巧涧。
現(xiàn)在你學(xué)會了計算指數(shù)加權(quán)平均數(shù)薯蝎,你還需要知道一個專業(yè)概念,叫做偏差修正谤绳,下一個筆記我們會講到它占锯,接著你就可以用它構(gòu)建更好的優(yōu)化算法,而不是簡單直接的梯度下降法缩筛。