梯度下降法(BGD、SGD、MBGD)

除了最小二乘法求解損失函數之外,梯度下降法是另一種求解損失函數的方法。
梯度下降的直觀理解,先用一個例子說明:
假設找凸函數y=x**2的最小值,通過迭代的方式,假設x=2時,y=4,x=0.8時,y=0.64,,,總之每一步迭代,都是Y都是一個下降的過程。直到f(x)<1e-10位置,如下圖所示,整個求解過程是一個下降的過程。(藍色點爲迭代過程中的點)
在這裏插入圖片描述
那麼問題來了,x如何取值讓y不斷變小呢,迭代公式又是什麼呢?請看推倒過程:
在這裏插入圖片描述

梯度下降法的求解目標

求解損失函數/目標函數
在這裏插入圖片描述
對上式求導,對上面的式子對單個求解,再還原
在這裏插入圖片描述

批量梯度下降算法(BGD)—(batch一批)

由上面的式子我們得到,在這裏插入圖片描述在這裏插入圖片描述
得到的對θ進行一次計算,我們再次還原回去,一次對θ進行多次迭代,就是批量梯度下降算法(BGD),推倒過程如下:
在這裏插入圖片描述

隨機梯度下降算法(SGD)—(stochastic隨機的)

缺點是:有可能產生波動,一次更新一次。

在這裏插入圖片描述
注:隨機是說可以把樣本打亂,這樣顯示出了隨機性。

SGD和BGD兩個算法比較:

1 SGD速度比BGD快(迭代次數少)
2 SGD在某些情況下(全局存在多個相對最優解/J(θ)不是一個二次),SGD有可能跳
出某些小的局部最優解,所以不會比BGD壞

3 BGD一定能夠得到一個局部最優解(在線性迴歸模型中一定是得到一個全局最優
解),SGD由於隨機性的存在可能導致最終結果比BGD的差

沿着負梯度方向迭代,更新後的θ使J(θ)更小

迭代公式如下:
在這裏插入圖片描述
其中:在這裏插入圖片描述

小批量梯度下降法(MBGD)

如果既保證算法訓練過程快,也保證最終參數訓練的準確率,而這正是小批梯度下降法的初衷。MBGD中不是拿每一個樣本就更新M次,而是而是拿b(一般爲10)個樣本的平均梯度作爲更新方向。
在這裏插入圖片描述

BGD、SGD、MBGD的區別:

當樣本量爲m的時候,每次迭代BGD算法中對於參數值更新一次,SGD算法
中對於參數值更新m次,MBGD算法中對於參數值更新m/n次,相對來講
SGD算法的更新速度最快;

SGD算法中對於每個樣本都需要更新參數值,當樣本值不太正常的時候,就
有可能會導致本次的參數更新會產生相反的影響,也就是說SGD算法的結果
並不是完全收斂的,而是在收斂結果處波動的;
SGD算法是每個樣本都更新一次參數值,所以SGD算法特別適合樣本數據量
大的情況以及在線機器學習(Online ML)。

梯度下降法總結:

由於梯度下降法中負梯度方向作爲變量的變化方向,所以有可能導致最終求解的值是局部最優解,所以在使用梯度下降的時候,一般要進行一些調優策略
**學習率的選擇:**學習率過大,表示每次迭代更新的變化比較大,有可能會調出最優解;學習率過小,表示每次迭代更新的時候變化比較小,就會導致迭代速度過慢,很長時間都不能結束。
算法初始參數值的選擇:初始值不同,最終得到的最小值也有可能不同,因爲梯度下降法求解的是局部最優解,所以一般情況下,選擇多次不同初始值運行算法,並最終返回損失函數最小情況下的結果值
標準化:由於樣本不同特徵的取值範圍不同,可能會導致在各個不同參數上
迭代速度不同
,爲了減少特徵取值的影響,可以將特徵進行標準化操作。(都將數據在一個區間裏(0,1))

實現f(x)=x2代碼如下:**

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>1e-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 (u"最終結果爲:",(x,f_current))
fig = plt.figure()
X2 = np.arange(-2.1,2.15,0.05)
Y2= X2**2

plt.plot(X2,Y2,'-',color="#666666",linewidth=2)
plt.plot(X,Y,'bo-')
plt.title(u'$y=x^2函數求解最小值,最終解爲:x=%.2f,y=%.2f'%(x,f_current))
plt.show()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章