Warm up是BERT
中一项重要的trick,它是什么,它究竟能带给我们什么,以及如何实现。
它是什么
Warm up是一种学习率的设置方法,其学习率的变化如下图所示。
- 假设我们使用随训练衰减的学习率设置方法,学习率的最大值是。
- 在模型训练的前步进行warm up,第步的学习率为
它能带给我们什么
有时候,在我们的数据集中,样本间的差异很大。比如情感分析任务,有些正负样本很简单,也很容易被模型学习到两者之间的差异。
这个电影真好看。
这个电影真垃圾。
然而,我们希望模型不止于此,模型应该能分辨更复杂、更隐晦的评论样本。
-
如果我们没做warming up,然后恰好在训练模型初期,喂给模型的样本都是简单的样本,那么模型很容易early over-fitting.
-
更糟糕的情况时,如果我们的学习率是随训练衰减的,那模型在一开始由于学习率很大,将“用力过猛”,可能会用很大的学习率学习到一些无关特征。
当然我们不用mini-batch的训练方式,而是让模型遍历整个数据集之后再进行训练会减弱第1种问题,但综合考虑模型最终收敛效果和资源消耗,mini-batch还是主流选择。
如何实现
tensorflow实现方式可以看这个人的代码:TensorFlow中的学习率“热身”