问题现场
最近使用tensorflow训练模型,通过tensorboard查看train auc、eval auc、 loss曲线走势。loss如下,这个跟曲线走势跟书本上的曲线走势,差异很大,看到这个loss,波动很大(曾经见过的loss值大约在0.0XX的一个数值上),并且没有收敛的趋势,有点慌了,第一次面对这种情况,跟书上的知识还不一致,自己知识拓展也比较贫瘠,不知如何是好...
请教了组内的大神,给出了几点建议,我觉得非常有道理:
tricks:
- 推荐数据的loss曲线没有太大的参考意义,因为每天的数据分布差异性比较大,比如新用户、新item;只要loss不会越来越大,在合理范围内波动,都可以接受。
- 搜索的数据loss曲线符合书本的曲线走势,慢慢收敛的形式,因为搜索query相对稳定,不会产生大量新的query。
尝试的解决方法:
1.增加epoch,loss曲线有收敛的趋势。从1--->5。或许更大的情况下,收敛趋势会更好,但是线上效果如何呢?会不会太多轮次,训练的模型过拟合,对线上请求预测的不准确?这个需要多做几次实验。观察eval auc,模拟线上环境。
2.增加训练数据,这个没有看到明显的loss收敛。
loss不收敛及其解决方法
此处包含两种情况,一种是loss一直在震荡,一种是loss下降一点后不再下降到理想水平,而验证集上的表现保持不变。
1.保持需要的batchsize不变。
2.查看是否有梯度回传。
3.查看数据是否有问题,如标签错乱等现象。
4.调节学习率,从大向小调,建议每次除以5,(我的项目即是因为学习率过大过小都不收敛引起的)。
5.如果学习率调好后,需要调节batchsize大小,如batchsize调大2倍,则将学习率对应调大(项目测试调大2~3倍OK),反之,学习率对应调小。
未完待续ing