昨天報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可以表示為
\(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:
對於$$J^{}(x_t)$$ 和 $$J^{}(x_{t+1})$$來說:
所以如果\(\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}\)是 游戲最后的正確輸出和倒數第二步的預測值的差值。
最后我們會得到下面的formula:
\(\nabla \widetilde{J}(.,w)\)是向量\(w\)在每個方向上的偏導,\(\alpha\)是learning rate, \(\lambda \in [0,1]\), 它根據時間來控\(d_t\)的反向傳播,其實也很好理解,離要更新的狀態越遠,對它的影響就越小,所以\(\lambda^{m}\)的m就越大,值當熱越小。
TD\((0)\)
如果 \(\lambda=0\),因為只有 \(0^0=1\),所以原來的公式就變為
TD\((1)\)
那就是,,全部都用最后一個狀態更新 :
從一個狀態轉移到另一個狀態,我們希望轉移之后的$$\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.
