如果你還不了解梯度下降請參考:知乎@ai醬:梯度下降是個啥?。
假設你已經懂了梯度下降的原理與公式。接下來我會舉個例子來講隨機梯度下降與梯度下降的區別。
假如損失(誤差)函式對引數w的導數是x(w
x−la
bel)
x(wx
−lab
el),然後我們需要更新的引數是w
w,學習率是αα。
現在有一堆資料(x1
,lab
el1)
,(x2
,lab
el2)
,(xi
,lab
eli)
,(xn
,lab
eln)
(x1
,lab
el1
),(x
2,l
abel
2),
(xi
,lab
eli
),(x
n,l
abel
n).
那麼梯度下降會這麼更新引數w:w=
w−α∗
∑i=1
n(xi
(wxi
−lab
el))
w=w−
α∗∑i
=1n
(xi
(wxi
−la
bel)
)而隨機梯度下降會這麼做:
遍歷i從1到n可以看到梯度下降中的導數部分是把所有樣本代入到導數中,然後累加,然後更新引數。而隨機梯度下降則是選乙個樣本計算乙個導數,然後馬上更新引數。
下面我用偽**表示下隨機梯度下降與梯度下降之間的區別:
梯度下降
x =[.
..]lable =[.
..]w =
0.666
learning_rate =
0.001
for(迴圈很多次)
隨機梯度下降
x =[.
..]lable =[.
..]w =
0.666
learning_rate =
0.001
for(迴圈很多次)
然後隨機梯度下降有很多變種,比如增加動量來加速收斂。
本來是w=w
+α∗f
′(w)
w=w+
α∗f′
(w),然後加了動量的就變成了:v=
γvv=
γvw=
w+v+
α∗f′
(w)w
=w+v
+α∗f
′(w)
import math
deff
(x):
return x**3-
2*x -
10+x**
2def
derivative_f
(x):
return3*
(x**2)
+2*-
2
x=0.0
y=0.0
learning_rate =
0.001
gradient=
0 e=
0.00000001
b1 =
0.9
b2 =
0.995
m =0 v =
0 t =
0for i in
range
(10000):
print
('x = , f(x) = ,gradient='
.format
(x,y,gradient))if
(abs
(gradient)
>
0.00001
and(
abs(gradient)
<
0.0001))
:print
("break at "
+str
(i))
break
else
:
gradient = derivative_f(x)
t=t+
1'mt ← β1 · mt−1 + (1 − β1) · gt '
m = b1*m +(1
-b1)
*gradient
'vt ← β2 · vt−1 + (1 − β2) · g2'
v = b2*v +(1
-b2)
*(gradient**2)
'mt ← mt/(1 − βt1)'
mt = m/(1
-(b1**t)
)'vbt ← vt/(1 − βt2)'
vt = v/(1
-(b2**t)
)
x = x- learning_rate * mt/
(math.sqrt(vt)
+e)
y=f(x)
隨機梯度下降與梯度下降的區別?
如果你還不了解梯度下降請參考 知乎 ai醬 梯度下降是個啥?假設你已經懂了梯度下降的原理與公式。接下來我會舉個例子來講隨機梯度下降與梯度下降的區別。假如損失 誤差 函式對引數w的導數是x w x la bel x wx label x wx l abel 然後我們需要更新的引數是w ww,學習率是 ...
梯度下降 隨機梯度下降 批梯度下降
下面的h x 是要擬合的函式,j 損失函式,theta是引數,要迭代求解的值,theta求解出來了那最終要擬合的函式h 就出來了。其中m是訓練集的記錄條數,j是引數的個數。梯度下降法流程 1 先對 隨機賦值,可以是乙個全零的向量。2 改變 的值,使j 按梯度下降的方向減少。以上式為例 1 對於我們的...
stanford 梯度 梯度下降,隨機梯度下降
一 梯度gradient 在標量場f中的一點處存在乙個向量g,該向量方向為f在該點處變化率最大的方向,其模也等於這個最大變化率的數值,則向量g稱為標量場f的梯度。在向量微積分中,標量場的梯度是乙個向量場。標量場中某一點上的梯度指向標量場增長最快的方向,梯度的長度是這個最大的變化率。更嚴格的說,從歐氏...