1. 程式人生 > >《強化學習Sutton》讀書筆記(六)——n步Bootstrapping(n-step Bootstrapping)

《強化學習Sutton》讀書筆記(六)——n步Bootstrapping(n-step Bootstrapping)

此為《強化學習》第七章 n-step Bootstrapping

n 步Bootstrapping是MC和TD(0)的綜合。隨著對引數 n 的調整,我們可以看到TD是如何過渡到MC的。而最佳的方法往往就是介於TD和MC之間。

n 步TD估計

在上一章的TD(0)方法中,我們有

v ( S
t ) v ( S t ) + α ( G t
v ( S t ) )

並且,我們使用了一步後的狀態值函式來估計 G t ,從而得到

v ( S t ) v ( S t ) + α [ R t + 1 + γ v ( S t + 1 ) v ( S t ) ]

那麼如果我們考慮 n 步,那麼顯然 G t 也可以使用以下等式進行估計:

G t = R t + 1 + γ v ( S t + 1 ) = R t + 1 + γ R t + 2 + γ 2 v ( S t + 2 ) = R t + 1 + γ R t + 2 + + γ n 1 R t + n + γ n v ( S t + n )

在書本中,上面每個 v 都會有一個下標,表示此處的值函式是哪一步迭代的值函式。 但實際上,我們只有一個表格用來存值函式,所以實踐上應該很容易知道到底是哪一步迭代的,因此這裡省略不寫(可見下文虛擬碼即可知)。令上述表示式為 G t : t + n ,則演算法TD(n)

v ( S t ) v ( S t ) + α [ G t : t + n v ( S t ) ]

如果 t + n = T ,那麼TD(n)將成為MC。在回溯圖中,我們可以看到TD(n)包含了從TD(0)到MC的所有演算法。

TD(n)回溯圖

TD(n)的虛擬碼如下:

TD(n)虛擬碼

稍微解釋一下。第一個迴圈當然是針對episode,第二個迴圈是在一個episode中產生樣本。第一個if表示如果該episode沒有結束,那麼就繼續取樣;if後的 τ 表示已經執行的步數和 n 1 的差。如果 τ < 0 ,就說明 n 步還沒有走完,當然沒有任何可以迭代的;如果 τ 0 ,則進入第二個if,使用 n 步後的狀態值函式 v ( S τ + n ) 來更新 v ( S τ )

n 步Sarsa

考慮完狀態值函式,下一步當然是行為值函式。過程幾乎完全一樣,先定義 G t : t + n