簡體   English   中英

Q-Learning Table 收斂到 -inf

[英]Q-Learning Table converges to -inf

我試圖用我自己的 q-learning 實現來解決aigym 山地車問題

在嘗試了不同的東西之后,它開始工作得非常好,但過了一段時間(20k Episodes * 1000 Samples per Episode)我注意到我存儲在 Q 表中的值變大了,所以它存儲了值 -inf。

在模擬過程中,我曾經使用以下代碼:

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-Algorithm,但是在將其更改為以下實現之后,它不再起作用(幾乎和以前一樣好):

#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)也可能太高。

強化學習的創始人之一理查德·薩頓 (Richard S. Sutton) 所著的《強化學習:簡介》一書可在線獲取,我強烈建議您將其用作參考。

Q-Learning 是Temporal Difference Learning的一個特例,第 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])

如果這應該代表公式在此處輸入圖像描述 你的第一個版本有問題,因為你基本上一直在總結只是略微打折的獎勵。 帶有附加-Q[x_k, u_k]的第二個版本應該是正確的。

您可能想查看的其他 SO 問題:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM