我有一个学习的DQN算法(损失收敛到0)但不幸的是它学习了Q值函数,使得两个可能动作中的每一个的两个Q值非常相似 . 值得注意的是,Q值在每次观察时变化很小 .
细节:
-
该算法从OpenAI Gym中播放CartPole-v1,但使用屏幕像素作为观察而不是提供的4个值
-
我提供的奖励功能提供以下奖励:如果不是游戏结束则为0.1,如果游戏结束则为-1
-
衰减率(gamma)为0.95
-
epsilon为前3200个动作为1(填充部分重放内存),然后退回超过100,000步,值为0.01
-
重放内存的大小为10,000
-
转换网的架构是:
-
输入图层大小为screen_pixels
-
转换层1具有32个带内核(8,8)和步幅(4,4)的过滤器,relu激活功能并在输出上填充为与输入相同的大小
-
conv layer 2带有64个带内核(4,4)和stride(2,2)的过滤器,relu激活功能,并在输出上填充为与输入相同的大小
-
转换层3有64个带内核(3,3)和步幅(1,1)的过滤器,relu激活函数并在输出上填充为与输入相同的大小
-
一个展平图层(这是为了改变数据的形状,然后将其输入完全连接的图层)
-
具有512个节点的完全连接层和relu激活功能
-
具有2个节点的输出完全连接层(动作空间)
-
卷积神经网络的学习率为0.0001
-
该代码是在keras中开发的,使用经验重播和双深q学习
-
原始图像从(400,600,3)减少到(60,84,4),通过灰度,大小调整,裁剪,然后将4个图像堆叠在一起,然后再将其提供给转发网络
-
目标网络每2个在线网络更新更新一次 .
1 回答
只要游戏没有结束,每一步都能提供0.1的积极奖励,这可能会使游戏超过-1的惩罚几乎无关紧要 . 特别是考虑到您使用的折扣因素 .
如果不查看您的源代码很难判断,但我最初建议您在游戏结束时仅提供负面奖励并取消积极奖励 .