Review of TD-Leaf(lambda)


昨天報seminar的時候把TD-Leaf\((\lambda)\) 搞錯了,23333.

本篇文章重新回顧一下Temporal Difference Learning,
主要包括TD\((0)\),TD\((1)\),TD\((\lambda)\)
最后再回顧一下TD-Leaf\((\lambda)\).

Paper的話大致是如下兩篇:

KnightCap: A chess program that learns by combining TD(lambda) with game-tree search
TDLeaf(lambda): Combining Temporal Difference Learning with Game-Tree Search

0x01 TD\((\lambda)\)

\(S\) 表示所有可能的Position的集合
\(t\) 時刻,agent的狀態表示為 \(x_t\) ,且\(x_t \in S\)
\(A_{x_t}\) 表示在position \(x_t\)時的合法步的集合

當agent選擇一個action \(a \in A_{x_t}\),
從狀態\(x_t\)轉化為\(x_{t+1}\)
我們把選擇action \(a\)的概率記為\(p(x_t,x_{t+1},a)\)
這里的狀態\(x_{t+1}\),表示在我方做出一個action,對方也做action后得到的狀態。
比如2048,當前狀態我們稱為\(x_t\),此時,我們向上移動后,系統再隨機產生一個方塊,這時才算從狀態\(x_t\)轉移到了\(x_{t+1}\)

當游戲結束時,agent會得到一個(scalar)reward,
通常獲勝得到 \("1"\)分,平局得到 \("0"\)分,失敗得到 \("-1"\)分。
當然,如果是2048的話,就是最后玩完游戲的總得分。

假設我們的游戲玩到結束用了\(N\)步,即游戲的 \(length=N\).
\(r(x_N)\) 表示游戲結束時的reward.

假設agent從當前狀態\(x\)選擇某個action進行轉移,則我們期望得到的reward可以表示為

\[\begin{equation} J^{*}(x):=E_{x_N|x}r(x_N) \end{equation} \]

\(J^{*}(x)\)表示從當前點往下走我們能得到的分數的期望。

當狀態空間\(S\)很大時,我們無法將每一個狀態\(x\)\(J^{*}(x)\)值存起來

所以我們嘗試用一些帶參數的函數\(\widetilde{J}(.,w)\)來表示這個理想的函數\(J^{*}(x)\).

\(\widetilde{J}:S \times \mathbb{R}^{k}\rightarrow \mathbb{R}\)

\(\widetilde{J}(.,w)\)是一個可微函數,比如線性函數(linear function), 樣條函數(splines), 神經網絡(neural
networks),等等。
\(w=(w_1,...,w_k)\)是一個Vetcor。

很顯然,在每一個狀態,\(J^{*}(x)\)\(\widetilde{J}(.,w)\)會有一個差值error,
我們的目標就是,找到vector $w \in \mathbb{R} $ 的參數,使得error最小,突然在這里想起了machine learning的gradient descent.

那么,TD\((\lambda)\)就是干這個事情的。

假設 \(x_1,...,x_{N-1},x_N\) 代表整個游戲的狀態序列。
對於給定的向量\(w\),我們定義從\(x_t \rightarrow x_{t+1}\)的差值為temporal
difference:

\[\begin{equation} d_t:=\widetilde{J}(x_{t+1},w)-\widetilde{J}(x_t,w) \end{equation} \]

對於$$J^{}(x_t)$$ 和 $$J^{}(x_{t+1})$$來說:

\[E_{x_{t+1|x_t}}[J^{*}(x_{t+1})-J^{*}(x_{t})]=0 \]

所以如果\(\widetilde{J}(.,w)\)足夠接近\(J^{*}\),\(E_{x_{t+1|x_t}}d_t=0\)應該非常接近0.
前面我們有提到,游戲最后的reward是\(r(x_N)\),所以最后一個狀態的temporal difference \(d_{N-1}\)滿足:

\[d_{N-1}=\widetilde{J}(x_N,w)-\widetilde{J}(x_{N-1},w)=r(x_N)-\widetilde{J}(x_{N-1},w) \]

也就是說\(d_{N-1}\)是 游戲最后的正確輸出和倒數第二步的預測值的差值。

最后我們會得到下面的formula:

\[\begin{equation} w:=w+\alpha \sum^{N-1}_{t=1} \nabla \widetilde{J}(x_t,w)[\sum^{N-1}_{j=t} \lambda^{j-t} d_t] \end{equation} \]

\(\nabla \widetilde{J}(.,w)\)是向量\(w\)在每個方向上的偏導,\(\alpha\)是learning rate, \(\lambda \in [0,1]\), 它根據時間來控\(d_t\)的反向傳播,其實也很好理解,離要更新的狀態越遠,對它的影響就越小,所以\(\lambda^{m}\)的m就越大,值當熱越小。

TD\((0)\)

如果 \(\lambda=0\),因為只有 \(0^0=1\),所以原來的公式就變為

\[\begin{equation} w:=w+\alpha \sum^{N-1}_{t=1} \nabla \widetilde{J}(x_t,w)d_t \\ = w+\alpha \sum^{N-1}_{t=1} \nabla \widetilde{J}(x_t,w)[\widetilde{J}(x_{t+1},w)-\widetilde{J}(x_{t},w)] \end{equation} \]

TD\((1)\)

那就是,,全部都用最后一個狀態更新 :

\[\begin{equation} w:= w+\alpha \sum^{N-1}_{t=1} \nabla \widetilde{J}(x_t,w)[r(x_N)-\widetilde{J}(x_{t},w)] \end{equation} \]

從一個狀態轉移到另一個狀態,我們希望轉移之后的$$\widetilde{J}({x_{a}}',w)$$最小。也就是:

\[\begin{equation} a^{*}(x):=\underset{c\in A_x}{\operatorname{argmax}} \end{equation}\widetilde{J}({x_{a}}',w) \]

對於2048,Backgammon這樣的游戲,我們可以通過搜尋一步或者一層來評估盤面前后的差距,
但是對於西洋棋,象棋這樣的游戲,僅僅搜尋一步,是很難進行精確預估的。

對於這些游戲,我們往往會使用min-max search,或者是用alpha-beta進行剪枝。

0x02 TD-Leaf\((\lambda)\)

那如果想把TD用到西洋棋上呢?這里我們把TD和Search結合起來使用。

對於TD\((\lambda)\),我們在計算每個狀態的值時,僅僅使用$$\widetilde{J}(.,w)$$來計算, 而在這里,我們通過search \(d\)層,找到search之后葉節點中的最優值作為root節點的值,也就是當前狀態的估計值。

如上圖所示:

TD\((0)\)\(d_t\)的算法是前后兩個狀態的預估值相減
TD\((\lambda)\)則是從狀態\(s_t\)到結束每兩個狀態的預估值都對其有貢獻
TDLeaf\((\lambda)\)的特點在於,在計算每個狀態$$ x_i $$的預估值時,會向下search \(d\) 層,並用葉節點的值表示$$x_i$$的預估值。

0x03 Conclusion

TDLeaf\((\lambda)\)是TD\((\lambda)\)的一個變種,使得TD可以在Min-Max search中train evaluation function.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM