2017-07-28 78 views
4

雖然試圖實現神經網絡作爲近似器,但我想知道如何根據當前學習的網絡權重選擇最佳動作。如果動作空間是離散的,我可以計算當前狀態下不同動作的估計值並選擇給出最大值的那個。但這似乎不是解決問題的最佳方法。此外,如果動作空間可以是連續的,則不起作用(例如,像自動駕駛汽車的加速)。具有神經網絡的情景式半梯度薩爾薩

所以,basicly我想知道如何解決10號線Choose A' as a function of q(S', , w)薩頓的這種僞代碼: enter image description here

如何這些問題通常解決了嗎?可以使用Keras推薦一個很好的算法例子嗎?

編輯:當使用網絡作爲近似器時,我需要修改僞代碼嗎?那麼,我簡單地將網絡預測的MSE最小化,例如獎勵R

回答

1

我不知道我該如何選擇基於網絡

的目前瞭解到的權重的最佳動作,您有三個基本的選擇:

  1. 用於運行網絡多次,一次每個可能的值A'S'價值,你正在考慮。以最大值作爲預測的最優行動(以1-ε的概率,否則隨機選擇通常在SARSA中使用的ε-貪婪政策)

  2. 設計網絡以一次估計所有行爲值 - 即| A(s) |輸出(可能填充以涵蓋您需要過濾掉的「不可能」操作)。這將略微改變梯度計算,應該對最後層無效輸出應用零梯度(即,任何不匹配A(S,A))。再次,將最大有效輸出作爲估計的最佳操作。這可以比多次運行網絡更有效。最近的DQN Atari遊戲機器人和AlphaGo的策略網絡也採用了這種方法。

  3. 使用policy-gradient method,它通過使用樣本來估計可以改善策略估計的梯度。有關更多詳細信息,請參閱Sutton and Barto's current draft of Reinforcement Learning: An Introduction的第15章。當有大量可能的行爲時,策略梯度方法變得很有吸引力,並且可以應對連續的行爲空間(通過對最優策略的分佈函數進行估計 - 例如選擇正態分佈的均值和標準差,可以從採取行動)。您還可以在actor-critic methods中將策略梯度與狀態值方法相結合,這可能比純策略梯度方法更有效。

請注意,如果您的動作空間是連續的,則不必使用策略漸變方法,就可以對動作進行量化。此外,在某些情況下,即使理論上持續的行動,您可能會發現最佳政策只涉及極端值(經典mountain car example屬於此類別,唯一有用的操作是最大加速度和最大向後加速度)

使用網絡作爲逼近器時,是否需要修改僞代碼?那麼,我簡單地最小化網絡預測的MSE和例如獎勵R

不是。僞代碼中沒有單獨的損失函數,例如您將在監督學習中使用的MSE。誤差項(通常稱爲TD誤差)由方括號中的部分給出,並達到類似的效果。字面意思是∇q(S,A,w(對不起帽子,SO上沒有LaTex)是指估計器本身的梯度 - 不是任何損失函數的梯度。

+0

好的,謝謝。我決定去選擇你的答案,並試圖用Keras實現這個問題。但我仍然不知道如何執行權重的更新。我試圖解決它像這樣https://gist.github.com/FlashTek/0dfddf46c4d50c4e068f1ecbad1d03b5,但遺憾的是代理沒有真正學習任何東西。你能給我更多關於這一步的細節嗎? – FlashTek

+1

我不太瞭解合併方法在Keras中的工作方式,但我認爲你最終創建了一個3的小批量來預測何時選擇一個動作,然後是一個1的最小批量更新。我有個問題:'output_layer = Dense(1,activation =「tanh」)(x)' - 我不認爲'tanh'涵蓋了所有的獎勵範圍,這個任務獎勵例如。 -300是可能的。您似乎已經修改了培訓目標(使用TD目標,而不是TD錯誤),但我認爲這是對以簡單方式使用Keras優化器的正確修改。 –

+0

是的,這就是我想要做的。好的 - 我應該使用哪個其他激活函數來代替這個?我認爲'LeakyReLu'能夠解決這個問題(因爲它涵蓋了所有的負面價值),但是代理人仍然沒有學到任何東西。 – FlashTek