LibRec 学习笔记(十二):SBPR 的训练 Loss 为什么越来越大,没有收敛的迹象?

简单记录下困扰了我半个多月的问题:在跑 Librec 的 SBPR 算法代码的时候,发现 Loss 一直随着迭代次数在逐渐增加,这不是不正常吗???

一、我的疑问

最早的时候,只是拿 Librec 去跑一个数据集的实验结果,但是一不下心瞄了一眼输出的迭代结果,竟然发现 loss 一直在逐渐增大,跑了其他几个方法,都没有发现这样的情况,按理来说,越训练 loss 应该越小才对,所以到底哪里有问题???
在这里插入图片描述
说明

  • 上图的 loss 是每一次迭代的 loss 总值
  • delta_loss 是上一次迭代的 loss 值 - 本次迭代 loss 值

二、我的尝试解决办法

然后我开始尝试不断的解决问题,劝说自己:

  • 首先排查是不是不小心把对方的代码改了,这里没有。
  • 然后想想是不是迭代次数不够,慢慢的后面会逐渐收敛,所以把迭代次数设置的超级大,但 loss 还是一直在持续上升,并且不是上升一点点的那种。
  • 查询很多资料后,发现 loss 上升绝对是不正常的,所以我开始看原论文,发现原论文是用梯度上升求最大值,看了眼公式,既然是求最大值,那 loss 上升应该是对的,我这样想。

我以为这是我的最终答案,遂不管它。但是过了几天想想还是不对劲,loss 代表的是误差,误差一直在增大,怎么样都说不过去啊,只有 loss 缓慢更新才代表收敛啊,这样才叫训练好了啊,然后我就开始查梯度上升的资料,发现这方面的资料很少。咨询同门师弟也说,loss 一直上升是不正常的!!!

  • 后来查到如果 loss 上升的话,可以调整下学习率,每次迭代的时候都相应的更新学习率,loss 就会收敛。而在 librec 中确实有一个 bolddriver 的设置问题,设置为 true 的话,可以控制每次迭代的时候相应的更新学习率的大小,比如 loss 在增加,学习率在下一轮变小,loss 在减小,学习率在下一轮变大。这样设置后, 虽然前面的迭代次数 loss 都在上升,但是后面逐渐收敛。

我以为上面就是我的最终答案,只要改一个默认的参数设置 bolddriver就可以解决 。遂又开始不管它。(但SBPR的梯度上升的疑问一直留在我的

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值