我正在使用以下参数训练模型:
Seq2SeqTrainingArguments(
output_dir = "./out",
overwrite_output_dir = True,
do_train = True,
do_eval = True,
per_device_train_batch_size = 2,
gradient_accumulation_steps = 4,
per_device_eval_batch_size = 8,
learning_rate = 1.25e-5,
warmup_steps = 1,
save_total_limit = 1,
evaluation_strategy = "epoch",
save_strategy = "epoch",
logging_strategy = "epoch",
num_train_epochs = 5,
gradient_checkpointing = True,
fp16 = True,
predict_with_generate = True,
generation_max_length = 225,
report_to = ["tensorboard"],
load_best_model_at_end = True,
metric_for_best_model = "wer",
greater_is_better = False,
push_to_hub = False,
)
训练完成后,我看文件
trainer_state.json
,学习率好像不是固定的。
以下是learning_rate和step的值:
学习率、步数
1.0006 e-05 1033
7.5062 e-06 2066
5.0058 e-06 3099
2.5053 e-06 4132
7.2618 e-09 5165
学习率似乎没有固定在1.25e-5(步骤1之后)。我错过了什么?
热身通常是学习率的增加。它从 0 开始,然后以 1(此处)步长线性增加到指定的学习率
1.25e-5
。
之后,默认情况下,线性(在其他情况下是余弦)学习率调度程序会衰减你的学习率。
要禁用衰减,请添加
lr_scheduler_type='constant'
。
Iirc,这也会禁用预热。如果您想要热身并随后保持恒定速率,请使用 constant_with_warmup
代替。