梯度下降(gradient descent)是一種最優化演算法,基於爬山法的搜尋策略,其原理簡單易懂,廣泛應用於機器學習和各種神經網路模型中。在吳恩達的神經網路課程中,梯度下降演算法是最先拿來教學的基礎演算法。
要想找到某函式的最大值或者最小值,最迅速的方法就是沿著梯度的方向上公升或者下降。梯度下降演算法就是以目標的負梯度方向對引數進行調整,沿著目標函式j(x,y)的梯度(一階偏導數)的相反方向,即−∇θj(x,y)來不斷更新引數直到達到目標函式的極值點。當然除了方向還應該有下降的步長即學習率(learning rate),一般這個引數是提前指定好。
基本的梯度下降演算法無法滿足眾多應用需求,所以每乙個先進的機器學習框架或者模型都會使用梯度下降的變種,目前廣泛使用的有三種,分別是全量梯度下降(batch gradient descent)、隨機梯度下降(stochastic gradient descent)和批量梯度(mini-batch gradient descent)下降。
又稱full batch learning,顧名思義該方法是由整個訓練集來確定梯度的方向,需要將所有的訓練資料都計算一遍。公式如下:
θ=θ−η⋅∇θj(θ)
優點和缺點也是顯而易見的。優點就是遍歷全部資料得到的梯度方向是相對來說最正確的,因此能更好的找到極值點。缺點是一次計算大量的資料需要非常大的記憶體,而且計算時間過長。資料集比較大的時候不適合這種方法。
隨機梯度下降是根據每個樣本來計算梯度決定方向,即計算乙個樣本就更新一次引數,公式如下:
θ=θ−η⋅∇θj(θ;x(i);y(i))
以上兩種方法可以說是比較極端的情況,都有各自的侷限和優點,那麼有沒有一種方法可以中和一下兩家的特點呢?於是批量梯度下降就出現了。公式如下:
θ=θ−η⋅∇θj(θ;x(i:i+n);y(i:i+n))
因為是選取了一部分樣本計算梯度,所以相對於全量梯度下降效率更快,相對於隨機梯度下降來說隨機性較少,既提公升了效率又保證了整體的穩定性。是目前應用較為廣泛的一種梯度下降演算法。
其實這三種方法基本類似,唯一的區別就是batch-size的大小,當batch-size=1時即為隨機梯度下降。batch-size=trainset-size時即為全量梯度下降。因此在訓練時如何選擇乙個合適的batch的大小也是乙個對結果有影響的trick。
在這個知乎問答裡提到了batch-size的設定問題,具體還是要根據自己的實驗多調整,找到自己資料的規律。
以上是最基本的梯度下降演算法原理介紹,在此基礎上已經衍生出了更多的高階優化演算法,各機器學習框架中也已經整合了各種方法,如adam等,以後的日子再更新這些高階方法的分析。
機器學習 梯度下降演算法
梯度下降法是乙個 最優化演算法,通常也稱為最速下降法。最速下降法是求解無約束優化問題最簡單和最古老的方法之一,雖然現在已經不具有實用性,但是許多有效演算法都是以它為基礎進行改進和修正而得到的。最速下降法是用負梯度方向為搜尋方向的,最速下降法越接近目標值,步長越小,前進越慢。可以用於求解非線性方程組。...
機器學習 梯度下降演算法
梯度下降法是乙個最優化演算法,通常也稱為最速下降法。最速下降法是求解無約束優化問題最簡單和最古老的方法之一,雖然現在已經不具有實用性,但是許多有效演算法都是以它為基礎進行改進和修正而得到的。最速下降法是用負梯度方向為搜尋方向的,最速下降法越接近目標值,步長越小,前進越慢。可以用於求解非線性方程組。舉...
機器學習 梯度下降演算法
梯度下降演算法。什麼是梯度 梯度 梯度的本意是乙個向量,由函式對每個引數的偏導組成,表示某一函式在該點處的方向導數沿著該方向取得最大值,即函式在該點處沿著該方向變化最快,變化率最大。梯度下降演算法原理 演算法思想 梯度下降是一種非常通用的優化演算法,能夠為大範圍的問題找到最優解。梯度下降的中心思想就...