基于Monte Carlo 的策略评估
在强化学习中,Monte Carlo 是一种被广泛用到的方法。这种方法主要是从经验 experience 中拟合数值,本质上就是从不同的采样中获得结果,然后将其平均。由于最后当采样的数量达到一定的数量级后,这种方法可以很好地拟合我们想要的函数。
这里有一个很有意思的demo,展现的是Monte Carlo 如何应用在评估
π
\pi
π 的数值上。 https://academo.org/demos/estimating-pi-monte-carlo/
如上图所示,如果我们随机在一个正方形中随机打入点,那么只要记录圈内的数量和圈外的数量,根据比值就可以得到
π
\pi
π 的结果。
那么Monte Carlo 是怎么应用在强化学习中的呢?那么比较经典的例子就是 BlackJack(21 )。 在BlackJack,游戏中,我们必须等到游戏最终结束的时候,才知道之前的策略是好还是坏。所以对一场游戏(episode),我们在游戏的过程中记录所有action 和对应的state。然后不断地学习 action value function
Q
π
(
s
,
a
)
Q_{\pi}(s,a)
Qπ?(s,a)。这里
s
∈
S
,
a
∈
A
(
s
)
s \in \mathcal{S}, a \in \mathcal{A}(s)
s∈S,a∈A(s) 表示对应的状态和当前状态下的合法行为。
π
\pi
π 表示当前的策略。这个case 下,游戏的总目标就是学习两组参数:
- 游戏的策略
π
\pi
π, 就是给定状态
s
s
s和对应的行为 action
a
a
a,要返回对应的概率。
- action value function
Q
π
(
s
,
a
)
Q_{\pi}(s,a)
Qπ?(s,a),在策略(policy)
π
\pi
π下,的action value function。 也就是说当给定对应的
s
,
a
s, a
s,a 的时候,就返回对应的value数值。
那我们知道这个目的以后呢,接下来分别介绍如何更新 action value function 和 游戏的策略
π
\pi
π。
- action value function
Q
π
(
s
,
a
)
Q_{\pi}(s,a)
Qπ?(s,a) 的更新
-
Action value function的更新如下所示。 实际上呢,首先我们对这个action value function的进行一个初始化,它实际上就是对每一个状态,都有一个对应的一个action,然后我们也对每一个
s
,
a
s,a
s,a对,有一个空的list。这个list呢是用于记录在整个游戏过程中被访问到的对应的状态
s
s
s和action
s
s
s,所以我们最后会通过平均的方法把它的这个数字进行拟合。 按照这个思路呢,我们就无限循环,就是说基于这个policy基于这个策略,我们会有一系列的行为,然后在一个在这个游戏过程中有总共有大T个步长,就是然后每一个步长里面都会有对应的这个状态和行为,然后我们会得到对应的结果,这个结果呢,我们会最后把它啊append到对应的List里面去,最后取平均,然后我们希望每一个状态呢都只访问一遍,因为实际上它这个访问一遍和访问多遍的这个实际情况都是一样的,所以我们只访问一遍。 -
然后我们现在已经得到了这个action value function,那么我们如何去优化这个策略
π
\pi
π呢?实际上我们可以用 generalized policy iteratioin, GPI这个方法去进行优化 policy
π
\pi
π,这个方法再强化学习中已经被广泛应用,就是说我们先优化这个action value function
Q
π
(
s
,
a
)
Q{\pi}(s,a)
Qπ(s,a),然后接着去基于这个function ,预测对应的policy
π
\pi
π然后通过这样子往复的形式呢去得到最终的一个结果.如下图所示: 就是说通过这种形式呢,我们能够保证对 action value function
Q
π
(
s
,
a
)
Q_{\pi}(s,a)
Qπ?(s,a)的优化,同时,第2步我们能够继续对policy进行一个优化,这样的一个交替迭代的一个方式,能够保证两个 function方式都能在最后得到我们想要的结果。虽然这个东西最终还没有经过证明,但是已经从大量的实验中已经经过了论证。 -
还有一个问题就是如果说我们只是用这个policy
π
\pi
π去优化的话,那么他有很多的状态他是不会被访问到的,因为我们已经得到了这个policy之后呢,在每次使用的时候我们都会去max的 policy,所以这样的问题就会导致很多状态也没有被访问到。所以在使用GPI 的时候,我们会引入一种
ε
\varepsilon
ε-greedy policy,这种policy能够让算法在学习的过程中,能够随机的去访问一些状态,也就是说它会随机的访问状态和一些对应的行为,所以这样子就能让一些更多的行为能够被访问到,这样子,能够更好的去帮助啊,算法去找到更好的一个决策。对应的算法如下所示: 这里会看到我们在算法1的基础上,就是加了一个对policy的一个优化。在 policy 优化的过程中,我们再里面加入了
ε
\varepsilon
ε-greedy policy去帮助网络能够对一些非最有的行为也进行探索。
参考:http://incompleteideas.net/book/first/ebook/node50.html
|