简介
bert官方代码google-research/bert中有很多很强的设定,稍有改动就会导致结果很差。此文档简单总结如下。
google-research/bert版本:d66a146
该文档撰写时间:2019年4月11日
主要基于任务:run_classifier.py
一、学习率相关
代码使用了带warmup和decay的Adam(AdamWeightDecayOptimizer),这两个参数策略是动态学习率常用的,问题在于,官方代码中此两参数跟命令行参数num_train_epochs-训练轮数强关联,如果盲目修改代码而不恰当地设置num_train_epochs参数就会很糟糕。
一个重要、多次用的参数:训练总步数num_train_steps=num_train_steps = int(len(train_examples) / FLAGS.train_batch_size * FLAGS.num_train_epochs)是由样本数、batch_size和命令行参数num_train_epochs轮数计算出来的。【很重要,一定注意】
1.1 warmup
在训练的开始阶段使用较小的学习率再逐渐调整到预设初始学习率对训练有一定的帮助(某共识,出处未寻)。代码中使用了线性的调整,