我有一个可以学习的 DQN 算法(损失收敛到 0),但不幸的是它学习了一个 Q 值函数,使得 2 个可能 Action 中的每一个的 Q 值都非常相似。值得注意的是,每次观察时 Q 值变化很小。
详细信息:
该算法播放来自 OpenAI Gym 的 CartPole-v1,但使用屏幕像素作为观察值,而不是提供的 4 个值
我提供的奖励函数提供的奖励为:如果游戏没有结束则为 0.1,如果游戏结束则为 -1
衰减率(gamma)为 0.95
前 3200 个操作的 epsilon 为 1(以填充一些重播内存),然后将超过 100,000 个步骤退火到值 0.01
回放内存大小为 10,000
转换网络的架构是:
- 大小为 screen_pixels 的输入层
- 卷积层 1 具有 32 个滤波器,具有内核 (8,8) 和步幅 (4,4)、relu 激活函数,并在输出上填充为与输入相同的大小
- 第 2 层具有 64 个滤波器,具有内核 (4,4) 和步幅 (2,2)、relu 激活函数,并在输出上填充为与输入相同的大小
- 第 3 层卷积层,具有 64 个滤波器,具有内核 (3,3) 和步幅 (1,1)、relu 激活函数,并在输出上填充为与输入相同的大小
- 展平层(这是为了改变数据的形状,使其能够输入到完全连接的层中)
- 具有 512 个节点和 relu 激活函数的全连接层
- 具有 2 个节点( Action 空间)的输出全连接层
- 卷积神经网络的学习率为0.0001
- 代码采用keras开发,采用经验回放和双深度q学习
- 通过灰度化、调整大小、裁剪,然后将 4 个图像堆叠在一起,将原始图像从 (400, 600, 3) 缩小到 (60, 84, 4),然后将其提供给转换网络
- 目标网络每 2 次在线网络更新就会更新一次。
最佳答案
只要游戏没有结束,就为每一步提供 0.1 的正奖励可能会使游戏超过 -1 的惩罚几乎无关紧要。特别是考虑到您正在使用的折扣系数。
如果不查看源代码,很难做出判断,但我最初建议您在游戏结束时仅提供负奖励,并删除正奖励。
关于machine-learning - 为什么 DQN 会为所有观察的 Action 空间 (2) 中的所有 Action 提供相似的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45462615/