深度学习模型训练过程中修改学习率

时间:2021-02-01 05:42:01

标签: deep-learning pytorch huggingface-transformers language-model gpt-2

以下是配置 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],
 )

时期数100learning_rate0.00004,还有early_stopping strong> 将耐心值配置为 3

该模型运行了 5/100 个 epoch,并注意到 loss_value 的差异可以忽略不计。最新的检查点保存为 checkpoint-latest

现在我可以将 learning_rate 可能是 0.010.00004 修改为从最近保存的检查点 - checkpoint-latest 恢复训练吗?这样做会有效率吗?

或者要使用新的 learning_rate 值进行训练,我应该从头开始训练吗?

2 个答案:

答案 0 :(得分:3)

不,您不必重新开始训练。

改变学习率就像改变你的模型在由你的损失函数决定的方向所采取的步骤。

您也可以将其视为迁移学习,其中模型具有一些经验(无论多么少或无关紧要)并且 weights 处于最有可能更好的状态而不是一个随机初始化的

事实上,在训练中改变学习率被认为是深度学习中的一门艺术,如果你有非常非常好的理由这样做,你应该改变它。

如果您或其他人想要“重现”您的模型的结果,您可能想写下您何时(为什么、什么等)这样做。

答案 1 :(得分:0)

Pytorch 提供了几种调整 learning_rate 的方法:torch.optim.lr_scheduler。 检查文档以了解用法 https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate