指数加权平均与RmsProp(转载+自己总结)以及Adagrad
一、指數加權平均(先說用途:抗噪聲擬合)
假設我們有一年365天的氣溫數據θ1,θ2,...,θ365\theta_1,\theta_2,...,\theta_{365}θ1?,θ2?,...,θ365?,把他們化成散點圖,如下圖所示:
這些數據有些雜亂,我們想畫一條曲線,用來表征這一年氣溫的變化趨勢,那么我們需要把數據做一次平滑處理。最常見的方法是用一個華東窗口滑過各個數據點,計算窗口的平均值,從而得到數據的滑動平均值。但除此之外,我們還可以使用指數加權平均來對數據做平滑。其公式如下:
{v0=0vk=βvk?1+(1?β)θk,k=1,2,...,365\begin{cases} v_0=0 \\ v_k=\beta v_{k-1}+(1-\beta)\theta_k, \quad k=1,2,...,365 \end{cases}{v0?=0vk?=βvk?1?+(1?β)θk?,k=1,2,...,365?
v就是指數加權平均值,也就是平滑后的氣溫。β\betaβ的典型值是0.9,平滑后的曲線如下圖所示:
對于vk=βvk?1+(1?β)θkv_k=\beta v_{k-1}+(1-\beta)\theta_kvk?=βvk?1?+(1?β)θk?,我們把它展開,可以得到如下形式:
可見,平滑后的氣溫,是以往每一天原始氣溫的加權平均值,只是這個權值是隨時間的遠近而變化的,離今天越遠,權值越小,且呈指數衰減。從今天往前數kkk天,它的權值為βk(1?β)\beta^k(1-\beta)βk(1?β)。
當β=11?β\beta=\frac{1}{1-\beta}β=1?β1?時,由于limβ→1βk(1?β)=e?1\underset{\beta \rightarrow 1}{lim}\beta^k(1-\beta)=e^{-1}β→1lim?βk(1?β)=e?1,權重已經非常小,更久遠一些的氣溫數據權重更小,可以認為對今天的氣溫沒有影響。
因此,可以認為指數加權平均計算的是最近11?β\frac{1}{1-\beta}1?β1?個數據的加權平均值。通常β\betaβ取值為0.9,相當于計算10個數的加權平均值。
但是按照原始的指數加權平均公式,還有一個問題,就是當k比較小時,其最近的數據太少,導致估計誤差比較大。
例如v1=0.9v0+(1?0.9)θ1=0.1θ1v_1=0.9 v_0 + (1-0.9)\theta_1=0.1\theta_1v1?=0.9v0?+(1?0.9)θ1?=0.1θ1?。
為了減小最初幾個數據的誤差,通常對于k比較小時,需要做如下修正:
vk=βvk?1+(1?β)θk1?βkv_k=\frac{\beta v_{k-1}+(1-\beta)\theta_k}{1-\beta^k}vk?=1?βkβvk?1?+(1?β)θk??
1?βk1-\beta^k1?βk是所有權重的和,這相當于對權重做了一個歸一化處理。下面的圖中,紫色的線就是沒有做修正的結果,修正之后就是綠色曲線。二者在前面幾個數據點之間相差較大,后面則基本重合了。
二、
RMSprop算法
對于上面的這個橢圓形的拋物面(圖中的橢圓代表等高線),沿著橫軸收斂速度是最快的,所以我們希望在橫軸(假設記為w1)方向步長大一些,在縱軸(假設記為w2)方向步長小一些。這時候可以通過RMSprop實現,迭代更新公式如下:
{s1=β1s1+(1?β1)dw12s2=β2s2+(1?β2)dw22\begin{cases} s_1=\beta_1 s_1+(1-\beta_1)dw_1^2 \\ s_2=\beta_2 s_2+(1-\beta_2)dw_2^2 \end{cases}{s1?=β1?s1?+(1?β1?)dw12?s2?=β2?s2?+(1?β2?)dw22??
{w1=w1?αdw1s1+?w2=w2?αdw2s2+?\begin{cases} w_1=w_1-\alpha \frac{dw_1}{\sqrt{s_1+\epsilon}} \\ w_2=w_2-\alpha \frac{dw_2}{\sqrt{s_2+\epsilon}} \end{cases}{w1?=w1??αs1?+??dw1??w2?=w2??αs2?+??dw2???
稍微吐槽下,這里就是用的符號點奇怪,其實沒啥,下面說下上面的定義:
s1這里利用了加權指數平均,dw就是以前常見的導數g,這里用了平方是因為想在后面一步的根號里面當做方差來用,所以這里有歸一的效果。s_1這里利用了加權指數平均,dw就是以前常見的導數g,這里用了平方是因為想在后面一步的根號里面當做方差來用,所以這里有歸一的效果。s1?這里利用了加權指數平均,dw就是以前常見的導數g,這里用了平方是因為想在后面一步的根號里面當做方差來用,所以這里有歸一的效果。
觀察上面的公式可以看到,s是對梯度的平方做了一次平滑。
在更新w時,先用梯度除以s1+?\sqrt{s_1+\epsilon}s1?+??,相當于對梯度做了一次歸一化。
如果某個方向上梯度震蕩很大,應該減小其步長;
而震蕩大,則這個方向的s也較大,除完之后,歸一化的梯度就小了;
如果某個方向上梯度震蕩很小,應該增大其步長;
而震蕩小,則這個方向的s也較小,歸一化的梯度就大了。
因此,通過RMSprop,我們可以調整不同維度上的步長,加快收斂速度。把上式合并后,RMSprop迭代更新公式如下:
{s=βs+(1?β)dw2w=w?αdws+?\begin{cases} s=\beta s+(1-\beta)dw^2 \\ w=w-\alpha\frac{dw}{\sqrt{s+\epsilon}} \end{cases}{s=βs+(1?β)dw2w=w?αs+??dw??
β\betaβ的典型值是0.999。公式中還有一個
?\epsilon?,這是一個很小的數,典型值是10?810^{-8}10?8。
{s1=β1s1+(1?β1)dw12s2=β2s2+(1?β2)dw22\begin{cases} s_1=\beta_1 s_1+(1-\beta_1)dw_1^2 \\ s_2=\beta_2 s_2+(1-\beta_2)dw_2^2 \end{cases}{s1?=β1?s1?+(1?β1?)dw12?s2?=β2?s2?+(1?β2?)dw22??
{w1=w1?αdw1s1+?w2=w2?αdw2s2+?\begin{cases} w_1=w_1-\alpha \frac{dw_1}{\sqrt{s_1+\epsilon}} \\ w_2=w_2-\alpha \frac{dw_2}{\sqrt{s_2+\epsilon}} \end{cases}{w1?=w1??αs1?+??dw1??w2?=w2??αs2?+??dw2???
觀察上面的公式可以看到,s是對梯度的平方做了一次平滑。
在更新w時,先用梯度除以s1+?\sqrt{s_1+\epsilon}s1?+??,相當于對梯度做了一次歸一化。
如果某個方向上梯度震蕩很大,應該減小其步長;而震蕩大,則這個方向的s也較大,除完之后,歸一化的梯度就小了;如果某個方向上梯度震蕩很小,應該增大其步長;而震蕩小,則這個方向的s也較小,歸一化的梯度就大了。
因此,通過RMSprop,我們可以調整不同維度上的步長,加快收斂速度。把上式合并后,RMSprop迭代更新公式如下:
{s=βs+(1?β)dw2w=w?αdws+?\begin{cases} s=\beta s+(1-\beta)dw^2 \\ w=w-\alpha\frac{dw}{\sqrt{s+\epsilon}} \end{cases}{s=βs+(1?β)dw2w=w?αs+??dw??
β\betaβ的典型值是0.999。公式中還有一個?\epsilon?,這是一個很小的數,典型值是10?810^{-8}10?8。
上面都是轉載,說下自己的理解:
w等式右側的第二項變成了歸一項,那么在快要衰減至穩定值時,肯定相對于其他算法而言更快。例如w=0.5,wterminal=0.51,這個時候RMSprop由于振蕩幅度小,迭代至誤差容忍范圍內(0.51±0.05)肯定比其他優化算法更快,因為其他算法的振蕩幅度大啊,所以其他算法不好收斂啊。w等式右側的第二項變成了歸一項,那么在快要衰減至穩定值時,肯定相對于其他算法而言更快。例如w=0.5,w_{terminal}=0.51,這個時候RMSprop由于振蕩幅度小,迭代至誤差容忍范圍內(0.51±0.05)肯定比其他優化算法更快,因為其他算法的振蕩幅度大啊,所以其他算法不好收斂啊。w等式右側的第二項變成了歸一項,那么在快要衰減至穩定值時,肯定相對于其他算法而言更快。例如w=0.5,wterminal?=0.51,這個時候RMSprop由于振蕩幅度小,迭代至誤差容忍范圍內(0.51±0.05)肯定比其他優化算法更快,因為其他算法的振蕩幅度大啊,所以其他算法不好收斂啊。
所謂:有招必有破綻,RmsProp缺點是什么呢?
如果我的初始值w1=0.1,假如w1的最終值是0.9如果我的初始值w_1=0.1,假如w_1的最終值是0.9如果我的初始值w1?=0.1,假如w1?的最終值是0.9,由于振蕩幅度小,所以RMSprop迭代的速度就會比其他算法慢,這個時候,就需要調整α\alphaα以及β\betaβ的數值了。
#-------------------------------------------------Adagrad算法-------------------------------------------------------------------------
Adagrad
Adagrad算法能夠在訓練中自動的對learning rate 進行調整,對于出現頻率較低參數采用較大的α\alphaα更新;
相反,對于出現頻率較高的參數采用較小的α\alphaα更新。因此,Adagrad非常適合處理稀疏數據。
我們設gt,ig_{t,i}gt,i?為第t輪第i個權重參數的梯度,即:
gt,i=▽θJ(θi)g_{t,i}=\triangledown _{\theta}J(\theta_i)gt,i?=▽θ?J(θi?).
因此,SGD中參數更新的過程可寫為:
θt+1,i=θt,i?α?gt,i\theta_{t+1,i}=\theta_{t,i}-\alpha·g_{t,i}θt+1,i?=θt,i??α?gt,i?
Agagrad在每輪訓練中對每個參數θi\theta_iθi?的學習率進行更新,參數更行公式如下:
θt+1,i=θt,i?αGt,ii+?gt,i\theta_{t+1},i=\theta_{t,i}-\frac{\alpha}{\sqrt{G_{t,ii}+\epsilon}}g_{t,i}θt+1?,i=θt,i??Gt,ii?+??α?gt,i?
其中:
Gt∈Rd×dG^t∈\mathbb{R}^{d \times d}Gt∈Rd×d為對角陣,
每個對角線位置(i,i)為對應參數θi\theta_iθi?
從第1輪到第t輪梯度的平方和。
?\epsilon?是平滑項,用于避免分母為0,一般取值1e-8.
Adagrad的缺點是在訓練的中后期,分母上梯度平方的累加將會越來越大,從而梯度趨近于0,
使得訓練提前結束。
Reference:
[1]神經網絡優化算法:梯度下降法、Momentum、RMSprop和Adam
[2]優化方法總結:SGD,Momentum,AdaGrad,RMSProp,Adam
?
總結
以上是生活随笔為你收集整理的指数加权平均与RmsProp(转载+自己总结)以及Adagrad的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何一次性复制带有markdown/ma
- 下一篇: Adadelta原文解读