hijkzzz / pymarl2

Fine-tuned MARL algorithms on SMAC (100% win rates on most scenarios)
https://iclr-blogposts.github.io/2023/blog/2023/riit/
Apache License 2.0
633 stars 124 forks source link

COMA出现nan #33

Closed MejiroSilence closed 1 year ago

MejiroSilence commented 1 year ago

issue30中相同情况 但按照您的回复加大entropy loss无法解决 事实上这一步的错误在第一次训练计算entropy loss之前就会出现,修改entropy loss无效 具体出现错误的位置coma_learner的80行 dist_entropy = Categorical(pi).entropy().view(-1)

和pymarl进行对比,pymarl的coma算法的config中mask_before_softmax是FALSE,本仓库中是TRUE, 推测是这导致的问题 然后尝试将basic_controller.py中疑似导致nan的41行agent_outs[reshaped_avail_actions == 0] = -1e10修改后,不再出现nan

nan的问题应该就是这里导致的了

hijkzzz commented 1 year ago

感谢 有时间的话修复可以提交一个fix的补丁~

yuzhaoke commented 1 year ago

这个问题是线性层的输出一直变大导致softmax的梯度计算出现nan,在softmax前对网络输出值进行修改可以解决,具体代码如下 actor_outputs = actor_outputs/max(actor_outputs.max(),abs(actor_outputs.min()))