1

我在開放式健身房的mountain car problem中實施DQN。這個問題很特殊,因爲積極的回報非常稀少。所以我想到了這個paper by google deep mind中提出的優先體驗重播。優先體驗在深度Q-learning中重播

但是也有一些困惑我某些事:

  • 我們如何存儲回放存儲器。我得到那我是過渡的優先事項,有兩種方式,但這是什麼P(我)?
  • 如果我們按照給定的規則不會P(i)每次添加樣本都會改變。
  • 當它說「我們根據此概率分佈進行抽樣」時,它意味着什麼。什麼是分配。
  • 最後我們如何從中抽樣。我知道如果我們將它存儲在一個優先級隊列中,我們可以直接進行採樣,但實際上我們將它存儲在一棵總和樹中。

在此先感謝

回答

2
  • 據該報稱,有兩種方式供您選擇計算Pi和基地,你的實現不同。我假設你選擇了比例排序,那麼你應該使用「sum-tree」數據結構來存儲一對轉換和P(i)。 P(i)只是Pi的標準化版本,它顯示了轉換的重要性,換句話說,轉換對於改善網絡有多有效。當P(i)很高時,這意味着它對於網絡來說是如此令人驚訝,所以它可以真正幫助網絡自我調整。
  • 您應該添加無限優先級的每個新的轉換,以確保它至少播放一次,並且不需要爲每個即將到來的轉換更新所有體驗重播內存。在體驗重播過程中,您可以選擇一個小批量,並在小批量中更新這些體驗的概率。
  • 每個經驗都有一個概率,所以所有的經驗一起作出分配,我們根據這個分佈選擇我們的下一個小批量。
  • 您可以通過您的總和樹這一政策示例:

    def retrieve(n, s): if n is leaf_node: return n if n.left.val >= s: return retrieve(n.left, s) else: return retrieve(n.right, s - n.left.val)

    我從here採取的代碼。

+0

仍然沒有得到它。根據s不會批量更改。如果使用 –

+1

我們稱每個樣本的檢索函數爲優先隊列也不是一個好主意。我的意思是,如果你有一個大小爲32的小批量,那麼你應該調用該函數32次。堆並不合適,因爲這給了你在每一步中最有可能的機會,並且沒有機會選擇其他體驗,但是使用總和樹所有體驗都有機會被選中,並且它們也可以被有效更新。 –

+0

謝謝。我成功地理解並實施了它。只是最後一件事情,我們是否使用sum樹來引入一點點隨機性,否則我無法看到它是如何更好的優先級隊列 –