如有幫助,點贊收藏關注!
如需轉載,請注明出處!
今天來介紹torch模型中的優化器
優化是指在每個訓練步驟中調整模型參數以減少模型誤差的過程。
優化算法定義如何執行這個過程
所有優化邏輯都封裝在優化器對象中。在這里,我們使用SGD優化器;此外,PyTorch中還有許多不同的優化器,如adam和RMSProp,它們可以更好地處理不同類型的模型和數據。
復雜代碼被封裝在優化器里,我們調用的時候只需要給出簡單參數和優化器名稱即可。真正起作用的就是這些很簡短的語句。
隨機梯度下降法(SGD)
一般指的mini-batch gradient descent
每一次迭代計算mini-batch的梯度,然后對參數進行更新,是最常見的優化方法。
缺點1:SGD容易收斂到局部最優,并且在某些情況下可能被困在鞍點。
缺點2:選擇合適的learning rate比較困難 - 對所有的參數更新使用同樣的learning rate。對
于稀疏數據或者特征,有時我們可能想更新快一些對于不經常出現的特征,對于常出現的特征
更新慢一些,這時候SGD就不太能滿足要求了
#初始化
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
...
#循環loop中:
#重置模型參數的梯度。默認是累加,為了防止重復計數,在每次迭代時顯式地將它們歸零。
optimizer.zero_grad()
#計算梯度
loss.backward()
#根據上面計算的梯度,調整參數
optimizer.step()
RMSprop
是一種自適應學習率的優化算法,在更新參數時根據歷史梯度平方的加權平均來動態調整每個參數的學習率。在PyTorch中,可以通過設置optim.RMSprop()來使用該優化器。
optimizer = torch.optim.RMSprop(model.parameters(), lr=learning_rate)
adam
是一種融合了動量梯度下降和自適應學習率的優化算法,在更新參數時既考慮歷史梯度的加權平均又考慮歷史梯度平方的加權平均。在PyTorch中,可以通過設置optim.Adam()來使用該優化器。
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
Momentum Gradient Descent
動量梯度下降是一種在梯度下降更新過程中加入動量項的優化算法,可以加速收斂并減少震蕩。在PyTorch中,可以通過設置momentum參數實現動量梯度下降。
optimizer = torch.optim.RMSprop(model.parameters(), lr=learning_rate, momentum=momentum)
AdaGrad
是一種自適應學習率的優化算法,在更新參數時根據歷史梯度信息來動態調整每個參數的學習率。在PyTorch中,可以通過設置optim.Adagrad()來使用該優化器。
optimizer = torch.optim.Adagrad(model.parameters(), lr=learning_rate)
AdamW
是一種基于Adam優化算法的變體,它引入了權重衰減(weight decay)來解決Adam可能存在的參數過度擬合問題。在PyTorch中,可以通過設置optim.AdamW()來使用該優化器。
optimizer = torch.optim.AdamW(model.parameters(), lr=learning_rate)
Adadelta
是一種自適應學習率的優化算法,它與RMSprop相似,但引入了一個衰減系數來平衡歷史梯度平方和目標函數變化量。在PyTorch中,可以通過設置optim.Adadelta()來使用該優化器。
optimizer = torch.optim.Adadelta(model.parameters(), lr=learning_rate)
有時間再一一整理同樣數據開啟了不同優化器的效果。
看到這里了,給個鼓勵。謝謝啦!