梯度算法之梯度上升和梯度下降


梯度算法之梯度上升和梯度下降

  • 方向導數

當討論函數沿任意方向的變化率時,也就引出了方向導數的定義,即:某一點在某一趨近方向上的導數值。

導數和偏導數的定義中,均是沿坐標軸正方向討論函數的變化率。那么當討論函數沿任意方向的變化率時,也就引出了方向導數的定義,即:某一點在某一趨近方向上的導數值。

通俗的解釋是: 我們不僅要知道函數在坐標軸正方向上的變化率(即偏導數),而且還要設法求得函數在其他特定方向上的變化率。而方向導數就是函數在其他特定方向上的變化率。

  • 梯度

函數在某一點的梯度是這樣一個向量,它的方向與取得最大方向導數的方向一致,而它的模為方向導數的最大值。
注意點:
1)梯度是一個向量
2)梯度的方向是最大方向導數的方向
3)梯度的值是最大方向導數的值

  • 梯度下降與梯度上升

在機器學習算法中,在最小化損失函數時,可以通過梯度下降思想來求得最小化的損失函數和對應的參數值,反過來,如果要求最大化的損失函數,可以通過梯度上升思想來求取。
梯度下降

關於梯度下降的幾個概念

梯度下降的代數方法描述

梯度下降的矩陣方式描述

梯度上升

梯度上升和梯度下降的分析方式是一致的,只不過把 θθ 的更新中 減號變為加號。

梯度下降的算法優化

  1. 算法的步長選擇。在前面的算法描述中,我提到取步長為1,但是實際上取值取決於數據樣本,可以多取一些值,從大到小,分別運行算法,看看迭代效果,如果損失函數在變小,說明取值有效,否則要增大步長。前面說了。步長太大,會導致迭代過快,甚至有可能錯過最優解。步長太小,迭代速度太慢,很長時間算法都不能結束。所以算法的步長需要多次運行后才能得到一個較為優的值。

  2. 算法參數的初始值選擇。 初始值不同,獲得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;當然如果損失函數是凸函數則一定是最優解。由於有局部最優解的風險,需要多次用不同初始值運行算法,關鍵損失函數的最小值,選擇損失函數最小化的初值。

  3. 歸一化。由於樣本不同特征的取值范圍不一樣,可能導致迭代很慢,為了減少特征取值的影響,可以對特征數據歸一化,也就是對於每個特征x,求出它的均值 x¯和標准差std(x),然后轉化為:

這樣特征的新期望為0,新方差為1,迭代次數可以大大加快。


梯度算法之批量梯度下降,隨機梯度下降和小批量梯度下降

在機器學習領域,體梯度下降算法分為三種

  • 批量梯度下降算法(BGD,Batch gradient descent algorithm)
  • 隨機梯度下降算法(SGD,Stochastic gradient descent algorithm)
  • 小批量梯度下降算法(MBGD,Mini-batch gradient descent algorithm)

批量梯度下降算法

BGD是最原始的梯度下降算法,每一次迭代使用全部的樣本,即權重的迭代公式中(公式中用θ代替θi),

這里的m代表所有的樣本,表示從第一個樣本遍歷到最后一個樣本。

特點:

  • 能達到全局最優解,易於並行實現
  • 當樣本數目很多時,訓練過程緩慢

隨機梯度下降算法

SGD的思想是更新每一個參數時都使用一個樣本來進行更新,即公式(1)中m為1。每次更新參數都只使用一個樣本,進行多次更新。這樣在樣本量很大的情況下,可能只用到其中的一部分樣本就能得到最優解了。
但是,SGD伴隨的一個問題是噪音較BGD要多,使得SGD並不是每次迭代都向着整體最優化方向。

特點:

  • 訓練速度快
  • 准確度下降,並不是最優解,不易於並行實現

小批量梯度下降算法

MBGD的算法思想就是在更新每一參數時都使用一部分樣本來進行更新,也就是公式(1)中的m的值大於1小於所有樣本的數量。

相對於隨機梯度下降,Mini-batch梯度下降降低了收斂波動性,即降低了參數更新的方差,使得更新更加穩定。相對於批量梯度下降,其提高了每次學習的速度。並且其不用擔心內存瓶頸從而可以利用矩陣運算進行高效計算。一般而言每次更新隨機選擇[50,256]個樣本進行學習,但是也要根據具體問題而選擇,實踐中可以進行多次試驗,選擇一個更新速度與更次次數都較適合的樣本數。mini-batch梯度下降可以保證收斂性,常用於神經網絡中。

補充

在樣本量較小的情況下,可以使用批量梯度下降算法,樣本量較大的情況或者線上,可以使用隨機梯度下降算法或者小批量梯度下降算法。

在機器學習中的無約束優化算法,除了梯度下降以外,還有前面提到的最小二乘法,此外還有牛頓法和擬牛頓法。

梯度下降法和最小二乘法相比,梯度下降法需要選擇步長,而最小二乘法不需要。梯度下降法是迭代求解,最小二乘法是計算解析解。如果樣本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有優勢,計算速度很快。但是如果樣本量很大,用最小二乘法由於需要求一個超級大的逆矩陣,這時就很難或者很慢才能求解解析解了,使用迭代的梯度下降法比較有優勢。

梯度下降法和牛頓法/擬牛頓法相比,兩者都是迭代求解,不過梯度下降法是梯度求解,而牛頓法/擬牛頓法是用二階的海森矩陣的逆矩陣或偽逆矩陣求解。相對而言,使用牛頓法/擬牛頓法收斂更快。但是每次迭代的時間比梯度下降法長。

參考資料:

https://blog.csdn.net/gamer_gyt/article/details/78797667
https://blog.csdn.net/gamer_gyt/article/details/78806156


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM