从头开始训练BERT时,损失不会正确减少

时间:2020-05-18 15:40:46

标签: pytorch huggingface-transformers

我现在正在使用huggingface/transformers 1m Wiki数据上从头开始 训练BERT模型,但是训练损失看起来很奇怪。在显示培训过程的详细信息之前,我将首先共享我使用的脚本和配置:

python run_language_modeling.py --output_dir $OUTPUT_DIR \
                                --model_type bert \
                                --mlm \
                                --config_name $CONFIG_AND_DATA_DIR \
                                --tokenizer_name $CONFIG_AND_DATA_DIR \
                                --do_train \
                                --do_eval \
                                --num_train_epochs 20 \
                                --learning_rate 1e-4 \
                                --save_steps 250 \
                                --per_gpu_train_batch_size 64 \
                                --evaluate_during_training \
                                --seed 404 \
                                --block_size 256 \
                                --train_data_file $DATA_DIR/train.txt \
                                --eval_data_file $DATA_DIR/valid.txt \
                                --evaluate_during_training \
                                --logging_steps 250 > log.bert

其中run_language_modeling.py是拥抱面提供的python脚本。除了词汇量之外,我没有更改BERT的配置。词汇表或标记器是使用huggingface/tokenizers进行训练的。

我放入了训练损失日志here。我们可以看到,经过20个纪元后,训练损失从7.84减少到7.61。太奇怪了,因为原始数据的行数仅为100万,所以使用这样的数据量,训练损失应该急剧减少。

我尝试了几种方法来解决此问题:

  1. 将批处理大小设置为GPU可以承受的最大大小。由于BERT仅预测每个时间步长有15%的令牌,因此大批量可以在训练时为模型提供更多错误信号。但是,这没有帮助。
  2. 也许学习率太小。我试图将learning_rate调整为5e-4,不幸的是,聚合损失甚至变得更糟。

感谢您的帮助!

0 个答案:

没有答案