日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

指数加权平均与RmsProp(转载+自己总结)以及Adagrad

發(fā)布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 指数加权平均与RmsProp(转载+自己总结)以及Adagrad 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、指數(shù)加權(quán)平均(先說用途:抗噪聲擬合)
假設我們有一年365天的氣溫數(shù)據(jù)θ1,θ2,...,θ365\theta_1,\theta_2,...,\theta_{365}θ1?,θ2?,...,θ365?,把他們化成散點圖,如下圖所示:

這些數(shù)據(jù)有些雜亂,我們想畫一條曲線,用來表征這一年氣溫的變化趨勢,那么我們需要把數(shù)據(jù)做一次平滑處理。最常見的方法是用一個華東窗口滑過各個數(shù)據(jù)點,計算窗口的平均值,從而得到數(shù)據(jù)的滑動平均值。但除此之外,我們還可以使用指數(shù)加權(quán)平均來對數(shù)據(jù)做平滑。其公式如下:
{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就是指數(shù)加權(quán)平均值,也就是平滑后的氣溫。β\betaβ的典型值是0.9,平滑后的曲線如下圖所示:

對于vk=βvk?1+(1?β)θkv_k=\beta v_{k-1}+(1-\beta)\theta_kvk?=βvk?1?+(1?β)θk?,我們把它展開,可以得到如下形式:

可見,平滑后的氣溫,是以往每一天原始氣溫的加權(quán)平均值,只是這個權(quán)值是隨時間的遠近而變化的,離今天越遠,權(quán)值越小,且呈指數(shù)衰減。從今天往前數(shù)kkk天,它的權(quán)值為β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,權(quán)重已經(jīng)非常小,更久遠一些的氣溫數(shù)據(jù)權(quán)重更小,可以認為對今天的氣溫沒有影響。
因此,可以認為指數(shù)加權(quán)平均計算的是最近11?β\frac{1}{1-\beta}1?β1?個數(shù)據(jù)的加權(quán)平均值。通常β\betaβ取值為0.9,相當于計算10個數(shù)的加權(quán)平均值。

但是按照原始的指數(shù)加權(quán)平均公式,還有一個問題,就是當k比較小時,其最近的數(shù)據(jù)太少,導致估計誤差比較大。
例如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?
為了減小最初幾個數(shù)據(jù)的誤差,通常對于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是所有權(quán)重的和,這相當于對權(quán)重做了一個歸一化處理。下面的圖中,紫色的線就是沒有做修正的結(jié)果,修正之后就是綠色曲線。二者在前面幾個數(shù)據(jù)點之間相差較大,后面則基本重合了。

二、
RMSprop算法
對于上面的這個橢圓形的拋物面(圖中的橢圓代表等高線),沿著橫軸收斂速度是最快的,所以我們希望在橫軸(假設記為w1)方向步長大一些,在縱軸(假設記為w2)方向步長小一些。這時候可以通過RMSprop實現(xiàn),迭代更新公式如下:

{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這里利用了加權(quán)指數(shù)平均,dw就是以前常見的導數(shù)g,這里用了平方是因為想在后面一步的根號里面當做方差來用,所以這里有歸一的效果。s_1這里利用了加權(quán)指數(shù)平均,dw就是以前常見的導數(shù)g,這里用了平方是因為想在后面一步的根號里面當做方差來用,所以這里有歸一的效果。s1?權(quán)數(shù)w數(shù)g,

觀察上面的公式可以看到,s是對梯度的平方做了一次平滑。
在更新w時,先用梯度除以s1+?\sqrt{s_1+\epsilon}s1?+??,相當于對梯度做了一次歸一化。
如果某個方向上梯度震蕩很大,應該減小其步長;
而震蕩大,則這個方向的s也較大,除完之后,歸一化的梯度就小了;
如果某個方向上梯度震蕩很小,應該增大其步長;
而震蕩小,則這個方向的s也較小,歸一化的梯度就大了。

因此,通過RMSprop,我們可以調(diào)整不同維度上的步長,加快收斂速度。把上式合并后,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?,這是一個很小的數(shù),典型值是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,我們可以調(diào)整不同維度上的步長,加快收斂速度。把上式合并后,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?,這是一個很小的數(shù),典型值是10?810^{-8}10?8
上面都是轉(zhuǎn)載,說下自己的理解:
w等式右側(cè)的第二項變成了歸一項,那么在快要衰減至穩(wěn)定值時,肯定相對于其他算法而言更快。例如w=0.5,wterminal=0.51,這個時候RMSprop由于振蕩幅度小,迭代至誤差容忍范圍內(nèi)(0.51±0.05)肯定比其他優(yōu)化算法更快,因為其他算法的振蕩幅度大啊,所以其他算法不好收斂啊。w等式右側(cè)的第二項變成了歸一項,那么在快要衰減至穩(wěn)定值時,肯定相對于其他算法而言更快。例如w=0.5,w_{terminal}=0.51,這個時候RMSprop由于振蕩幅度小,迭代至誤差容忍范圍內(nèi)(0.51±0.05)肯定比其他優(yōu)化算法更快,因為其他算法的振蕩幅度大啊,所以其他算法不好收斂啊。w側(cè)穩(wěn)w=0.5,wterminal?=0.51,RMSprop內(nèi)(0.51±0.05)優(yōu)

所謂:有招必有破綻,RmsProp缺點是什么呢?
如果我的初始值w1=0.1,假如w1的最終值是0.9如果我的初始值w_1=0.1,假如w_1的最終值是0.9?0.1,w1?0.9,由于振蕩幅度小,所以RMSprop迭代的速度就會比其他算法慢,這個時候,就需要調(diào)整α\alphaα以及β\betaβ的數(shù)值了。

#-------------------------------------------------Adagrad算法-------------------------------------------------------------------------
Adagrad
Adagrad算法能夠在訓練中自動的對learning rate 進行調(diào)整,對于出現(xiàn)頻率較低參數(shù)采用較大的α\alphaα更新;
相反,對于出現(xiàn)頻率較高的參數(shù)采用較小的α\alphaα更新。因此,Adagrad非常適合處理稀疏數(shù)據(jù)。

我們設gt,ig_{t,i}gt,i?為第t輪第i個權(quán)重參數(shù)的梯度,即:
gt,i=▽θJ(θi)g_{t,i}=\triangledown _{\theta}J(\theta_i)gt,i?=θ?J(θi?).
因此,SGD中參數(shù)更新的過程可寫為:
θ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在每輪訓練中對每個參數(shù)θi\theta_iθi?的學習率進行更新,參數(shù)更行公式如下:
θ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}GtRd×d為對角陣,
每個對角線位置(i,i)為對應參數(shù)θi\theta_iθi?
從第1輪到第t輪梯度的平方和。
?\epsilon?是平滑項,用于避免分母為0,一般取值1e-8.
Adagrad的缺點是在訓練的中后期,分母上梯度平方的累加將會越來越大,從而梯度趨近于0,
使得訓練提前結(jié)束。

Reference:
[1]神經(jīng)網(wǎng)絡優(yōu)化算法:梯度下降法、Momentum、RMSprop和Adam
[2]優(yōu)化方法總結(jié):SGD,Momentum,AdaGrad,RMSProp,Adam
?

總結(jié)

以上是生活随笔為你收集整理的指数加权平均与RmsProp(转载+自己总结)以及Adagrad的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。