批量強化學習:算法示例
我一直在閱讀強化學習:Sutton 和 Barto 的介紹(2012),我遇到了批量學習方法。不幸的是,這種方法在書中沒有很好地描述,關於批量學習的科學文章對我來說還太先進了。
誰能詳細說明該方法並為這種強化學習方法提供示例性偽算法?
Sutton 和 Barto 在第 137 頁的“TD(0) 的最優性”一章中提到了批量更新,以下是相關段落:
假設只有有限數量的經驗可用,比如 10 集或 100 個時間步長。在這種情況下,增量學習方法的一種常見方法是重複呈現經驗,直到方法收斂到一個答案 [……] 我們稱之為批量更新,因為只有在處理完每批完整的訓練數據後才會進行更新.
在搜索了一些谷歌的文章後,我試圖理解這一點,但不是很成功。
對批量更新的引用不是關於任何新的或未描述的強化學習方法,而只是對體驗和更新如何交互的微妙重新排序。您可以在經驗不足的情況下使用批量更新(而不是計算時間)。
從本質上講,您可以只使用標準的 TD 更新機制,但不是在觀察到的每條經驗時都獲取一次,而是存儲並重新播放您迄今為止看到的軌跡(即不選擇新動作)。您可以繼續重複它們,幾乎就像動態編程中的策略評估(除了僅使用您的採樣軌跡),直到價值估計僅發生少量變化 - 或者可能繼續重複例如 10 秒,直到下一條經驗到來。
顯然,這種方法有局限性。它只能評估迄今為止已採取的行動,無法進一步探索。它可能會受到價值估計中的抽樣偏差的影響。但是,它將在某些方面代表迄今為止看到的狀態值的最佳估計,並且如果 MDP 或策略的隨機部分不是太瘋狂,那麼在獲得經驗成本高昂或耗時的情況下,它可能是一個不錯的選擇。
在實施方面,您可以執行以下操作(對於 SARSA(0)):
初始化 $ Q(s, a), \forall s \in \mathcal{S}, a \in \mathcal{A}(s) $ , 任意, 和 $ Q(\text{terminal-state}, \cdot) = 0 $
重複:
$ \qquad $ 初始化 $ S $
$ \qquad $ 選擇 $ A $ 從 $ S $ 使用源自的策略 $ Q $ (例如,ε-貪婪)
$ \qquad $ 重複(對於劇集的每個步驟):
$ \qquad\qquad $ 採取行動 $ A $ , 觀察 $ R, S' $
$ \qquad\qquad $ 選擇 $ A' $ 從 $ S' $ 使用源自的策略 $ Q $
$ \qquad\qquad $ 存儲五個採樣變量 $ S, A, R, S', A' $ 在經驗表中
$ \qquad\qquad $ 如果經驗表足夠大,重複:
$ \qquad\qquad\qquad $ 對於每個 $ S, A, R, S', A' $ 經驗表中:
$ \qquad\qquad\qquad\qquad Q(S, A) \leftarrow Q(S, A) + \alpha[R + \gamma Q(S', A') − Q(S, A)] $
$ \qquad\qquad $ 直到計算時間用完,或者 Q 的最大變化很小
$ \qquad\qquad $ 如果使用了經驗表,則將其清除(因為政策將發生變化)
$ \qquad\qquad S \leftarrow S'; A \leftarrow A' $
$ \qquad\qquad $ 直到 $ S $ 是終端
這顯然有一些變化 - 您可以在不同的地方交錯體驗重播/批處理,這可能對偶發性或連續性問題更有效。您也可以保持在線學習更新,可能使用不同的學習率。如果你有一個情節問題,那麼你的經驗表真的應該包含至少一個情節結尾,如果 $ \gamma =1 $ . 如果您正在對固定策略執行策略評估(而不是控制調整策略的位置),那麼您可以保留較舊的體驗,而無需剔除它。
此外,這與使用神經網絡等估計器時有用的經驗回放方法非常相似。在這種情況下,可以對您的經驗表進行採樣,以創建小批量更新,以用於估計器的監督學習。在像 Q 學習這樣的非策略場景中,您可以刪除 $ A' $ 並替換最大化 $ A' $ 在回放的時候,也可以讓你保留更多的歷史。