學習筆記之梯度下降演算法

2021-10-04 09:14:01 字數 2148 閱讀 4108

梯度下降(gradient descent, gd)是目前機器學習、深度學習解決最優化問題的演算法中,最核心、應用最廣的方法。它不是乙個機器學習演算法,而是一種基於搜尋的最優化方法。其作用是用來對原始模型的損失函式進行優化,以便尋找到最優的引數,使得損失函式的值最小。也就是,用已知訓練集資料尋找最優得引數,從而找到最優得擬合模型。哪什麼是梯度下降呢?

梯度是向量,和引數維度一樣。簡單地來說,多元函式的導數(derivative)就是梯度(gradient),分別對每個變數進行微分,然後用逗號分割開,梯度是用括號包括起來,說明梯度其實是乙個向量。比如說線性回歸損失函式l的梯度為:▽f=

(∂l∂

a,∂l

∂b)\********down f=(\frac}},\frac}})

▽f=(∂a

∂l​,

∂b∂l

​)。①、對各引數向量求偏導,得出▽

f\********down f

▽f;②、設定初始引數向量、學習率 η及閾值threshold ;

③、迭代計算引數向量下▽

f\********down f

▽f值,若▽

f\********down f

▽f值小於等於閾值threshold 停止,此時的引數向量為區域性最優解;否則,計算下一點引數向量,公式是上乙個點引數向量-η*▽

f\********down f

▽f,進行下一步迭代。

一元函式:f(x

)=3x

2+5x

f(x)=3x^2+5x

f(x)=3

x2+5

x第一步,求導數。f′(

x)=6

x+5f^(x)=6x+5

f′(x)=

6x+5

第二步,初始化x

0x_0

x0​、η、threshold。x0=

1,η=

0.1,th

resh

old=

0.0001

x_0=1,η=0.1,threshold=0.0001

x0​=1,

η=0.

1,th

resh

old=

0.00

01第三步,計算f′(

x0)f^(x_0)

f′(x0​

),並和threshold對比。

第四步,迭代過程。如下表所示:

2.1 簡單**演示

首先,手工定義原函式和導函式。
def

loss_function

(x):

return3*

(x**2)

+5*xdef

det_function

(x):

return

6*x+

5

然後,定義梯度下降方法。
def

get_gd

(od_f=

none

,f=none

,x_0=

none

,eta=

0.001

,threshold=0)

: x_all=

od_f_all=

det_f_all=

count_n=

0while

true

: count_n+=

1 y=od_f(x_0)

#計算導數在x處的值

det_f=f(x_0)

#計算下乙個點的值

x_0=x_0-eta*det_f

#判斷是否到達目的地

if det_f<=threshold:

break

return x_all,od_f_all,det_f_all,count_n

最後,設定x_0=1,eta=0.1,threshold=0.0001。檢視圖形。
完整**塊

參考文章:

學習筆記 梯度下降演算法

剛剛開始接觸機器學習。線性回歸可定義到給出一堆資料,一條直線。根據這條直線來 未來的趨勢。根據線性回歸,可知有直接計算的方法計算theta,也可通過迭代的梯度下降演算法計算theta。學習率不能很大,也不能很小。太大會出現越過最優點的情況,太小又會出現迭代次數過多的情況。即使學習速率 保持不變,梯度...

梯度下降演算法 梯度下降演算法為何叫梯度下降?

首先,我們知道乙個演算法的名字可以很好地去解釋乙個演算法,那麼梯度下降演算法是什麼呢?很明顯的,就是用梯度這個工具來解決問題的一種演算法。解決什麼問題呢?如何在乙個函式曲面的某一點,找到乙個函式值變化最大的方向。比如 我們站在山上的某一點,我們想要以最快的速度上山,但是我們的步子大小是一定的,那麼最...

機器學習經典演算法筆記 梯度下降演算法

本文推薦乙個更好的版本理解 梯度下降,下面的 選自本文 這大概是我見過最好理解的乙個版本 梯度下降的場景假設 梯度梯度下降演算法的數學解釋 梯度下降演算法的例項 梯度下降演算法的實現 further reading 代價函式 j 12 m x y t x y j theta frac x theta...