动量法
思想:
动量法使用了指数加权移动平均的思想。它将过去时间步的梯度做了加权平均,且权重按时间步指数衰减。
代码:
在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)