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