在预训练时使用Warm Up的理解
之前在wikitext-103上预训练Bert-base的时候,发现loss曲线会平一段然后再下降,大概是像下图这样:横轴是step,纵轴是loss
当时的warm up是前16K step。一直以为第二次下降是因为warm up结束后,learning rate降下来,然后loss又有一次下降。后来在wikipedia上跑发现没有中间这一段平的loss了。所以猜想实际原因不是warmup。搜索了一下发现这个loss曲线是很容易出现的一种情况:loss plateau。陷入了某个简单的局部最优,然后一段时间后才跳出来。有一篇20年的文章提出了一种新的loss来解决《PLATEAU PHENOMENON IN GRADIENT DESCENT TRAINING
OF RELU NETWORKS: EXPLANATION, QUANTIFICATION AND
AVOIDANCE》。还有一个github库和博客也可以做这个.
但是还是不太确定warm up是否会让loss curve有两段下降。所以搜索了一下使用warm up,发现似乎确实没有这个效果。大家使用warm up的原因主要有两个:
- 网络比较深,想要稳定深层的参数。
- 使用large batch(LB)的时候。
可以从A Closer Look at Deep Learning Heuristics: Learning rate restarts, Warmup and Distillation这个工作中看出来这两个的影响,当大batch的时候,validation效果在有warmup的时候更好(图a)。当网络较深的时候,用warmup和冻结深层参数的效果一样(图d)。