梯度下降法

2021-08-14 18:27:46 字數 1958 閱讀 3289

標籤: 機器學習

梯度下降法用來求函式的極小值,且是一種迭代演算法,由於計算效率高,在機器學習中常常使用。梯度下降法經常求凸函式(convex function)的極小值,因為凸函式只有乙個極小值,使用梯度下降法求得的極小值就是最小值。

與其對應的有梯度上公升法(gradient ascent),用來求函式的極大值,兩種方法原理一樣,只是計算的過程中正負號不同而已。

先看看維基百科:

標量場中某一點的梯度指向在這點標量場增長最快的方向。

感覺略微抽象,可以用山的高度來解釋一下。假設有乙個人站在山上的某一點,他通過觀察發現了一條「最陡」的路,那麼這條路的方向就是梯度所指的方向。

需要強調一下,梯度是乙個向量,方向導數是乙個標量,梯度所指向的方向是方向導數最大的方向,且梯度的模和方向導數的最大值相等。

求梯度的方法很簡單,對每乙個自變數求偏導數,然後將其偏導數作為自變數方向的座標即可。梯度的符號為

∇ ,則函式f(

x,y)

的梯度為: ∇f

(x,y

)=(∂

f(x,

y)∂x

,∂f(

x,y)

∂y)

以函式f(x

) 為例,先選擇乙個初始點,計算該點的梯度,然後按照梯度的方向更新自變數。若第

k 次迭代值為x(

k),則 x(

k+1)

=x(k

)−α∇

f(x(

k))

其中α 稱作

步長或者

學習率,表示自變數每次迭代變化的大小。

一直按照上式更新自變數,直到當函式值變化非常小(如3%以內)或者達到最大迭代次數時停止,此時認為自變數更新到函式的極小值點。f(

x)=x

2 的梯度為: ∇f

(x)=

2x步長設定為0.1,選取自變數從3開始,則計算過程如下

迭代次數(n)

自變數(

x )

梯度(2

x )

步長(α

)因變數(x2

)0360.191

2.44.8

0.15.76

21.92

3.84

0.13.69

31.536

3.072

0.12.36

100.32

0.64

0.10.10

200.03

0.06

0.10.0009……

………可以看到隨著迭代次數的增加,該函式越來越接近極小值點(0

,0) ,依據該方法一定可以找到精度允許範圍內的極小值點。

以下是迭代count次的**:

if __name__ == "__main__":

x = 3

y = x * x

alpha = 0.1

count = 3

while (count > 0):

x = x - alpha * 2 * x

y = x * x

count = count - 1

print x, y

f(

x,y)

=(x−

10)2+

(y−10

)2的梯度為: ∇f

(x,y

)=(2

(x−10

),2(

y−10)

) 步長設定為0.1,選擇初始點為(20

,20)

,這次以圖形表示計算過程,圖中的黑色曲線即為梯度下降法下降時的軌跡,效果非常好。 

斜檢視: 

俯檢視: 

梯度下降法和隨機梯度下降法

批量梯度下降法 batch gradient descent 在更新引數時使用所有的樣本來進行更新 隨機梯度下降法 stochastic gradient descent 求梯度時沒有用所有的m個樣本的資料,而是僅僅選取乙個樣本j來求梯度。小批量梯度下降法 mini batch gradient d...

梯度下降法

梯度下降法 是乙個一階 最優化演算法 通常也稱為 最速下降法 我之前也沒有關注過這類演算法。最近,聽史丹福大學的機器學習課程時,碰到了用梯度下降演算法求解線性回歸問題,於是看了看這類演算法的思想。今天只寫了一些入門級的知識。我們知道,函式的曲線如下 程式設計實現 c code cpp view pl...

梯度下降法

回歸 regression 梯度下降 gradient descent 發表於332 天前 技術,科研 被圍觀 1152 次 前言 這個系列主要想能夠用數學去描述機器學習,想要學好機器學習,首先得去理解其中的數學意義,不一定要到能夠輕鬆自如的推導中間的公式,不過至少得認識這些 式子吧,不然看一些相關...