1. 程式人生 > 其它 >pytorch adagrad_PyTorch中的優化演算法

pytorch adagrad_PyTorch中的優化演算法

技術標籤:pytorch adagradpytorch weight decaypytorch 每次迭代更新學習率

ed758979139873e35dc55e24727e0d28.png

常見的優化演算法:梯度下降及其改進、牛頓法及其改進的理論已經做了總結,可以檢視前面的文章。Pytorch中對這些優化演算法進行了封裝,在torch.optim模組中,可以很方便地呼叫這些方法。

ed758979139873e35dc55e24727e0d28.png

隨機梯度下降SGD

呼叫:

torch.optim.SGD(params, lr=required, momentum=0, dampening=0,                 weight_decay=0, nesterov=False)

引數:

params:模型引數,可迭代型別lr:學習率,必須引數,浮點型momentum:動量引數,可選引數,浮點型,預設為0dampening:抑制動量引數,可選引數,浮點型,預設為0weight_decay:權重衰減引數,可選引數,浮點型,預設為0,(都是用L2懲罰項)nesterov:Nesterov動量,可選引數,預設不支援

示例:(後面演算法的流程已知,只是選擇的方法不同)

#選擇優化器optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)#梯度清零,防止累加optimizer.zero_grad()#反向傳播loss_fn(model(input),target).backward()# 更新引數optimizer.step()
ed758979139873e35dc55e24727e0d28.png

RMSprop

呼叫:

torch.optim.RMSprop(params, lr=1e-2, alpha=0.99, eps=1e-8, weight_decay=0, momentum=0, centered=False)

引數:

params:模型引數,可迭代型別lr:學習率,必須引數,浮點型alpha:平滑常數,浮點型eps:防止分母為0的引數,增加演算法穩定性weight_decay:權重衰減引數,可選引數,浮點型,預設為0momentum:動量引數,可選引數,浮點型,預設為0centered:如果是True,那麼計算中心RMSprop,梯度通過它的方差估計進行標準化
ed758979139873e35dc55e24727e0d28.png

AdaDelta

呼叫:

torch.optim.adadelta(params, lr=1.0, rho=0.9, eps=1e-6, weight_decay=0)

引數

params:模型引數,可迭代型別lr:學習率,必須引數,浮點型rho:平滑常數,浮點型eps:防止分母為0的引數,增加演算法穩定性weight_decay:權重衰減引數,可選引數,浮點型,預設為0
ed758979139873e35dc55e24727e0d28.png

Adam

呼叫:

torch.optim.adam(params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,                 weight_decay=0, amsgrad=False)
引數:
params:模型引數,可迭代型別lr:學習率,必須引數,浮點型betas:兩個平滑係數,元組型別。eps:防止分母為0的引數,增加演算法穩定性weight_decay:權重衰減引數,可選引數,浮點型,預設為0amsgrad:是否是使用該演算法的amsgrad變體(論文https://openreview.net/forum?id=ryQu7f-RZ)
ed758979139873e35dc55e24727e0d28.png

AdaMax

呼叫

torch.optim.adamax(params, lr=2e-3, betas=(0.9, 0.999), eps=1e-8,                 weight_decay=0)

引數

params:模型引數,可迭代型別lr:學習率,必須引數,浮點型betas:兩個平滑係數,元組型別。eps:防止分母為0的引數,增加演算法穩定性weight_decay:權重衰減引數,可選引數,浮點型,預設為0
ed758979139873e35dc55e24727e0d28.png

AdaGrad

呼叫:

torch.optim.Adagrad(params, lr=1e-2, lr_decay=0, weight_decay=0, initial_accumulator_value=0, eps=1e-10)

引數:

params:模型引數,可迭代型別lr:學習率,必須引數,浮點型lr_decay:學習率衰減你數,可選引數,浮點型,預設為0weight_decay:權重衰減引數,可選引數,浮點型,預設為0initial_accumulator_value:初始化加速值,預設為0.eps:防止分母為0的引數,增加演算法穩定性
ed758979139873e35dc55e24727e0d28.png

LBFGS

呼叫:

torch.optim.LBFGS(params,                 lr=1,                 max_iter=20,                 max_eval=None,                 tolerance_grad=1e-7,                 tolerance_change=1e-9,                 history_size=100,                 line_search_fn=None)

引數:

params:模型引數,可迭代型別lr:學習率,必須引數,浮點型max_iter:每個優化步驟的最大迭代次數,預設20max_eval:每次優化的最大函式估算數目tolerance_grad:一階最優性的終止容差tolerance_change:函式值或引數變化的終止容差history_size:更新歷史大小line_search_fn:從'strong_wolfe'或None中選一個,預設是None
ed758979139873e35dc55e24727e0d28.png

平均隨機梯度ASGD

呼叫:

torch.optim.ASGD(params, lr=1e-2, lambd=1e-4, alpha=0.75, t0=1e6, weight_decay=0)

引數:

params:模型引數,可迭代型別lr:學習率,必須引數,浮點型lambd:衰減項,預設1e-4alpha:eta更新的指數t0:在某點開始平均weight_decay:權重衰減引數,可選引數,浮點型,預設為0

詳細過程可以看論文:https://dl.acm.org/doi/10.1137/0330046

ed758979139873e35dc55e24727e0d28.png

稀疏Adam(SparseAdam)

呼叫:

torch.optim.SparseAdam(params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8)

引數:

params:模型引數,可迭代型別lr:學習率,必須引數,浮點型betas:兩個平滑係數,元組型別。eps:防止分母為0的引數,增加演算法穩定性

‍詳細看論文:https://arxiv.org/abs/1412.6980

ed758979139873e35dc55e24727e0d28.png

更多演算法參看官方教程文件。