1. 程式人生 > >深度學習基礎--BP和訓練--常用的梯度下降

深度學習基礎--BP和訓練--常用的梯度下降

常用的梯度下降

  梯度下降是線性迴歸的一種(Linear Regression)

1)Adam

  Adam(Adaptive Moment Estimation)本質上是帶有動量項的RMSprop,它利用梯度的一階矩估計和二階矩估計動態調整每個引數的學習率。Adam的優點主要在於經過偏置校正後,每一次迭代學習率都有個確定範圍,使得引數比較平穩。

具體實現:

  需要:步進值 ?, 初始引數 θ, 數值穩定量δ,一階動量衰減係數ρ1, 二階動量衰減係數ρ2   其中幾個取值一般為:δ=10^-8,ρ1=0.9,ρ2=0.999   中間變數:一階動量s,二階動量r,都初始化為0。

  每步迭代過程:   1. 從訓練集中的隨機抽取一批容量為m的樣本{x1,…,xm},以及相關的輸出yi   2. 計算梯度和誤差,更新r和s,再根據r和s以及梯度計算引數更新量。 在這裡插入圖片描述

2)批梯度下降演算法

  計算每一個θ值都需要遍歷計算所有樣本。   缺點是:速度慢;一般要設定最大迭代數和收斂引數;十分依靠初始點和步長

3)隨機梯度下降演算法SGD

  因為每次計算梯度都需要遍歷所有的樣本點。這是因為梯度是J(θ)的導數,而J(θ)是需要考慮所有樣本的誤差和 。所以接下來又提出了隨機梯度下降演算法(stochastic gradient descent )。   隨機梯度下降演算法,每次迭代只是考慮讓該樣本點的J(θ)趨向最小,而不管其他的樣本點,這樣演算法會很快,但是收斂的過程會比較曲折,整體效果上,大多數時候它只能接近區域性最優解,而無法真正達到區域性最優解。

  sgd是當前權重減去步長乘以梯度,得到新的權重。

優缺點

  優點:1. 訓練速度快。從迭代的次數上來看,SGD迭代的次數較多,在解空間的搜尋過程看起來很盲目。2. 適合用於較大訓練集的case。如果樣本量很大的情況(例如幾十萬),那麼可能只用其中幾萬條或者幾千條的樣本,就已經將theta迭代到最優解了。

  缺點:隨機梯度下降過早的結束了迭代,使得它獲取的值只是接近區域性最優解,而並非像批梯度下降演算法那麼是區域性最優解。

SGD與GD比較

  Prat I: 相對於非隨機演算法,SGD 能更有效的利用資訊,特別是資訊比較冗餘的時候。   Prat II: 相對於非隨機演算法, SGD 在前期迭代效果卓越。   Prat III: 如果樣本數量大,那麼 SGD的Computational Complexity 依然有優勢。

隨機平均梯度法(Stochasitc Average Gradient)

  我們知道sgd是當前權重減去步長乘以梯度,得到新的權重。而其實,SAG就是SGD with momentum(帶動量的隨機梯度下降)的姊妹版本。   sag中的a,就是平均的意思,具體說,就是在第k步迭代的時候,我考慮的這一步和前面n-1個梯度的平均值,當前權重減去步長乘以最近n個梯度的平均值。n是自己設定的,當n=1的時候,就是普通的sgd。   想法非常的簡單,在隨機中又增加了確定性,類似於mini-batch sgd的作用,但不同的是,sag又沒有去計算更多的樣本,只是利用了之前計算出來的梯度,所以每次迭代的計算成本遠小於mini-batch sgd,和sgd相當。效果而言,sag相對於sgd,收斂速度快了很多。這一點上面的論文中有具體的描述和證明。

  隨機梯度下降被髮明出來的原因是因為它的下降速度快,可以減少迭代的次數,但是不容易收斂是它的缺點。在有些特定的情況下呢,需要更多的迭代(更多的計算複雜度)才能達到收斂條件,反而可能不如正常的梯度下降來得好。   為了避免這個情況呢,隨機平均梯度法就誕生啦,保證了隨機梯度下降原汁原味的優點(下降快),同時又利用平均的特性,讓梯度下降能更快達到收斂條件,減少迭代次數。   綜上,這個方法呢,以後估計還會改進吧,畢竟平均這個特性太“low”了,不過思想倒是可取的,跟馬爾科夫鏈有點異曲同工,說不定下一個演算法就是“馬爾科夫鏈隨機梯度下降”呢。

SAG與SGD 比較

  1)SAG是對過去k次的梯度求均值。   2)SGD with momentum是對過去所有的梯度求加權平均(權重成指數衰減)。

小批量梯度下降

  小批量和大批量訓練之間的權衡。基本原則是較大的批量每次迭代會變慢,較小的批量可以加快迭代過程,但是無法保證同樣的收斂效果。   之前是整個資料集為一個batch。