標籤: 機器學習
梯度下降法用來求函式的極小值,且是一種迭代演算法,由於計算效率高,在機器學習中常常使用。梯度下降法經常求凸函式(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 次 前言 這個系列主要想能夠用數學去描述機器學習,想要學好機器學習,首先得去理解其中的數學意義,不一定要到能夠輕鬆自如的推導中間的公式,不過至少得認識這些 式子吧,不然看一些相關...