梯度下降是線性回歸的一種(linear regression)
adam(adaptive moment estimation)本質上是帶有動量項的rmsprop,它利用梯度的一階矩估計和二階矩估計動態調整每個引數的學習率。adam的優點主要在於經過偏置校正後,每一次迭代學習率都有個確定範圍,使得引數比較平穩。
需要:步進值 ?, 初始引數 θ, 數值穩定量δ,一階動量衰減係數ρ1, 二階動量衰減係數ρ2
其中幾個取值一般為:δ=10^-8,ρ1=0.9,ρ2=0.999
中間變數:一階動量s,二階動量r,都初始化為0。
每步迭代過程:
1. 從訓練集中的隨機抽取一批容量為m的樣本,以及相關的輸出yi
2. 計算梯度和誤差,更新r和s,再根據r和s以及梯度計算引數更新量。
計算每乙個θ值都需要遍歷計算所有樣本。
缺點是:速度慢;一般要設定最大迭代數和收斂引數;十分依靠初始點和步長
因為每次計算梯度都需要遍歷所有的樣本點。這是因為梯度是j(θ)的導數,而j(θ)是需要考慮所有樣本的誤差和 。所以接下來又提出了隨機梯度下降演算法(stochastic gradient descent )。
隨機梯度下降演算法,每次迭代只是考慮讓該樣本點的j(θ)趨向最小,而不管其他的樣本點,這樣演算法會很快,但是收斂的過程會比較曲折,整體效果上,大多數時候它只能接近區域性最優解,而無法真正達到區域性最優解。
sgd是當前權重減去步長乘以梯度,得到新的權重。
優點:1. 訓練速度快。從迭代的次數上來看,sgd迭代的次數較多,在解空間的搜尋過程看起來很盲目。2. 適合用於較大訓練集的case。如果樣本量很大的情況(例如幾十萬),那麼可能只用其中幾萬條或者幾千條的樣本,就已經將theta迭代到最優解了。
缺點:隨機梯度下降過早的結束了迭代,使得它獲取的值只是接近區域性最優解,而並非像批梯度下降演算法那麼是區域性最優解。
prat i: 相對於非隨機演算法,sgd 能更有效的利用資訊,特別是資訊比較冗餘的時候。
prat ii: 相對於非隨機演算法, sgd 在前期迭代效果卓越。
prat iii: 如果樣本數量大,那麼 sgd的computational complexity 依然有優勢。
我們知道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」了,不過思想倒是可取的,跟馬爾科夫鏈有點異曲同工,說不定下乙個演算法就是「馬爾科夫鏈隨機梯度下降」呢。
1)sag是對過去k次的梯度求均值。
2)sgd with momentum是對過去所有的梯度求加權平均(權重成指數衰減)。
小批量和大批量訓練之間的權衡。基本原則是較大的批量每次迭代會變慢,較小的批量可以加快迭代過程,但是無法保證同樣的收斂效果。
之前是整個資料集為乙個batch。
深度學習基礎 BP和訓練 並行條件下的BP
並行訓練 parallel training 規模的情況下,在保證模型效能的同時實現訓練速度線性增長 在增加cpu 或 gpu 數量的同時,保證訓練的線性加速以及效能。但由於工人 gpu cpu 之間存在溝通成本和資源浪費,因此無法實現工作成果隨工人數量的增多呈線性增長。訓練速度和模型效能 如何在增...
深度學習訓練的常用名詞
本文節選自cver 深度學習速查詞典 中的一部分內容,並補充一些常見名詞。batch size 一次前向或反向傳播時樣本的數目,該引數受限於記憶體的大小。iteration 樣本傳播的次數,每次傳播的樣本數為batch大小,注 一次樣本的傳播包括前向和反向傳播。epoch 所有訓練樣本的傳播次數。例...
深度學習基礎 反向傳播即BP演算法的推導過程
bp演算法簡單的來說就是根據神經網路實際的輸出和目標輸出 也就是輸入樣本對應的標記 之間的誤差計算神經網路各個權值的過程。下面的推導過程參考了 神經網路設計 martin t.hagan等著 戴葵等譯。採用bp演算法從輸出層 經過隱層再到輸入層進行層層計算的原因是如果直接計算誤差函式相對於各權值的偏...