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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

从动力学角度看优化算法SGD:一些小启示

發布時間:2024/10/8 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从动力学角度看优化算法SGD:一些小启示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


作者丨蘇劍林

單位丨廣州火焰信息科技有限公司

研究方向丨NLP,神經網絡

個人主頁丨kexue.fm


在本文中,我們來關心優化算法 SGD(stochastic gradient descent,隨機梯度下降),包括帶 Momentum 和 Nesterov 版本的。對于 SGD,我們通常會關心的幾個問題是:?


  • SGD 為什么有效??

  • SGD 的 batch size 是不是越大越好??

  • SGD 的學習率怎么調??

  • Momentum 是怎么加速的??

  • Nesterov 為什么又比 Momentum 稍好??

  • ...?


這里試圖從動力學角度分析 SGD,給出上述問題的一些啟發性理解。


梯度下降


既然要比較誰好誰差,就需要知道最好是什么樣的,也就是說我們的終極目標是什么?


訓練目標分析


假設全部訓練樣本的集合為 S,損失度量為 L(x;θ),其中 x 代表單個樣本,而 θ 則是優化參數,那么我們可以構建損失函數:



訓練的終極目標,則是找到 L(θ) 的一個全局最優點(這里的最優是“最小”的意思)。


GD與ODE


為了完成這個目標,我們可以用梯度下降法(gradient descent,GD):



其中 ε>0 稱為學習率,這里剛好也是迭代的步長(后面我們會看到步長不一定等于學習率)。梯度下降有多種理解方式,由于一般都有 ε?1,所以這里我們將它改變為:



那么左邊就近似于 θ 的導數(假設它是時間 t 的函數),于是我們可以得到 ODE 動力系統:



而 (2) 則是 (4) 的一個歐拉解法。這樣一來,梯度下降實際上就是用歐拉解法去求解動力系統 (4),由于 (4) 是一個保守動力系統,因此它最終可以收斂到一個不動點(讓 θ˙=0),并且可以證明穩定的不動點是一個極小值點(但未必是全局最小的)。

隨機梯度下降


這里表明,隨機梯度下降可以用一個隨機微分方程來半定性、半定量地分析。?


從GD到SGD


(2) 我們一般稱為“全量梯度下降”,因為它需要所有樣本來計算梯度,這是梯度下降的一個顯著缺點:當樣本成千上萬時,每迭代一次需要的成本太大,甚至可能達到難以進行。于是我們想隨機從 S 中隨機抽取一個子集 R?S,然后只用 R 去計算梯度并完成單次迭代。我們記:



然后公式 (2) 變為:



注意 L 的最小值才是我們的目標,而 LR 則是一個隨機變量,?θLR(θn) 只是原來 ?θL(θn) 的一個估計。這樣做能不能得到合理的結果呢?


從SGD到SDE


這里我們假設:



服從一個方差為 σ^2 的正態分布,注意這只是一個近似描述,主要是為了半定性、半定量分析。經過這樣假設,隨機梯度下降相當于在動力系統 (4) 中引入了高斯噪聲:



原來的動力系統是一個 ODE,現在變成了 SDE(隨機微分方程),我們稱之為“朗之萬方程”。當然,其實噪聲的來源不僅僅是隨機子集帶來的估算誤差,每次迭代的學習率大小也會帶來噪聲。


在噪聲的高斯假設下,這個方程的解是怎樣的呢?原來的 ODE 的解是一條確定的軌線,現在由于引入了一個隨機噪聲,因此解也是隨機的,可以解得平衡狀態的概率分布為:



求解過程可以參考一般的隨機動力學教程,我們只用到這個結果就好。


結果啟發


從 (8) 式中我們可以得到一些有意義的結果。首先我們看到,原則上來說這時候的 θ 已經不是一個確定值,而是一個概率分布,而且原來 L(θ) 的極小值點,剛好現在變成了 P(θ) 的極大值點。這說明如果我們無限長地執行梯度下降的話,理論上 θ 能走遍所有可能的值,并且在 L(θ) 的各個“坑”中的概率更高。


σ^2 是梯度的方差,顯然這個方差是取決于 batch size 的,根據定義 (7),batch size 越大方差越小。而在 (9) 式中,σ^2 越大,說明 P(θ) 的圖像越平緩,即越接近均勻分布,這時候 θ 可能就到處跑;當 σ^2 越小時,原來 L(θ) 的極小值點的區域就越突出,這時候 θ 就可能掉進某個“坑”里不出來了。


?L(θ)曲線


?exp(-L(θ))曲線


這樣分析的話,理論上來說,我們一開始要讓 batch size 小一些,那么噪聲方差 σ^2 就會大一些,越接近均勻分布,算法就會遍歷更多的區域,隨著迭代次數的增加,慢慢地就會越來越接近最優區域,這時候方差應該要下降,使得極值點更為突出。也就是說,有可能的話,batch size 應該要隨著迭代次數而緩慢增加。這就部分地解釋了去年 Google 提出來的結果《學界 | 取代學習率衰減的新方法:谷歌大腦提出增加Batch Size》,不過 batch size 增加會大幅度增加計算成本,所以我們一般增加到一定量也就不去調整了。


當然,從圖中可以看到,當進入穩定下降區域時,每次迭代的步長 ε(學習率)就不應該超過“坑”的寬度,而 σ^2 越小,坑也就越窄,這也表明學習率應該要隨著迭代次數的增加而降低。另外 ε 越大也部分地帶來噪聲,因此 σ^2 降低事實上也就意味著我們要降低學習率。


所以分析結果就是:?


條件允許情況下,在使用 SGD 時,開始使用小 batch size 和大學習率,然后讓 batch size 慢慢增加,學習率慢慢減小。?


至于增大、減少的策略,就要靠各位的煉丹水平了。


動量加速?


眾所周知,相比 Adam 等自適應學習率算法,純 SGD 優化是很慢的,而引入動量可以加速 SGD 的迭代。它也有一個漂亮的動力學解釋。


從一階到二階


從前面的文字我們知道,SGD 和 GD 在迭代格式上沒有什么差別,所以要尋求 SGD 的加速,我們只需要尋求 GD 的加速,然后將全量梯度換成隨機梯度就行了。而 (2) 式到 (4) 式的過程我們可以知道,GD 將求 L(θ) 的最小值問題變成了 ODE 方程的迭代求解問題。


那么,為什么一定要是一階的呢?二階的行不?


為此,我們考慮一般的:



這樣就真正地對應一個(牛頓)力學系統了,其中 λ>0 引入了類似摩擦力的作用。我們來分析這樣的系統跟原來 GD 的一階 ODE (4) 與 (10) 有什么差別。


首先,從不動點的角度看,(10)最終收斂到的穩定不動點(讓),確實也是 L(θ) 的一個極小值點。試想一下,一個小球從山頂滾下來,會自動掉到山谷又爬升,但是由于摩擦阻力的存在,最終就停留在山谷了。注意,除非算法停不了,否則一旦算法停了,那么一定是一個山谷(也有可能是山頂、鞍點,但從概率上來講則是比較小的),但絕對不可能是半山腰,因為半山腰的話,還存在勢能,由能量守恒定律,它可以轉化為動能,所以不會停下來。


因此收斂情況跟一階的 GD 應該是沒有差別的,所以只要比較它們倆的收斂速度。


GD+Momentum


我們將 (10) 等價地改寫為:



我們將 θ˙ 離散化為:



那么 η 要怎么處理呢?ηn?不對不對,作為 n 時刻的導數只有一階近似(

總結

以上是生活随笔為你收集整理的从动力学角度看优化算法SGD:一些小启示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。