forked from mindspore-Ecosystem/mindspore
57 lines
3.1 KiB
ReStructuredText
57 lines
3.1 KiB
ReStructuredText
mindspore.ops.ApplyCenteredRMSProp
|
||
====================================
|
||
|
||
.. 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` 为零的迭代中被更新。
|
||
|
||
参数:
|
||
- **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。
|