我正在尝试实现DQN和DDQN(均带有经验回复)以解决OpenAI AI-Gym Cartpole环境。这两种方法有时都能(但并非总是)学习并解决此问题。
我的网络只是前馈网络(我尝试使用1和2个隐藏层)。在DDQN中,我在DQN中创建了一个网络,在DDQN中创建了两个网络,一个用于评估Q值的目标网络,以及一个用于选择最佳操作的主要网络,训练该主要网络,并在某些情节之后将其复制到目标网络。>
DQN中的问题是:
DDQN中的问题是:
我曾尝试调整批次大小,学习率,隐藏层中神经元的数量,隐藏层数,探索率,但不稳定仍然存在。
网络规模和批量大小是否有经验法则?我认为较大的网络和较大的批处理规模将增加稳定性。
是否可以使学习稳定?任何评论或参考表示赞赏!
答案 0 :(得分:1)
这类问题经常发生,您不应该放弃。首先,当然,您应该再检查一两次代码是否正确-尝试将您的代码与其他实现进行比较,查看损失函数的行为等。如果您确定自己的代码很好,并且,正如您所说的,模型可以不时学习任务,大概是-您应该开始尝试使用超参数。
您的问题似乎与探索技术,学习率,更新目标网络的方式以及体验重播记忆等超参数有关。我不会处理隐藏的图层大小-找到模型一次学习的值并保持不变。
答案 1 :(得分:1)
我还一直认为问题出在(D)DQN不稳定,或者“ CartPole”有漏洞或“不稳定”。
搜索了几周后,我检查了我的代码几次,更改了每个设置,但只有一个...
将折扣系数设置为1.0(真的)使我对CartPole-v1的训练达到了最大500步。
CartPole-v1在使用简单的Q-Learner进行训练时稳定(将min-alpha和min-epsilon降低至0.001):https://github.com/sanjitjain2/q-learning-for-cartpole/blob/master/qlearning.py
创建者的Gamma值为1.0(我在reddit上了解到它),因此我从此处通过一个简单的DQN(double_q = False)对其进行了测试:https://github.com/adventuresinML/adventures-in-ml-code/blob/master/double_q_tensorflow2.py
我还删除了1行:# reward = np.random.normal(1.0, RANDOM_REWARD_STD)
这样,它每步可以获得正常的+1奖励,并且在10次跑步中就“稳定”了7次。
结果如下:
答案 2 :(得分:0)
也许这可以帮助您解决这种环境下的问题。