隨機梯度下降法
$\theta_{t} \leftarrow \theta_{t-1}-\alpha g_{t}$
Code:
optimzer = torch.optim.SGD(model.parameters(),lr = 0.001)
權重衰減
$\theta_{t} \leftarrow(1-\beta) \theta_{t-1}-\alpha \mathbf{g}_{t}$
其中 $\mathrm{g}_{t}$ 為第 $t$ 步更新時的梯度, $\alpha$ 為學習率, $\beta$ 為權重衰減系數,一般取值比較 小,比如 0.0005。
Code:
optimzer = torch.optim.SGD(model.parameters(),lr = 0.001,weight_decay=0.0005)
動量法
動量(Momentum)是模擬物理中的概念.一個物體的動量指的是該物體 在它運動方向上保持運動的趨勢,是該物體的質量和速度的乘積.動量法(Momentum Method)是用之前積累動量來替代真正的梯度.每次迭代的梯度可以 看作加速度. 在第 $t$ 次迭代時,計算負梯度的“加權移動平均”作為參數的更新方向,
$\Delta \theta_{t}=\rho \Delta \theta_{t-1}-\alpha g_{t}=-\alpha \sum\limits_{\tau=1}^{t} \rho^{t-\tau} g_{\tau}$
Code:
optimzer = torch.optim.SGD(model.parameters(),lr = 0.001,momentum =0.001,dampening=0.001)
Nesterov加速梯度
Nesterov 加速梯度(Nesterov Accelerated Gradient,NAG)是一種對動量 法的改進[Nesterov, 2013; Sutskever et al., 2013],也稱為Nesterov動量法(Nesterov Momentum)
在動量法中, 實際的參數更新方向 $\Delta \theta_{t}$ 為上一步的參數更新方向 $\Delta \theta_{t-1}$ 和當 前梯度的反方向 $ -g_{t}$ 的疊加. 這樣, $\Delta \theta_{t}$ 可以被拆分為兩步進行, 先根據 $\Delta \theta_{t-1}$ 更 新一次得到參數 $ \hat{\theta}$ , 再用 $ -g_{t}$ 進行更新.
這樣,合並后的更新方向為
$\Delta \theta_{t}=\rho \Delta \theta_{t-1}-\alpha \mathfrak{g}_{t}\left(\theta_{t-1}+\rho \Delta \theta_{t-1}\right)$
其中 $\mathfrak{g}_{t}\left(\theta_{t-1}+\rho \Delta \theta_{t-1}\right)$ 表示損失函數在點 $\hat{\theta}=\theta_{t-1}+\rho \Delta \theta_{t-1}$ 上的偏導數.
Code:
optimzer = torch.optim.SGD(model.parameters(),lr = 0.001,momentum =0.001,nesterov=0.01)