pymc.adagrad#

pymc.adagrad(loss_or_grads=None, params=None, learning_rate=1.0, epsilon=1e-06)[源代码]#

Adagrad 更新

通过将学习率除以累积平方梯度的平方根来缩放学习率。进一步描述请参见 [1]

参数:
loss_or_grads: 符号表达式或表达式列表

一个标量损失表达式,或一个梯度表达式列表

参数: 共享变量的列表

用于生成更新表达式的变量

learning_rate: float 或符号标量

学习率控制更新步骤的大小

epsilon: float 或符号标量

数值稳定性的小值增加

返回:
OrderedDict

一个字典,将每个参数映射到其更新表达式

注释

使用步长 eta,Adagrad 计算在时间步 t 时特征 i 的学习率为:

\[\eta_{t,i} = \frac{\eta}{\sqrt{\sum^t_{t^\prime} g^2_{t^\prime,i}+\epsilon}} g_{t,i}\]

因此,学习率是单调递减的。

Epsilon 不包含在典型的公式中,参见 [2]

优化器可以在不传入 loss_or_grads 和 params 的情况下调用,在这种情况下会返回一个偏函数。

参考文献

[1]

Duchi, J., Hazan, E., & Singer, Y. (2011): 自适应次梯度方法用于在线学习和随机优化。JMLR, 12:2121-2159.

[2]

Chris Dyer: AdaGrad 笔记。http://www.ark.cs.cmu.edu/cdyer/adagrad.pdf

示例

>>> a = pytensor.shared(1.)
>>> b = a*2
>>> updates = adagrad(b, [a], learning_rate=.01)
>>> isinstance(updates, dict)
True
>>> optimizer = adagrad(learning_rate=.01)
>>> callable(optimizer)
True
>>> updates = optimizer(b, [a])
>>> isinstance(updates, dict)
True