mindspore2022/docs/api/api_python/nn/mindspore.nn.thor.rst

72 lines
4.0 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

mindspore.nn.thor
==================
.. py:class:: mindspore.nn.thor(net, learning_rate, damping, momentum, weight_decay=0.0, loss_scale=1.0, batch_size=32, use_nesterov=False, decay_filter=<function <lambda> at 0x0000029724CFA048>, split_indices=None, enable_clip_grad=False, frequency=100)
通过二阶算法THOR更新参数。
基于跟踪的、硬件驱动层定向的自然梯度下降计算THOR算法论文地址为
`THOR: Trace-based Hardware-driven layer-ORiented Natural Gradient Descent Computation <https://www.aaai.org/AAAI21Papers/AAAI-6611.ChenM.pdf>`_
更新公式如下:
.. math::
\begin{array}{ll}
& \textbf{Parameter:} \: \text{the learning rate } \gamma\text{, the damping parameter }\lambda \\
& \textbf{Init:} \: \lambda \leftarrow 0 \\
& A_{i-1}=\mathbb{E}\left[a_{i-1} a_{i-1}^{T}\right] \\
& G_{i}=\mathbb{E}\left[D_{s_i} D_{s_i}^{T}\right] \\
& w_{i}^{(k+1)} \leftarrow w_{i}^{(k)}-\gamma\left(\left(A_{i-1}^{(k)}+\lambda I\right)^{-1}
\otimes\left(G_{i}^{(k)}+\lambda I\right)^{-1}\right) \nabla_{w_{i}} J^{(k)}
\end{array}
:math:`a_{i-1}` 表示第i层的输入它是上一层的激活。
:math:`D_{s_i}` 表示第i层输出的loss函数的导数。
:math:`I` 代表单位矩阵。
:math:`\lambda` 表示 :math:`damping` 参数, :math:`g_i` 表示第i层的梯度。
:math:`\otimes` 表示克罗内克尔积, :math:`\gamma` 表示学习率。
.. note::
在分离参数组时,每个组的 `weight_decay` 将应用于对应参数。当不分离参数组时,优化器中的 `weight_decay` 将应用于名称中没有'beta'或 'gamma'的参数。
在分离参数组时如果要集中梯度请将grad_centralization设置为True但集中梯度只能应用于卷积层的参数。
如果非卷积层的参数设置为True则会报错。
为了提高参数组的性能,可以支持自定义参数的顺序。
**参数:**
- **net** (Cell) - 训练网络。
- **learning_rate** (Tensor) - 学习率的值。
- **damping** (Tensor) - 阻尼值。
- **momentum** (float) - float类型的超参数表示移动平均的动量。至少为0.0。
- **weight_decay** (int, float) - 权重衰减L2 penalty。必须等于或大于0.0。默认值0.0。
- **loss_scale** (float) - loss损失缩放系数。必须大于0.0。一般情况下使用默认值。默认值1.0。
- **batch_size** (int) - batch的大小。默认值32。
- **use_nesterov** (bool) - 启用Nesterov动量。默认值False。
- **decay_filter** (function) - 用于确定权重衰减应用于哪些层的函数只有在weight_decay>0时才有效。默认值lambda x: x.name not in []。
- **split_indices** (list) - 按A/G层A/G含义见上述公式索引设置allreduce融合策略。仅在分布式计算中有效。ResNet50作为一个样本A/G的层数分别为54层当split_indices设置为[26,53]时表示A/G被分成两组allreduce一组为0~26层另一组是27~53层。默认值None。
- **enable_clip_grad** (bool) - 是否剪切梯度。默认值False。
- **frequency** (int) - A/G和$A^{-1}/G^{-1}$的更新间隔。每隔frequency个stepA/G和$A^{-1}/G^{-1}$将更新一次。必须大于1。默认值100。
**输入:**
- **gradients** tuple[Tensor] - 训练参数的梯度,矩阵维度与训练参数相同。
**输出:**
tuple[bool]所有元素都为True。
**异常:**
- **TypeError** - `learning_rate` 不是张量。
- **TypeError** - `loss_scale``momentum``frequency` 不是浮点数。
- **TypeError** - `weight_decay` 既不是浮点数也不是整数。
- **TypeError** - `use_nesterov` 不是布尔值。
- **TypeError** - `frequency` 不是整数。
- **ValueError** - `loss_scale` 小于或等于0。
- **ValueError** - `weight_decay``momentum` 小于0。
- **ValueError** - `frequency` 小于2。