SGD (Stochastic Gradient Descent)#
通常指 mini-batch SGD
θ←θ−η∇L(θ)其中 η 是學習率, 每次只隨機抽一筆樣本來估計梯度, 樣本算出的梯度是有雜訊的估計, 但期望值等於真實梯度, 且雜訊有助於脫離saddle point
在訓練初期收斂進展快, 但是因為收斂路徑會震盪所以通常需要搭配 LR decay 使用
SGD with Momentum#
讓更新方向帶有慣性(梯度的指數移動平均), 把過去的梯度累積起來。
vt=βvt−1+∇L(θt)θt+1=θt−ηvtβ 通常設 0.9, 有效步長最多可放大約 1−β1 倍, 可以加快在非凸優化問題的收斂速度
RMSProp#
把梯度的 RMS 放到分母做自適應 LR
vt=βvt−1+(1−β)(∇L)2θt+1=θt−vt+ϵη∇Lβ 通常取 0.9
Adam#
Momentum + 自適應 LR
維護兩個指數移動平均(一階矩, 二階矩)
mt=β1mt−1+(1−β1)∇Lvt=β2vt−1+(1−β2)(∇L)2因為 m0,v0 初始化為 0, 前幾步會偏向 0, 所以要做偏差校正:
m^t=1−β1tmt,v^t=1−β2tvt最後更新:
θt+1=θt−η⋅v^t+ϵm^t梯度長期偏大的參數 v^ 大, 步伐自動縮小; 梯度稀疏或很小的參數, 步伐自動放大
預設超參數通常用 β1=0.9、β2=0.999、ϵ=10−8、η=10−3
AdamW#
在 Adam 裡, L2 正則項被加進梯度後, 也會被 v^ 除掉, 導致梯度大的參數反而被 decay 得少:
θt+1=θt−η⋅v^t+ϵEMA(∇L+λθt)m^tAdamW 把 weight decay 從梯度裡拿出來
θt+1=θt−η(v^t+ϵm^t+λθt)