梯度下降優化算法


梯度下降優化算法

梯度下降是常用的優化方式,具體的算法有:

  • 梯度下降法
    • 批梯度下降(Batch Gradient Descent, BGD)
    • 隨機梯度下降(Stochastic Gradient Decent, SGD)
    • 小批量梯度下降(Mini-Batch Gradient Decent, MBGD)
  • 梯度下降優化
    • 動量梯度下降(Gradient Descent with Momentum)
    • 均方根支(Root Mean Square Prop, RMSprop)
    • 自適應矩估計(Adaptive Moment Estimation, Adam)

簡單介紹上述優化方法

知識儲備

梯度下降法

梯度下降法(gradient descent)是求解無約束最優化問題的一種最常用方法,是一種迭代算法,每一步需要求解目標函數的梯度向量。優點是實現簡單,缺點是一般情況下不能保證解是全局最優的。

導數

 

 

 方向導數定義: 如上圖, p′ 沿着 l 趨於 p 時,如果函數的增量 f(x+Δx,y+Δy)−f(x,y) 與 pp′ 兩點間的距離 ρ=(Δx)2+(Δy)2 的比值的極限存在,則稱此極限為 p 沿着 l 方向的導數,記作

(1)∂f∂l=limρ→0f(x+Δx,y+Δy)−f(x,y)ρ

更一般的,對於函數 f(x) , 在 x0 處的導數為

f′(x0)=limx→x0f(x)−f(x0)x−x0=limΔx→0f(x0+Δx)−f(x0)Δx

梯度

函數在某點的梯度的方向與取得最大方向導數的方向一致,而模為方向導數的最大值

定義: 設函數 z=f(x,y) 在平面區域D內,具有一階連續偏導數,則對於每一點 p(x,y)∈D , 都可定義一個向量 ∂f∂x→i+∂f∂y→j 滿足梯度的條件,則這向量稱為 z=f(x,y) 在點 p(x,y) 的梯度,記作

gradf(x,y)=∂f∂x→i+∂f∂y→j

牛頓法和擬牛頓法

牛頓法和擬牛頓法也是求解無約束最優化問題的常用方法,優點是收斂速度快。一般用來求解大規模數據的優化問題

海森矩陣(Hessian Matrix)

海森矩陣是一個多變量實值函數二階偏導數組成的方塊矩陣,假設有一實數函數 f(x1,x2,...,xn) ,如果 f 所有的二階偏導數都存在,那么海森矩陣為對稱矩陣, f 的海森矩陣的第 ij 項即為 H(f)ij(x)=DiDjf(x) ,其中 x=(x1,x2,...,xn) 即

 

 

 更一般的海森矩陣也可表示為

H(x)=[∂2f∂xi∂xj]n×n

正定半正定矩陣

  • 正定矩陣:所有特征值大於0 (>0)
  • 負定矩陣:所有特征值小於0 (<0)
  • 半正定矩陣: 所有特征值為非負(>=0)
  • 半負定矩陣:所有特征值為非正(<=0)
  • 不定矩陣:特征值有正有負

牛頓法

牛頓法是迭代算法,每一步需要求解目標函數的海森矩陣的逆矩陣,計算方法比較復雜,這里不詳細敘述,具體可閱讀Newton's method in optimization

擬牛頓法

擬牛頓法是通過正定矩陣近似的海森矩陣的逆矩陣來簡化牛頓法的計算過程,常用算法有 DFP, BFGS

等高線

在幾何上 z=f(x,y) 表示一個曲面,當曲面被平面 z=c 所截,得到的曲線 {z=f(x,y)z=c 在 xoy 面上的投影方程 f(x,y)=c 稱為等值線,幾何上稱為等高線

 

 

 梯度下降法

批梯度下降(Batch Gradient Descent, BGD)

批梯度下降法在更新參數時使用所有樣本來進行更新

J(w,b)=1m∑i=1mL(y(i)^,y(i))+λ2m∑∥w∥F2wj:=wj−α∂J(w,b)∂wjbj:=bj−α∂J(w,b)∂bj

其中 λ2m∑∥w∥F2 是L2正則項, α 是學習速率 learning rate

BGD的梯度下降圖

 

 

 BGD的優缺點

  • 優點:最小化所有訓練樣本的損失函數得到全局最優
  • 缺點:當樣本數目很多時,訓練過程很慢

Python偽代碼

1
2
3
4

for epoch in range(epochs):
    # 是對每個epoch的所有數據進行計算的
    grad = loss_fn(*args, **kwargs)
    params = params - learning_rate * grad

隨機梯度下降(Stochastic Gradient Decent, SGD)

每次通過一個樣本來迭代更新

J(w,b)=L(y(i)^,y(i))+λ2∑∥w∥F2wj:=wj−α∂J(w,b)∂wjbj:=bj−α∂J(w,b)∂bj

SGD的梯度下降圖

 

 

 SGD的優缺點

  • 優點:訓練速度快
  • 缺點:不易找到全局最優

Python偽代碼

1
2
3
4
5

for epoch in range(epochs):
    shuffle(data)
    for example in data:
        grad = loss_fn(*args, **kwarga)
        params = params - learning_rate * grad

小批量梯度下降算法(Mini-Batch Gradient Decent, MBGD)

對隨機梯度下降和批梯度下降進行了折衷, 每次用 t(1<t<m) 個樣本進行更新

J(w,b)=1k∑i=1kL(y(i)^,y(i))+λ2k∑∥w∥F2wj:=wj−α∂J(w,b)∂wjbj:=bj−α∂J(w,b)∂bj

MBGD的梯度下降圖

 

 

 Python偽代碼

1
2
3
4
5

for epoch in range(epochs):
    shuffle(data)
    for batch in next_batch(data, batch_size):
        grad = loss_fn(*args, **kwargs)
        params = params - learning_rate * grad

梯度下降優化

優化的方式一般有兩種:

  • 算法
  • 優化方法的選擇,比如大數據量下采用牛頓法/擬牛頓法進行優化

指數加權平均

是一種常用的序列數據處理方式

St={Y1 if t=1βSt−1+(1−β)Yt if t>1

Yt 為 t下的實際值, St 為 t 下加權平均后的值, β 為權重

動量梯度下降(Gradient Descent with Momentum)

是計算梯度的指數加權平均數,並利用該值來更新參數值

υdw=βυdw+(1−β)dwυdb=βυdb+(1−β)dbw:=w−αυdwb:=b−αυdb

SGD 在局部溝壑中很容易發生振盪,所以在這種情況下下降速度會很慢,而動量能在一定程度上抑制這種震盪,使得SGD的下降更平穩

如下圖為不加Momentum和加了Momentum的區別

 

 

 未加Momentum的SGD

 

 

 加了Momentum的SGD

特點:當前后梯度方向一致時,Momentum梯度下降能夠加速學習;前后梯度方向不一致時,Momentum梯度下降能夠抑制震盪

均方根支(Root Mean Square Prop, RMSProp)

在梯度進行指數加權平均的基礎上引入了平方和平方根

Sdw=βSdw+(1−β)dw2Sdb=βSdb+(1−β)db2w:=w−αdwSdw+ϵb:=b−αdwSdb+ϵ

ϵ 一般值很小,主要是用來提高數值穩定性,防止分母過小

特點: 當 dw 或 db 較大時,dw2 和 db2 也會較大,因此 Sdw Sdb 也是較大的,最終使得 dwSdw+ϵ dbSdb+ϵ 較小,這也減少了振盪

自適應矩估計(Adaptive Moment Estimation, Adam)

可以認為是 Momentum 和 RMSProp 的結合

υdw=β1υdw+(1−β1)dw,υdb=β1υdb+(1−β1)dbSdw=β2Sdw+(1−β2)dw2,Sdb=β2Sdb+(1−β2)db2υdwcorrect=υdw1−β1t,υdbcorrect=υdb1−β1tSdwcorrect=Sdw1−β2t,Sdbcorrect=Sdb1−β2tw:=w−αυdwcorrectSdwcorrect+ϵb:=b−αυdbcorrectSdbcorrect+ϵ

β1為第一階矩,β2 為第二階矩

各優化算法的比較

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM