1.參數
https://blog.csdn.net/ibelievesunshine/article/details/99624645
class torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)[source]
- params (iterable) – 待優化參數的iterable或者是定義了參數組的dict
- lr (
float
, 可選) – 學習率(默認:1e-3) - betas (Tuple[
float
,float
], 可選) – 用於計算梯度以及梯度平方的運行平均值的系數(默認:0.9,0.999) - eps (
float
, 可選) – 為了增加數值計算的穩定性而加到分母里的項(默認:1e-8) - weight_decay (
float
, 可選) – 權重衰減(L2懲罰)(默認: 0)
2.算法
https://arxiv.org/pdf/1412.6980.pdf
可以看到,beta參數是用來更新m、v這兩個動量向量和梯度的,梯度經過動量估計之后代替了SDG中的直接用梯度來更新參數。
α也就是lr學習率,用來更新參數,作為一個步長吧。
weight_decay 是針對最后更新參數的時候,給參數加的一個懲罰參數,
總結:lr是在更新梯度的時候用到的,weight_decay權重衰減是在損失函數中的模型參數的權重,更新參數時用到的。
總的loss中加入了一個對權重的限制,防止過大產生過擬合現象,
在參數更新時反映出來,正則化參數λ決定了你如何權衡原始損失E和較大的權重懲罰。