DBRL icon indicating copy to clipboard operation
DBRL copied to clipboard

损失很大

Open EVAKKKK opened this issue 2 years ago • 8 comments

@massquantity 网络损失从第三轮左右就变得非常大,ndcg一直很小,你的运行结果也是这样吗,不知道哪里的问题 image

EVAKKKK avatar Apr 01 '23 09:04 EVAKKKK

@massquantity 我回看你的博客后发现你当时也有发现这个问题,请问目前GitHub上面的项目是修改过后的吗,为什么损失还是那么的大 image

EVAKKKK avatar Apr 11 '23 13:04 EVAKKKK

@massquantity 我发现你有把求平均注释掉,可为什么我得到的效果还是这么差,so sad

EVAKKKK avatar Apr 12 '23 11:04 EVAKKKK

@massquantity 我发现你有把求平均注释掉,可为什么我得到的效果还是这么差,so sad

我跑这个程序的时候用DPPG的方法跑的结果确实不好,但是你试试用BCQ的方法。我不知道说得对不对,我觉得是因为所有数据都是在离线训练的,用DDPG算法的时候也没有说用训练好的策略去收集新数据再训练,整个代码的运行过程都是离线训练,所以用BCQ的方法得到的结果会好一些。我也在做这个方向,或许可以交流一下

WinnieZM avatar May 11 '23 08:05 WinnieZM

@WinnieZM 我觉得你的想法是对的,不管怎么调整这个学习率或者增大训练轮次都没有太大的效果,ndcg的指标也很小,方便加个联系方式吗 微信:625294067

EVAKKKK avatar May 12 '23 07:05 EVAKKKK

@massquantity 我发现你有把求平均注释掉,可为什么我得到的效果还是这么差,so sad

我跑这个程序的时候用DPPG的方法跑的结果确实不好,但是你试试用BCQ的方法。我不知道说得对不对,我觉得是因为所有数据都是在离线训练的,用DDPG算法的时候也没有说用训练好的策略去收集新数据再训练,整个代码的运行过程都是离线训练,所以用BCQ的方法得到的结果会好一些。我也在做这个方向,或许可以交流一下

我试了一下bcq,但是actor_loss一下子就变成了绝对值很大的负值,不知道是不是我实现的有问题。。。

isofun avatar Jul 13 '23 08:07 isofun

@massquantity 我发现你有把求平均注释掉,可为什么我得到的效果还是这么差,so sad

我跑这个程序的时候用DPPG的方法跑的结果确实不好,但是你试试用BCQ的方法。我不知道说得对不对,我觉得是因为所有数据都是在离线训练的,用DDPG算法的时候也没有说用训练好的策略去收集新数据再训练,整个代码的运行过程都是离线训练,所以用BCQ的方法得到的结果会好一些。我也在做这个方向,或许可以交流一下

我试了一下bcq,但是actor_loss一下子就变成了绝对值很大的负值,不知道是不是我实现的有问题。。。

这个代码我用几个方法跑都loss很大,但是BCQ至少可以看到reward是有变化的,我也不知道问题到底出现在哪里

WinnieZM avatar Jul 26 '23 02:07 WinnieZM

感谢回复!后续我发现是我自己的数据集没有加is_end的标记导致的,但是修复之后损失依旧会持续的缓慢上涨,请问对于这个问题你有什么看法吗?

在 2024-06-07 14:30:25,"FFFFlint" @.***> 写道:

应该是训练稳定性的问题吧,可以试试把policy delay加大一点(默认是1,也就是每经过一个step都会和critic一起更新),比如设置为4,这样actor更新的就慢一点,如果更新太频繁可能会因为critic还没有train得太好而导致actor的loss很大~

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

isofun avatar Jun 21 '24 03:06 isofun

感谢回复!后续我发现是我自己的数据集没有加is_end的标记导致的,但是修复之后损失依旧会持续的缓慢上涨,请问对于这个问题你有什么看法吗? 在 2024-06-07 14:30:25,"FFFFlint" @.> 写道: 应该是训练稳定性的问题吧,可以试试把policy delay加大一点(默认是1,也就是每经过一个step都会和critic一起更新),比如设置为4,这样actor更新的就慢一点,如果更新太频繁可能会因为critic还没有train得太好而导致actor的loss很大~ — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.>

不好意思,我之前认为我的回复有所欠缺,然后删除了,后面又进行了更多的实验。理论上来讲,actor的loss确实是会一直增大的,因为他是value function的模拟,当前step的value自然越大越好,如果actor loss突然失控,那么critic也会跟着崩掉,所以问题关键在于:

  • 限制actor loss的增长速度:可以在back propagation的时候,用gradient clipping, 限制actor的参数的gradient,不过具体要限制在什么位置,可以在每次更新actor前,print一下各个参数的gradient norm,然后再加限制。
  • 其次是用上作者给出的attention。 这两步做完后训练应该会趋向稳定,只是收束比较慢。另外一点关于reward这个metric,我将模型调试到比较稳定后,reward的变化也确实不是很明显,主要还是限制了gradient,模型学习较慢的缘故,因此我将n_rec这个参数设置到300(因为RecSys里常用的几个metrics都是Top100或者Top300,所以我就改了下试试),根据结果来看,确实是有变化的,loss也不会崩的太早了。

FFFFlint avatar Jun 21 '24 07:06 FFFFlint