python - Q-Learning Table收敛到-inf

标签 python machine-learning reinforcement-learning q-learning

我试图解决 aigym mountain-car problem用我自己的 q-learning 实现。

在尝试了不同的事情之后,它开始工作得很好,但过了一段时间(20k 集 * 每集 1000 个样本)我注意到我存储在 Q 表中的值变大了,所以它存储了值 -信息

在模拟过程中,我习惯了以下代码:

for t in range(SAMPLE_PER_EPISODE):

    observation, reward, done, info = env.step(action)
    R[state, action] = reward

    history.append((state,action,reward))

    max_indexes = np.argwhere(Q[state,] == np.amax(Q[state,])).flatten()
    action = np.random.choice(max_indexes)

为了学习,我在每一集之后使用了以下代码:

#train
latest_best = 0
total_reward = 0
for entry in reversed(history):
    Q[entry[0],entry[1]] = Q[entry[0],entry[1]] + lr * (entry[2] + latest_best * gamma)

    latest_best = np.max(Q[entry[0],:])
    total_reward += entry[2]

我用那个算法得到了非常好的结果,但问题是 - 如上所述 - Q 值非常快地变为 -inf

我认为我错误地实现了 Q 算法,但在将其更改为以下实现后,它不再起作用(几乎和以前一样好):

#train
latest_best = 0
total_reward = 0
for entry in reversed(history):
    # Here I changed the code
    Q[entry[0],entry[1]] = Q[entry[0],entry[1]] + lr * (entry[2] + latest_best * gamma - Q[entry[0],entry[1]])

    latest_best = np.max(Q[entry[0],:])
    total_reward += entry[2]

我做错了什么?

最佳答案

我认为你的代码有两个问题:

  1. 首先,您的学习率可能过高(lr = 0.99 来自您的评论),您的折扣因子 (gamma = 0.8) 也可能过高。

本书Reinforcement Learning: An Introduction强化学习的创始人之一理查德·萨顿 (Richard S. Sutton) 的著作可在线获取,我强烈建议您将其用作引用。

Q-Learning 是 Temporal Difference Learning 的特例和 subchapter 6.2主要使用小于 0.15 的学习率。

  1. 假设entry[0]是x_k,entry[1]是u_k,entry[2]是r_{ k+1},然后是这一行

     Q[entry[0],entry[1]] = Q[entry[0],entry[1]] + lr * (entry[2] + latest_best * gamma - Q[entry[0],entry[1]])
    

相当于

    Q[x_k, u_k] = Q[x_k, u_k] + lr * (r_{k+1} + latest_best * gamma - Q[x_k, u_k])

如果这应该代表公式 enter image description here 你的第一个版本有问题,因为你基本上一直在总结奖励,只是略有折扣。带有附加 -Q[x_k, u_k] 的第二个版本应该是正确的。

您可能想查看的其他 SO 问题:

关于python - Q-Learning Table收敛到-inf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48342384/

相关文章:

python - 如何在稳定基线 3 中获取 DQN 中的 Q 值?

python - opencv_createsamples : Invalid background description file?

machine-learning - 最优 epsilon(ε-贪婪)值

python - 在 Python ctypes 中加载共享库期间出现段错误(核心已转储)

python - (Flask) 伪造 request.environ ['REMOTE_USER' ] 用于测试

machine-learning - 如何调优SVM Rank参数?

tensorflow - 在自定义数据集上从头开始训练初始模型后,如何对测试图像进​​行预测?

python - 在 python 中记录/存储强化学习实验的结果/指标的好方法?

python - 从用户定义的环境启动时,为什么 Spyder 5.0.0 应用程序启动错误?

python - Linux 新手 : need some help installing wxpython development environment on ubuntu 18. 04