梯度下降(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...