- 獲取最優(yōu)化算法的一種方法谜酒,是解決無約束優(yōu)化問題,用遞歸來逼近最小偏差的模型她肯。
關(guān)于梯度的概念大家可參見以前的文章:
從方向?qū)?shù)到梯度 -
梯度下降法迭代公式為:
x為需要求解的 值鹰贵,s為梯度負(fù)方向碉输,α為步長又叫學(xué)習(xí)率
缺點(diǎn):靠近極小值的時(shí)候收斂速度比較慢亭珍;可能會(huì)”之字形”的下降;不太適合處理比較復(fù)雜的非線性函數(shù)問題肄梨。
- 實(shí)例:
用梯度下降的迭代算法,來逼近函數(shù)y=x**2的最值
代碼如下:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
def f(x):
return x**2
def h(x):
return 2*x
X=[]
Y=[]
x=2
step=0.8
f_change=f(x)
f_current=f(x)
X.append(x)
Y.append(f_current)
while f_change>np.e**-10:
x=x-step*h(x)
tmp=f(x)
f_change=np.abs(f_current-tmp)
f_current=tmp
X.append(x)
Y.append(f_current)
print(X)
print(Y)
print(x,f_current)
fig = plt.figure()
a=np.arange(-2.15,2.15,0.05)
b=a**2
plt.plot(a,b)
plt.plot(X,Y,"ro--")
plt.show()
運(yùn)行結(jié)果如下:
-
假如目標(biāo)函數(shù)有未知參數(shù)的情況,步驟如下:
-
如何選擇梯度下降的步長和初始值
不同的步長得表現(xiàn):
- 學(xué)習(xí)率的選擇:學(xué)習(xí)率過大羊壹,表示每次迭代更新的時(shí)候變化比較大油猫,有可能會(huì)跳過 最優(yōu)解柠偶;學(xué)習(xí)率過小,表示每次迭代更新的時(shí)候變化比較小毡证,就會(huì)導(dǎo)致迭代速度過 慢该肴,很長時(shí)間都不能結(jié)
- 算法初始參數(shù)值的選擇:初始值不同,最終獲得的最小值也有可能不同,因?yàn)樘荻?下降法求解的是局部最優(yōu)解雏蛮,所以一般情況下阱州,選擇多次不同初始值運(yùn)行算法,并 最終返回?fù)p失函數(shù)最小情況下的結(jié)果值
var ihubo = {
nickName : "草依山",
site : "http://jser.me"
}
步驟與作用:寫出一個(gè)帶有參數(shù)函數(shù)犀概,將這個(gè)函數(shù)與目標(biāo)屬性做損失函數(shù)夜惭,然后用提低下降的方法的出求出損失最小時(shí)參數(shù)的值,從而得到用于預(yù)測的模型产喉。