mindspore/docs/api/api_python/ops/mindspore.ops.ApplyCentered...

57 lines
3.1 KiB
ReStructuredText
Raw Normal View History

mindspore.ops.ApplyCenteredRMSProp
2022-08-30 16:34:32 +08:00
====================================
.. py:class:: mindspore.ops.ApplyCenteredRMSProp(use_locking=False)
居中RMSProp算法优化器。
请参考源代码中的用法: :class:`mindspore.nn.RMSProp`
更新公式如下:
.. math::
\begin{array}{ll} \\
g_{t+1} = \rho g_{t} + (1 - \rho)\nabla Q_{i}(w) \\
s_{t+1} = \rho s_{t} + (1 - \rho)(\nabla Q_{i}(w))^2 \\
m_{t+1} = \beta m_{t} + \frac{\eta} {\sqrt{s_{t+1} - g_{t+1}^2 + \epsilon}} \nabla Q_{i}(w) \\
w = w - m_{t+1}
\end{array}
其中 :math:`w` 代表 `var` :math:`w` 将更新。
:math:`g_{t+1}` 代表 `mean_gradient` :math:`g_{t}` 是上一步的 :math:`g_{t+1}`
:math:`s_{t+1}` 代表 `mean_square` :math:`s_{t}` 是上一步的 :math:`s_{t+1}`
:math:`m_{t+1}`代表 `moment` :math:`m_{t}` 是上一步的 :math:`m_{t+1}`
:math:`\rho` 代表 `decay`:math:`\beta` 是动量,代表 `momentum`
:math:`\epsilon` 是一个添加在分母上的较小值,以避免被零除,表示 `epsilon`
:math:`\eta` 代表 `learning_rate`:math:`\nabla Q_{i}(w)` 代表 `grad`
.. note::
`ApplyCenteredRMSProp``ApplyRMSProp` 的区别在于前者使用居中RMSProp算法而居中RMSProp算法使用居中第二矩阵的估计归一化的方差而不是使用不确定的第二矩阵的正则RMSProp。这通常有助于训练但在计算和内存方面消耗更大。
.. warning::
在此算法的密集实现中, `mean_gradient``mean_square``moment``grad` 为零时仍将被更新。但在稀疏实现中, `mean_gradient``mean_square``moment` 不会在 `grad` 为零的迭代中被更新。
2022-07-22 14:07:38 +08:00
参数:
- **use_locking** (bool) - 是否对参数更新增加锁保护。默认值False。
输入:
- **var** (Tensor) - 要更新的权重。
- **mean_gradient** (Tensor) - 均值梯度,数据类型必须与 `var` 相同。
- **mean_square** (Tensor) - 均方梯度,数据类型必须与 `var` 相同。
- **moment** (Tensor) - `var` 的增量,数据类型必须与 `var` 相同。
- **grad** (Tensor) - 梯度,数据类型必须与 `var` 相同。
- **learning_rate** (Union[Number, Tensor]) - 学习率。必须是float或Scalar的Tensor数据类型为float16或float32。
- **decay** (float) - 衰减率。
- **momentum** (float) - 动量。
- **epsilon** (float) - 添加在分母上的较小值,以避免被零除。
输出:
Tensor更新后的数据。
异常:
- **TypeError** - 如果 `use_locking` 不是bool。
- **TypeError** - 如果 `var``mean_gradient``mean_square``moment``grad` 不是Tensor。
- **TypeError** - 如果 `learing_rate` 既不是数值型也不是Tensor。
- **TypeError** - 如果 `learing_rate` 的数据类型既不是float16也不是float32。
- **TypeError** - 如果 `decay``momentum``epsilon` 不是float。