LSTM Adam優化演算法

2021-10-20 17:59:20 字數 3642 閱讀 8004

adam是2023年提出的優化演算法,在深度學習領域應用廣泛。

adam與經典的隨機梯度下降法是不同的。經典隨機梯度下降保持乙個單一的學習速率(稱為alpha),用於所有的權重更新,並且在訓練過程中學習速率不會改變。而在adam中,每乙個網路權重(引數)都保持乙個學習速率,並隨著學習的展開而單獨地進行調整。該方法通過梯度的一階矩和二階矩來計算不同引數的自適應學習速率。

adam演算法結合adagrad(自適應梯度演算法)和rmsprop(均方根傳播)演算法的優勢,也可以看做是rmsprop演算法與動量法的結合。

在理解adam演算法之前,我們應該先來了解指數加權移動平均法和動量法,這是理解adam的前提。

加權移動平均法,是對觀察值分別給予不同的權數,按不同權數求得移動平均值,並以最後的移動平均值為基礎,確定**值的方法。採用加權移動平均法,是因為觀察期的近期觀察值對**值有較大影響,它更能反映近期變化的趨勢。

指數加權移動平均法,是指各數值的加權係數隨時間呈指數式遞減,越靠近當前時刻的數值加權係數就越大。

指數移動加權平均較傳統的平均法來說,一是不需要儲存過去所有的數值;二是計算量顯著減小。

其表示式為

其中, θt 為時刻 t 的實際觀測值;係數 β 表示加權下降的速率,其值越小下降的越快;vt 為 t 時刻指數加權移動平均的值。

我們將其展開來寫

v0=0

v1= β *v0 + (1- β) *?1

v2= β *v1 + (1- β) *?2

……vt= β *vt-1 + (1- β) *??

vt= (1- β) *?? + β *((1- β) *??-1 + β *((1- β) ??-2 + β vt-3))

= (1- β) ?? + 0.1 β ??-1 + 0.1"β" ^2??-2 +…+ 0.1"β" ^(?−1)*?1

= (1- β) *(?? + β ??-1 + 「β」 ^2??-2 + … + 「β」 ^(?−1)*?1 )

顯然,數值的加權係數隨著時間呈指數下降。

那麼,指數加權移動平均的究竟有多少項?

在數學中一般會以 1/e 來作為乙個臨界值,小於該值的加權係數的值不作考慮.

如:β=0.9 和 β=0.98 的情況

當 β=0.9 時, 0.9^10 約等於 1/e ,因此認為此時是近10個數值的加權平均。

當 β=0.98 時, 0.98^50 約等於 1/e,此時是近50個數值的加權平均。這種情況也正是移動加權平均的**。

也就是說,我們計算的是前1/(1−β)個資料的平均值。

但是,同樣該方法有乙個問題:當v0=0,即初始值取為0時,對應的v1= β *v0 + (1- β) *?1= (1- β) *?1,v1不准;

舉個例子:

β=0.98, v0=0

v1= 0.02?1 (v1不准)

v2= 0.98 v1 + 0.02?2(v2不准)

= 0.980.02?1+0.02?2

=0.0196?1+0.02?2

當只有乙個觀測值時,?1與v1應該很接近,但是因為v0=0 ,此時v1是?1的1/50,v1遠遠小於?1;因為v1不准,導致v2也不准,這樣接下來的每一項都不准,所以我們要進行偏差修正。

偏差修正

我們可以看到,經過偏差修正後,v2幾乎是?1與?2的平均了。

動量梯度下降演算法,簡言之就計算梯度的指數加權平均,然後使用這個梯度來更新權重。

我們在使用梯度下降演算法更新權重時,希望損失函式能減小至最小,下面是損失函式的橫截面圖,紅點表示最小值(最優值)。

圖中的藍線表示損失函式的減小路徑,從圖中左側的藍點出發,逐步靠近圖中的紅點(最小值),我們可以看到隨機梯度下降法在更新權重時,在縱軸上(豎直方向)的波動較大,這通常意味著梯度下降的次數較大,那麼訓練時間會增長;而如果我們採用較大的學習率,則很有可能超出函式範圍,為了避免這種情況,傾向使用較小的學習率。

所以,在縱軸上,我們希望波動小,即學習慢;而在橫軸上,希望步子邁的大一些,學習快一些,能盡快到達最小點。

那麼動量梯度下降法的公式為:(對導數採用指數滑動平均)即

dw表示導數,vdw表示動量。橫軸代表引數w,縱軸代表引數b,

在縱軸上,對梯度進行平均,則正負數相抵消,平均值接近0.

在橫軸上,所有微分都指向橫軸方向,所以橫軸上的平均值較大。

所以,橫軸方向運動更快,縱軸擺動幅度變小。

動量法可以解決sgd優化演算法更新幅度擺動大的問題,同時可以使得網路的收斂速度更快。

momentum梯度下降法,每次學習用的都是一樣的學習率,但是在訓練過程中每個引數的重要性是不同的,此時如果用同樣的學習率進行更新的話,就會出現誤差。這時候我們就需要使用不同的學習率動態地更新引數。

那麼,給學習率除以乙個不斷變化的數,那麼學習率就會動態地發生變化。

s是儲存梯度平方和的變數,?是為了避免s=0時分母為零的情況(一般取值10^(−8)),?為全域性的學習率。

隨著學習的過程,學習率是一直在動態的變化,對於梯度較大的引數,學習率較小,從而延緩網路的訓練。但是adagrad容易受到過去梯度的影響,陷入「過去「無法自拔,因為梯度很容易就會累積到乙個很大的值,此時學習率就會被降低的很厲害,因此adagrad很容易過分的降低學習率使訓練提前停止。

為了解決adagrad隨著訓練週期的增長,學習率降低的很快的問題。rmsprop演算法就在adagrad基礎上引入了衰減因子?。

橫軸代表引數w(步幅),縱軸代表引數b(波動)

w在橫軸上變化率很小,所以??的值很小;b在縱軸上波動很大,??較大.

但是,我們希望w的變化較大,b變化較小。

d? 除以乙個較小的數, w的變化就會變大,所以橫向運動更快;而?? 除以乙個較大的數,b的更新就會被減緩,所以縱向的變化相對平緩.

在深度學習的歷史上,包括許多研究者在內提出了優化演算法,並很好的解決了一些問題。但隨後這些優化演算法被指出並不能一般化,不能適用於多種神經網路。時間久了,深度學習圈子裡的人開始多少有些質疑全新的演算法。很多人覺得動量下降演算法很好用,很難找到更優化的演算法了。所以rmsprop和adam演算法是少有的經受人們質疑的2種演算法,已被證實可以適用不同的深度學習結構。

adam(adaptive moment estimation)是另一種自適應學習率的方法。它利用梯度的一階矩估計和二階矩估計動態調整每個引數的學習率。adam的優點主要在於經過偏置校正後,每一次迭代學習率都有個確定範圍,使得引數比較平穩.

演算法 演算法優化

傳統最優化方法的設計思想主要是通過傳統的序列計算實現的,無法與硬體的並行架構完美相容,這降低了傳統最優化方法在具有大資料背 計算為核心的分布式優化應運而生,這也使得最優化方法得到了比以往任何時候都更加廣泛的應用。平行計算要首先把乙個問題分解成若干個可以同時計算的子問題 部分 並將每個子問題進一步細分...

python優化演算法 python 優化演算法

設k k,n 是從金鑰k開始的長度為n的唯一數的個數.然後,k k,n 1 sum k i,n 其中i在可以從鍵k跳轉到的鍵的範圍內.這可以使用動態程式設計有效地計算 這是一種占用o n 時間和o 1 空間的方法 jumpmap map int,x for x in 46,68,79,48,039,...

演算法優化 遞迴演算法的優化策略

在處理演算法問題時候,用的非常多的一種策略就是遞迴演算法了。但是遞迴演算法雖然簡單有效,但是該演算法的演算法效果總是有點差強人意。本文主要講述從兩個方向優化遞迴演算法,希望本文能給讀者一些thinking。持續更新中 總結 示例 遞迴演算法我又把它稱為迭代演算法,因為大致思路都差不多 迭代 從已知推...