pytorch adagrad_PyTorch中的優化演算法
阿新 • • 發佈:2020-12-18
技術標籤:pytorch adagradpytorch weight decaypytorch 每次迭代更新學習率
常見的優化演算法:梯度下降及其改進、牛頓法及其改進的理論已經做了總結,可以檢視前面的文章。Pytorch中對這些優化演算法進行了封裝,在torch.optim模組中,可以很方便地呼叫這些方法。
隨機梯度下降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()
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,梯度通過它的方差估計進行標準化
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
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)
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
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的引數,增加演算法穩定性
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
平均隨機梯度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
稀疏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
更多演算法參看官方教程文件。