学习率

在你的代码中有两个不同的学习率(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 是基于 lrfinal_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:是训练结束时希望学习率衰减到的目标值,用于让学习率逐渐减小,从而在训练后期模型能以更小的步伐进行更新。
posted @ 2024-09-15 17:07  GraphL  阅读(18)  评论(0编辑  收藏  举报