使用DDPG算法,env文件自己写的,代码可以运行,但是训练到最后actor总是选择action_space的边界,这可能是哪些原因造成的?
之前使用DQN算法的时候,也出现了这种现象,当时是两层的网络,隐含层节点也比较少,后来增加了层数和隐含层节点数,结果有变化,但也不是好的或者说没有选择正确的动作,所以怀疑是不是因为DQN对动作空间离散化粒度太小造成的,现在换成了DDPG,想着不对动作空间进行离散化,直接使用连续动作空间会好一些,结果总是选择边界值(action_bound.high),看一些帖子说调参,也进行了尝试,发现没有多大改善。
另外,由于动作空间的上下限并不是对称的,所以尝试修改了输出层的激活函数,原来为tf.nn.tanh,修改为tf.nn.relu有些变化,但是结果也不正确。
请大神不吝赐教,拜谢。
目前好像得到了解决,主要就是两点:
1、网络的输入输出都是归一化之后的,buffer里的{s,a,r,s_}都是同一个数量级的,
2、修改reward能指导网络正确选择动作进行输出
以上解决方案,仅供参考。
我也想知道这个问题,怎么解决啊!!!
我的一开始就一直只选择一个动作,求教有知道为什么的吗?
有点奇怪,我也是,相同的状态空间,奖励,dqn都能很快收敛,ddpg输出边界值来回打转