pymc.nesterov_momentum#
- pymc.nesterov_momentum(loss_or_grads=None, params=None, learning_rate=0.001, momentum=0.9)[源代码]#
带有Nesterov动量的随机梯度下降(SGD)更新
生成以下形式的更新表达式:
velocity := momentum * velocity - learning_rate * gradient
param := param + momentum * velocity - learning_rate * gradient
- 参数:
- loss_or_grads: 符号表达式或表达式列表
一个标量损失表达式,或一个梯度表达式列表
- 参数: 共享变量的列表
用于生成更新表达式的变量
- learning_rate: float 或符号标量
学习率控制更新步骤的大小
- momentum: float 或符号标量, 可选
要应用的动量大小。较高的动量会导致在更多的更新步骤中进行平滑处理。默认为0.9。
- 返回:
OrderedDict
一个字典,将每个参数映射到其更新表达式
参见
apply_nesterov_momentum
应用动量到更新的函数
注释
更高的动量也会导致更大的更新步长。为了抵消这一点,你可以选择性地将你的学习率按 1 - 动量 进行缩放。
Nesterov 动量(或 Nesterov 加速梯度)的经典公式要求在参数空间的预测下一个位置评估梯度。在这里,我们使用在 lisa-lab/pylearn2#136 中描述的公式,该公式允许在当前参数处评估梯度。
优化器可以在不传入 loss_or_grads 和 params 的情况下调用,在这种情况下会返回一个偏函数。
示例
>>> a = pytensor.shared(1.) >>> b = a*2 >>> updates = nesterov_momentum(b, [a], learning_rate=.01) >>> isinstance(updates, dict) True >>> optimizer = nesterov_momentum(learning_rate=.01) >>> callable(optimizer) True >>> updates = optimizer(b, [a]) >>> isinstance(updates, dict) True