pymc.adadelta#
- pymc.adadelta(loss_or_grads=None, params=None, learning_rate=1.0, rho=0.95, epsilon=1e-06)[源代码]#
Adadelta 更新
根据累积梯度与累积更新的比率调整学习率,参见 [1] 和注释以获取进一步描述。
- 参数:
- loss_or_grads符号表达式或 python:list 的表达式
一个标量损失表达式,或一个梯度表达式列表
- paramspython:共享变量的列表
用于生成更新表达式的变量
- learning_ratepython:float 或符号标量
学习率控制更新步骤的大小
- rhopython:float 或符号标量
平方梯度移动平均衰减因子
- epsilonpython:float 或符号标量
数值稳定性的小值增加
- 返回:
OrderedDict
一个字典,将每个参数映射到其更新表达式
注释
rho 应在 0 和 1 之间。rho 值接近 1 时,移动平均值衰减缓慢;rho 值接近 0 时,移动平均值衰减快速。
rho = 0.95 和 epsilon=1e-6 在论文中被建议使用,并报告称适用于多个数据集(MNIST,语音)。
在论文中,没有考虑学习率(因此 learning_rate=1.0)。可能最好保持这个值。epsilon 对于第一次更新非常重要(因此分子不会变为 0)。
使用步长 eta 和衰减因子 rho 计算学习率如下:
\[ \begin{align}\begin{aligned}\begin{split}r_t &= \\rho r_{t-1} + (1-\\rho)*g^2\\\\ \\eta_t &= \\eta \\frac{\\sqrt{s_{t-1} + \\epsilon}} {\sqrt{r_t + \epsilon}}\\\\ s_t &= \\rho s_{t-1} + (1-\\rho)*(\\eta_t*g)^2\end{split}\\\begin{split}r_t &= \\rho r_{t-1} + (1-\\rho)*g^2\\\\ \\eta_t &= \\eta \\frac{\\sqrt{s_{t-1} + \\epsilon}} {\sqrt{r_t + \epsilon}}\\\\ s_t &= \\rho s_{t-1} + (1-\\rho)*(\\eta_t*g)^2\end{split}\end{aligned}\end{align} \]优化器可以在不传入 loss_or_grads 和 params 的情况下调用,在这种情况下会返回一个偏函数。
参考文献
[1]Zeiler, M. D. (2012): ADADELTA: 一种自适应学习率方法。arXiv 预印本 arXiv:1212.5701。
示例
>>> a = pytensor.shared(1.) >>> b = a*2 >>> updates = adadelta(b, [a], learning_rate=.01) >>> isinstance(updates, dict) True >>> optimizer = adadelta(learning_rate=.01) >>> callable(optimizer) True >>> updates = optimizer(b, [a]) >>> isinstance(updates, dict) True