在深度学习模型训练中修改学习率
Posted
技术标签:
【中文标题】在深度学习模型训练中修改学习率【英文标题】:Modifying the Learning Rate in the middle of the Model Training in Deep Learning 【发布时间】:2021-05-05 07:59:51 【问题描述】:以下是配置 TrainingArguments 的代码,该代码来自 HuggingFace transformers 库,用于微调 GPT2 语言模型。
training_args = TrainingArguments(
output_dir="./gpt2-language-model", #The output directory
num_train_epochs=100, # number of training epochs
per_device_train_batch_size=8, # batch size for training #32, 10
per_device_eval_batch_size=8, # batch size for evaluation #64, 10
save_steps=100, # after # steps model is saved
warmup_steps=500,# number of warmup steps for learning rate scheduler
prediction_loss_only=True,
metric_for_best_model = "eval_loss",
load_best_model_at_end = True,
evaluation_strategy="epoch",
learning_rate=0.00004, # learning rate
)
early_stop_callback = EarlyStoppingCallback(early_stopping_patience = 3)
trainer = Trainer(
model=gpt2_model,
args=training_args,
data_collator=data_collator,
train_dataset=train_dataset,
eval_dataset=test_dataset,
callbacks = [early_stop_callback],
)
epochs 为 100 和 learning_rate 为 0.00004 以及 early_stopping strong> 配置了耐心值为 3。
模型运行了 5/100 个 epoch,发现 loss_value 的差异可以忽略不计。最新的检查点保存为checkpoint-latest
。
现在我可以将learning_rate
从0.00004
修改为0.01
并从最新保存的检查点-checkpoint-latest
恢复训练吗?这样做会有效率吗?
或者要使用新的learning_rate
值进行训练,我应该从头开始训练吗?
【问题讨论】:
我有类似的情况,模型收敛但非常很慢,所以我想尝试从具有更高学习率的检查点继续。我也在使用 Trainer,它以一种让我不太清楚如何调整 lr 的方式来总结事情。你是怎么做到的? 【参考方案1】:不,您不必重新开始训练。
改变学习率就像改变你的模型在由你的损失函数决定的方向上的步幅。
您也可以将其视为迁移学习,其中模型具有一些经验(无论多么少或无关紧要)并且weights
处于很可能优于随机初始化一个。
事实上,在训练中改变学习率被认为是深度学习中的一门艺术,如果你有非常非常好的理由这样做,你应该改变它。
如果您或其他人想要“重现”您的模型的结果,您可能想写下您何时(为什么、什么等)做了它。
【讨论】:
【参考方案2】:Pytorch 提供了几种方法来调整 learning_rate:torch.optim.lr_scheduler。 查看文档以了解使用情况https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate
【讨论】:
问题与训练中途修改learning_rate有关。以上是关于在深度学习模型训练中修改学习率的主要内容,如果未能解决你的问题,请参考以下文章
[人工智能-深度学习-16]:神经网络基础 - 模型训练超参数 - 学习率(learning rate)