隨機梯度下降與梯度下降的區別?

2022-08-05 14:12:11 字數 2670 閱讀 3999

如果你還不瞭解梯度下降請參考:知乎@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)

梯度下降 隨機梯度下降 批梯度下降

下面的h x 是要擬合的函式,j 損失函式,theta是引數,要迭代求解的值,theta求解出來了那最終要擬合的函式h 就出來了。其中m是訓練集的記錄條數,j是引數的個數。 梯度下降法流程 1 先對 隨機賦值,可以是一個全零的向量。 2 改變 的值,使j 按梯度下降的方向減少。 以上式為例 1 對於...

梯度下降法

上一次說到代價函式,代價函式的作用就是找到最優的引數使假設函式與實際值相差最小。而梯度下降法 gradient descent 就是找到最優...

17 梯度下降

import numpy as np import matplotlib pyplot as plt 構造一元二次方程 x np linsp...