[英]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]
我究竟做錯了什么?
我認為您的代碼存在兩個問題:
gamma
= 0.8)也可能太高。強化學習的創始人之一理查德·薩頓 (Richard S. Sutton) 所著的《強化學習:簡介》一書可在線獲取,我強烈建議您將其用作參考。
Q-Learning 是Temporal Difference Learning的一個特例,第 6.2 小節主要使用小於 0.15 的學習率。
假設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.