学习率
在你的代码中有两个不同的学习率(lr),它们分别是通过 --lr 和 --final_lr 参数定义的。下面是对这两个学习率的解释:
1. --lr: 初始学习率
parser.add_argument('--lr', type=float, default=0.003, help='learning rate')
- 含义:这是模型训练时的初始学习率(
lr),用于在优化器中定义训练初始时的学习率。它代表了模型参数更新的初始步伐。 - 使用场景:在优化器中使用:
此处optimizer = torch.optim.Adam(self.model.parameters(), lr=self.config.lr)self.config.lr就是通过--lr参数设置的初始学习率。 - 作用:这是在训练开始时模型更新参数的速度。在代码中默认值为
0.003。
2. --final_lr: 最终学习率
parser.add_argument('--final_lr', type=float, default=1e-3, help='exponential decay from lr')
- 含义:这是在训练的末期希望学习率逐渐减小到的目标值(
final_lr)。它用于控制学习率从初始学习率lr逐步衰减到final_lr的过程。 - 指数衰减机制:在代码中,你使用了一个指数衰减的学习率调度器:
这里self.log_alpha = log(config.final_lr / config.lr) / self.max_step lr_lambda = lambda step: exp(log_alpha * (step + 1)) # 相当于 alpha^{step} scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lr_lambda)self.log_alpha是基于lr和final_lr计算的,用来确定学习率随时间衰减的速率。LambdaLR调度器使用这个log_alpha来根据训练步数更新学习率,最终使学习率逐步接近final_lr。 - 作用:通过这个指数衰减机制,学习率在整个训练过程中逐步减小,保证在训练的后期,模型的学习步伐变得更小,从而提高模型的稳定性。
学习率的变化过程:
- 训练开始时,学习率为
--lr(即config.lr,例如0.003)。 - 随着训练的进行,学习率会根据指数衰减公式逐渐减少,最终接近
--final_lr(即config.final_lr,例如1e-3)。 - 在
get_scheduler()函数中定义了这个衰减过程,通过lr_lambda函数,每个 batch 之后学习率都会进行一次调整。
总结:
- 初始学习率(
lr):在训练开始时使用,决定模型参数初始的更新步伐。 - 最终学习率(
final_lr):是训练结束时希望学习率衰减到的目标值,用于让学习率逐渐减小,从而在训练后期模型能以更小的步伐进行更新。

浙公网安备 33010602011771号