mindformers.core.LearningRateWiseLayer

查看源文件
class mindformers.core.LearningRateWiseLayer(base_lr, lr_scale)[源代码]

学习率分层模块。

这种方法允许每层根据其特定需求调整学习率,从而实现更高效和有效的训练。每层的学习率由基准学习率与该层特定的缩放因子调节决定。

最初,每层的学习率基于线性缩放策略设定:

\[\eta_{t,l} = \eta_{\text{base}} \times \alpha_l\]

其中 \(\eta_{t,l}\) 是时间 \(t\) 时层 \(l\) 的学习率, \(\eta_{\text{base}}\) 是基准学习率, \(\alpha_l\) 是层 \(l\) 的缩放因子。

随着训练的进行,每层的学习率按照以下余弦退火调度进行调整:

\[\eta_{t,l} = \eta_{\text{end}} + \frac{1}{2}(\eta_{\text{base}} \times \alpha_l - \eta_{\text{end}})\left(1 + \cos\left(\frac{T_{cur}}{T_{max}}\pi\right)\right)\]

其中 \(T_{cur}\) 是自学习率上次重置以来完成的epoch数量, \(T_{max}\) 是下一次重置前的总epoch数。 \(\eta_{\text{end}}\) 代表训练结束时的最小学习率。

参数:
  • base_lr (mindspore.nn.learning_rate_schedule.LearningRateSchedule) - 基准学习率调度器。

  • lr_scale (float) - 学习率缩放值。

输入:
  • global_step (int) - 全局步数。

输出:

学习率。

样例:

>>> import mindspore as ms
>>> from mindformers.core import LinearWithWarmUpLR
>>> from mindformers.core import LearningRateWiseLayer
>>>
>>> ms.set_context(mode=ms.GRAPH_MODE)
>>> total_steps = 20
>>> warmup_steps = 10
>>> learning_rate = 0.005
>>>
>>> linear_warmup = LinearWithWarmUpLR(learning_rate=learning_rate,
...                                    warmup_steps=warmup_steps,
...                                    total_steps=total_steps)
>>> learning_rate_wise_layer = LearningRateWiseLayer(linear_warmup, 0.5)
>>> print(learning_rate_wise_layer(1))
0.00025
>>> print(learning_rate_wise_layer(15))
0.00125