在复现一个模型的时候,因为源代码给的很急,所以感觉很多地方没完善,特别是关于训练集loss和开发集loss的可视化。下面第一张图片是源代码给出的学习率调节方式跑出的结果:
源代码学习率是epoch在20之前都是1e-4,20之后是1e-5,可以看出,训练集loss没什么太大变化,
但是valid loss有较大波动,特别是在epoch=7的附近,所以我将第七个epoch的学习率设置为1e-5,结果如下:
可以看出,在第七个epoch,train loss有个小下降,同时,valid loss大跳跃消失了,但是在后面的epoch又出现了尖峰,所以我将第五个epoch后所有学习率设置为1e-5,结果如下:
可以看出,train loss有了比较光滑的下降趋势,而valid loss基本没有尖峰了。
到此,总结一下,如果loss波动过大,就表示学习率设置·过大了,一直在最优值附近徘徊,但学习率也不可设置过小,会导致寻找最优值速度过慢,从上面这些图可以看出,valid loss最优值基本上在0.39左右了,再怎么调学习率也只是减小波动,毕竟后面一句没有下降趋势了,而对于train loss来说,可以在第二个epoch或者第三个将学习率降低以达到更好的效果。
补档:学习率对loss和指标的影响还是很大的,如下面两张图:
第二张图仅仅是将十个epoch前面学习率改为1e-4,loss就有这么大的下降,同时指标也有两到三个百分点的提升,可见学习率的调整还是很重要的。