[关闭]
@BIGBALLON 2017-02-27T08:29:30.000000Z 字数 3029 阅读 1172

layout: post
title: Review of TD-Leaf(lambda)

date: 2017-02-26 22:48

昨天报seminar的时候把TD-Leaf 搞错了,23333.

本篇文章重新回顾一下Temporal Difference Learning,
主要包括TD,TD,TD
最后再回顾一下TD-Leaf.

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

表示所有可能的Position的集合
时刻,agent的状态表示为 ,且
表示在position 时的合法步的集合

当agent选择一个action ,
从状态转化为
我们把选择action 的概率记为
这里的状态,表示在我方做出一个action,对方也做action后得到的状态。
比如2048,当前状态我们称为,此时,我们向上移动后,系统再随机产生一个方块,这时才算从状态转移到了

当游戏结束时,agent会得到一个(scalar)reward,
通常获胜得到 分,平局得到 分,失败得到 分。
当然,如果是2048的话,就是最后玩完游戏的总得分。

假设我们的游戏玩到结束用了步,即游戏的 .
表示游戏结束时的reward.

假设agent从当前状态选择某个action进行转移,则我们期望得到的reward可以表示为

表示从当前点往下走我们能得到的分数的期望。

当状态空间很大时,我们无法将每一个状态值存起来

所以我们尝试用一些带参数的函数来表示这个理想的函数.

是一个可微函数,比如线性函数(linear function), 样条函数(splines), 神经网络(neural
networks),等等。
是一个Vetcor。

很显然,在每一个状态,会有一个差值error,
我们的目标就是,找到vector 的参数,使得error最小,突然在这里想起了machine learning的gradient descent.

那么,TD就是干这个事情的。

假设 代表整个游戏的状态序列。
对于给定的向量,我们定义从的差值为temporal
difference:

对于

来说:

所以如果足够接近,应该非常接近0.
前面我们有提到,游戏最后的reward是,所以最后一个状态的temporal difference 满足:

也就是说是 游戏最后的正确输出和倒数第二步的预测值的差值。

最后我们会得到下面的formula:

是向量在每个方向上的偏导,是learning rate, , 它根据时间来控的反向传播,其实也很好理解,离要更新的状态越远,对它的影响就越小,所以的m就越大,值当热越小。

TD

如果 ,因为只有 ,所以原来的公式就变为

TD

那就是,,全部都用最后一个状态更新 :

从一个状态转移到另一个状态,我们希望转移之后的

最小。也就是:

对于2048,Backgammon这样的游戏,我们可以通过搜寻一步或者一层来评估盘面前后的差距,但是对于西洋棋,象棋这样的游戏,仅仅搜寻一步,是很难进行精确预估的。

对于这些游戏,我们往往会使用min-max search,或者是用alpha-beta进行剪枝。

0x02 TD-Leaf

那如果想把TD用到西洋棋上呢?这里我们把TD和Search结合起来使用。

对于TD,我们在计算每个状态的值时,仅仅使用

来计算, 而在这里,我们通过search d层,找到search之后叶节点中的最优值作为root节点的值,也就是当前状态的估计值。

如上图所示:

TD的算法是前后两个状态的预估值相减
TD则是从状态到结束每两个状态的预估值都对其有贡献
TDLeaf的特点在于,在计算每个状态

的预估值时,会向下search 层,并用叶节点的值表示
的预估值。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注