先说结论,warmup_bias_lr是一个被忽略的重要超参数,尤其是在没有预训练权重的情况下,应该随着学习率的调整进行对应的缩放(采用正式训练时学习率的10倍为佳,在默认设置学习率0.01的SGD时和默认值0.1对应)。
使用Gold YOLOn进行训练,SGD1e-2的学习率运行良好,但是自己改进后的网络SGD有概率触发梯度爆炸,为了对比直接改用AdamW和1e-3的学习率,此时验证集结果出现大幅波动(如MAP从0.16跳变到1e-7量级再回到0.09之类的,P和R也有30%上下的波动)
先后尝试调节学习率,学习率的衰减方式和幅度,权重衰减和warmup轮数均效果有限。而且初始学习率下降到3e-4时进一步恶化,无法冲出局部最优导致结果极差。(其实这里已经有提醒了)
直到后面看到这个图,发现warmup对网络的收敛性能影响比想象中的大很多,于是细致地过了一遍超参数,发现原始网络的warmup_bias_lr为0.1,在使用AdamW的情况下这显然高到无法接受,于是果断改0.01,验证集波动的情况有了较大的缓解(如下图),至少是稳步上升的情况。学习率换3e-4的时候也可以正常收敛。
最后分析这种现象出现的原因,可能warmup时过大的偏置学习率给了AdamW巨大的惯性,因而导致warmup不仅没有稳定骨干网络的参数,反而起了副作用。采用1e-3这种偏大的学习率时,尚且能够部分抵消这巨大的惯性,因而表现出剧烈的震荡,当改用3e-4这种偏小的学习率时,甚至无法短时间内抵消这份惯性,随着学习率的衰减,自然而然便陷入了局部最优。
事实证明,对于Gold-YOLO这种带attention结构的网络,warmup的重要性可能高过之前几个全卷积的,如果其学习率不随着正常的学习率对应更改,可能会带来较大的副作用。