为什么设置warmup_steps=1并不能固定学习率?

问题描述 投票:0回答:1

我正在使用以下参数训练模型:

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_ratestep 的值:

学习率、步数


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之后) 我错过了什么?

deep-learning huggingface-transformers huggingface-trainer
1个回答
0
投票

热身通常是学习率的增加。它从 0 开始,然后以 1(此处)步长线性增加到指定的学习率

1.25e-5

之后,默认情况下,线性(在其他情况下是余弦)学习率调度程序会衰减你的学习率。

要禁用衰减,请添加

lr_scheduler_type='constant'
。 Iirc,这也会禁用预热。如果您想要热身并随后保持恒定速率,请使用
constant_with_warmup
代替。

© www.soinside.com 2019 - 2024. All rights reserved.