1. 程式人生 > >【機器學習】梯度下降演算法分析與簡述

【機器學習】梯度下降演算法分析與簡述

梯度下降演算法分析與簡述

梯度下降(gradient descent)是一種最優化演算法,基於爬山法的搜尋策略,其原理簡單易懂,廣泛應用於機器學習和各種神經網路模型中。在吳恩達的神經網路課程中,梯度下降演算法是最先拿來教學的基礎演算法。

梯度下降演算法的基本原理

要想找到某函式的最大值或者最小值,最迅速的方法就是沿著梯度的方向上升或者下降。梯度下降演算法就是以目標的負梯度方向對引數進行調整,沿著目標函式J(x,y)的梯度(一階偏導數)的相反方向,即−∇θJ(x,y)來不斷更新引數直到達到目標函式的極值點。當然除了方向還應該有下降的步長即學習率(learning rate),一般這個引數是提前指定好。
基本的梯度下降演算法無法滿足眾多應用需求,所以每一個先進的機器學習框架或者模型都會使用梯度下降的變種,目前廣泛使用的有三種,分別是全量梯度下降(batch gradient descent)、隨機梯度下降(stochastic gradient descent)和批量梯度(mini-batch gradient descent)下降。

全量梯度下降(batch gradient descent)

又稱Full Batch Learning,顧名思義該方法是由整個訓練集來確定梯度的方向,需要將所有的訓練資料都計算一遍。公式如下:
θ=θ−η⋅∇θJ(θ)
優點和缺點也是顯而易見的。優點就是遍歷全部資料得到的梯度方向是相對來說最正確的,因此能更好的找到極值點。缺點是一次計算大量的資料需要非常大的記憶體,而且計算時間過長。資料集比較大的時候不適合這種方法。

隨機梯度下降(stochastic gradient descent)

隨機梯度下降是根據每個樣本來計算梯度決定方向,即計算一個樣本就更新一次引數,公式如下:
θ=θ−η⋅∇θJ(θ;x(i);y(i))


相對於全量梯度下降來說,隨即梯度下降的一個明顯優勢就是速度更快,而且可以線上學習。但是由單個樣本來確定梯度方向會出現一定的隨機性,如圖所示,想要達到極值點,SGD需要更多的迭代次數。
SGD
但是更新的隨機性又一個明顯的好處,就是有可能跳出區域性最優點,進而找到另一個結果更好的區域性最優甚至找到全劇最優,當然這隻能是啟發式的想法,很難得到驗證。

批量梯度下降(mini-batch gradient descent)

以上兩種方法可以說是比較極端的情況,都有各自的侷限和優點,那麼有沒有一種方法可以中和一下兩家的特點呢?於是批量梯度下降就出現了。公式如下:
θ=θ−η⋅∇θJ(θ;x(i:i+n);y(i:i+n))


因為是選取了一部分樣本計算梯度,所以相對於全量梯度下降效率更快,相對於隨機梯度下降來說隨機性較少,既提升了效率又保證了整體的穩定性。是目前應用較為廣泛的一種梯度下降演算法。
其實這三種方法基本類似,唯一的區別就是batch-size的大小,當batch-size=1時即為隨機梯度下降。batch-size=trainset-size時即為全量梯度下降。因此在訓練時如何選擇一個合適的batch的大小也是一個對結果有影響的trick。
https://www.zhihu.com/question/32673260 在這個知乎問答裡提到了batch-size的設定問題,具體還是要根據自己的實驗多調整,找到自己資料的規律。

總結

以上是最基本的梯度下降演算法原理介紹,在此基礎上已經衍生出了更多的高階優化演算法,各機器學習框架中也已經集成了各種方法,如adam等,以後的日子再更新這些高階方法的分析。