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