動量法
思想:
動量法使用了指數加權移動平均的思想。它將過去時間步的梯度做了加權平均,且權重按時間步指數衰減。
代碼:
在Gluon中,只需要在Trainer實例中通過momentum來指定動量超參數即可使用動量法。
d2l.train_gluon_ch7('sgd', {'learning_rate': 0.004, 'momentum': 0.9},features, labels)
AdaGrad算法
思想:
AdaGrad算法在迭代過程中不斷調整學習率,并讓目標函數自變量中每個元素都分別擁有自己的學習率。
使用AdaGrad算法時,自變量中每個元素的學習率在迭代過程中一直在降低(或不變)。
代碼:
通過名稱為“adagrad”的Trainer實例,我們便可使用Gluon提供的AdaGrad算法來訓練模型。
d2l.train_gluon_ch7('adagrad', {'learning_rate': 0.1}, features, labels)
RMSProp算法
思想:
RMSProp算法和AdaGrad算法的不同在于,RMSProp算法使用了小批量隨機梯度按元素平方的指數加權移動平均來調整學習率。
代碼:
通過名稱為“rmsprop”的Trainer實例,我們便可使用Gluon提供的RMSProp算法來訓練模型。注意,超參數 γ 通過gamma1指定。
d2l.train_gluon_ch7('rmsprop', {'learning_rate': 0.01, 'gamma1': 0.9},features, labels)
AdaDelta算法
思想:
AdaDelta算法沒有學習率超參數,它通過使用有關自變量更新量平方的指數加權移動平均的項來替代RMSProp算法中的學習率。
代碼:
通過名稱為“adadelta”的Trainer實例,我們便可使用Gluon提供的AdaDelta算法。它的超參數可以通過rho來指定。
d2l.train_gluon_ch7('adadelta', {'rho': 0.9}, features, labels)
Adam算法
思想:
Adam算法在RMSProp算法的基礎上對小批量隨機梯度也做了指數加權移動平均。
Adam算法使用了偏差修正。
代碼:
通過名稱為“adam”的Trainer實例,我們便可使用Gluon提供的Adam算法。
d2l.train_gluon_ch7('adam', {'learning_rate': 0.01}, features, labels)