You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

mindspore.nn.thor.rst 4.1 kB

4 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. mindspore.nn.thor
  2. ==================
  3. .. 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)
  4. 通过二阶算法THOR更新参数。
  5. 基于跟踪的、硬件驱动层定向的自然梯度下降计算(THOR)算法论文地址为:
  6. `THOR: Trace-based Hardware-driven layer-ORiented Natural Gradient Descent Computation <https://www.aaai.org/AAAI21Papers/AAAI-6611.ChenM.pdf>`_
  7. 更新公式如下:
  8. .. math::
  9. \begin{array}{ll} \\
  10. A_i = a_i{a_i}^T \\
  11. G_i = D_{s_i}{ D_{s_i}}^T \\
  12. m_i = \beta * m_i + ({G_i^{(k)}}+\lambda I)^{-1}) g_i ({\overline A_{i-1}^{(k)}}+\lambda I)^{-1} \\
  13. w_i = w_i - \alpha * m_i \\
  14. \end{array}
  15. :math:`D_{s_i}` 表示第i层输出的loss函数的导数。
  16. :math:`a_{i-1}` 表示第i层的输入,它是上一层的激活。
  17. :math:`\beta` 表示动量, :math:`I` 代表单位矩阵。
  18. :math:`\overline A` 表示矩阵A的转置。
  19. :math:`\lambda` 表示'damping', :math:`g_i` 表示第i层的梯度。
  20. :math:`\otimes` 表示克罗内克尔积, :math:`\alpha` 表示学习率。
  21. .. note::
  22. 在分离参数组时,如果权重衰减为正,则每个组的权重衰减将应用于参数。当不分离参数组时,如果 `weight_decay` 为正数,则API中的 `weight_decay` 将应用于名称中没有'beta'或 'gamma'的参数。
  23. 在分离参数组时,如果要集中梯度,请将grad_centralization设置为True,但梯度集中只能应用于卷积层的参数。
  24. 如果非卷积层的参数设置为True,则会报错。
  25. 为了提高参数组的性能,可以支持参数的自定义顺序。
  26. **参数:**
  27. - **net** (Cell) - 训练网络。
  28. - **learning_rate** (Tensor) - 学习率的值。
  29. - **damping** (Tensor) - 阻尼值。
  30. - **momentum** (float) - float类型的超参数,表示移动平均的动量。至少为0.0。
  31. - **weight_decay** (int, float) - 权重衰减(L2 penalty)。必须等于或大于0.0。默认值:0.0。
  32. - **loss_scale** (float) - loss缩放的值。必须大于0.0。一般情况下,使用默认值。默认值:1.0。
  33. - **batch_size** (int) - batch的大小。默认值:32。
  34. - **use_nesterov** (bool) - 启用Nesterov动量。默认值:False。
  35. - **decay_filter** (function) - 用于确定权重衰减应用于哪些层的函数,只有在weight_decay>0时才有效。默认值:lambda x: x.name not in []。
  36. - **split_indices** (list) - 按A/G层(A/G含义见上述公式)索引设置allreduce融合策略。仅在分布式计算中有效。ResNet50作为一个样本,A/G的层数分别为54层,当split_indices设置为[26,53]时,表示A/G被分成两组allreduce,一组为0~26层,另一组是27~53层。默认值:None。
  37. - **enable_clip_grad** (bool) - 是否剪切梯度。默认值:False。
  38. - **frequency** (int) - A/G和$A^{-1}/G^{-1}$的更新间隔。当频率等于N(N大于1)时,A/G和$A^{-1}/G^{-1}$将每N步更新一次,和其他步骤将使用过时的A/G和$A^{-1}/G^{-1}$更新权重。默认值:100。
  39. **输入:**
  40. - **gradients** (tuple[Tensor]) - 训练参数的梯度,矩阵维度与训练参数相同。
  41. **输出:**
  42. tuple[bool],所有元素都为True。
  43. **异常:**
  44. - **TypeError** - `learning_rate` 不是张量。
  45. - **TypeError** - `loss_scale` 、 `momentum` 或 `frequency` 不是浮点数。
  46. - **TypeError** - `weight_decay` 既不是浮点数也不是整数。
  47. - **TypeError** - `use_nesterov` 不是布尔值。
  48. - **TypeError** - `frequency` 不是整数。
  49. - **ValueError** - `loss_scale` 小于或等于0。
  50. - **ValueError** - `weight_decay` 或 `momentum` 小于0。
  51. - **ValueError** - `frequency` 小于2。