动作价值函数Q是model-free问题的入口

在策略迭代中使用蒙特卡洛方法和DP中的思路一样,都是策略评估和策略增强两个过程交替进行,互相促进,最终收敛到最优策略。在策略评估过程中,我们可以使用状态价值函数,正如MC学习笔记-蒙特卡罗方法进行状态价值评估中对blackjack的策略评估所示。

在策略增强中,如果model是已知的,则状态价值函数是很有用的,因此此时只要往前看一步,就可以计算出哪个动作能够获得最大的价值,那么这个动作就是策略增强这一步应该采取的动作。但是,如果model不可知(即model-free问题),则状态价值函数不可得,我们就必须设法计算动作的价值,然后选择最大价值的动作进行策略增强。

事实上,即便在model已知的情形下,如果能够直接计算动作的价值,也应该采取动作价值来进行策略增强:更加直接。

策略增强:采用greedy policy

在DP中,我们已经证明greedy policy在策略迭代中的有效性。在蒙特卡洛方法中,greedy policy同样有效。

首先,对于任意的,根据greedy policy的定义有:

也就是说,从任意状态s出发,我们选择使得最大的动作a作为策略增强的方向。即为在策略下从状态s出发的动作a,这是一个确定的值,即greedy policy下此概率为1。

其次,我们考察在策略迭代中的两个策略及其后续策略(greedy policy),对于任意状态都有:

这就证明了greedy policy的收敛性。

下面是蒙特卡洛方法(Exploring Starts)的算法描述:

monte-carlo es algorithm

greedy policy寻找blackjack最优策略

代码参见:蒙特卡洛算法实现21点游戏的最佳策略

分别经过500000,1000000,2000000,5000000个episode后,greedy policy依然没有找到最优策略,比如经过500000个episode后的状态为:

无ace时的状态价值图

有ace时的状态价值图

相应的,其策略图为:

无ace时的最优策略图

有ace时的最优策略图

猜测,greedy policy没有找到blackjack的最优策略的原因可能有以下几个:

  • 环境的代码有问题?如果环境没有给出随机的迭代起点状态,会导致greedy policy无法遍历所有的状态,即所谓的Exploring Starts问题。
  • greedy policy非常强势,可能会导致最终能够访问到的状态有限,比如著名的“二道门”问题。

实际上,蒙特卡洛方法的两个基本限制就是:

  1. 是否能够遍历所有的<a,s>对?
  2. 是否能够在有限个episode内找到最优策略?

sutton的书中给出了greedy policy的最优策略,但是实验代码无法复现。只有通过下面阐述的-greedy policy才能逼近sutton书中给出的最优策略,目前还不知道是哪里出了问题?

-greedy policy

greedy policy非常强势,比如在david siliver的教程中给出了著名的“二道门”问题,会导致greedy policy形成一定的偏好,无法遍历所有的<a,s>对。

-greedy policy的核心思想是在状态s选择动作的时候,不完全按照greedy policy的策略来进行,具体来说,假设动作空间的大小是m,则设置一个小的值,当选择动作的时候,有的概率随机选择一个动作,有的概率选择价值最大的动作,这样的策略就叫做-greedy policy。

-greedy policy以很小的概率随机选择动作,很好的解决了纯greedy policy的偏好问题,只要给出足够多的episode,即能够遍历所有的<a,s>对。

假设-greedy policy,则其收敛性证明如下:

式2.1只是一个分解:-greedy policy将greedy policy的一个确定性的分解成了两个部分:greedy部分的概率是,其余部分的概率是$$\epsilon/ \mathcal{A}(s) $$。

式2.3是基于如下的事实:Q的最大值不小于其某种概率组合(可参见:policy improvement的数学证明)。需要进一步说明的是,恰好

即,$$\sum_a\frac{\pi(a s)-\frac{\epsilon}{ \mathcal{A}(s) }}{1-\epsilon}q_{\pi}(s,a)q_{\pi}(s,a)$$的概率组合。

证明如下:

上式基于如下的事实:

  • $$\sum_a\pi(a s)=1$$,这是显然的,从状态s出发的所有动作a的概率之和为1。
  • $$\sum_a\frac{\epsilon}{ \mathcal{A}(s) }=\epsilon\frac{\epsilon}{ \mathcal{A}(s) }\epsilon$$。

-greedy policy的算法描述如下:

monte-carlo epsilon greedy policy algorithm

-greedy policy寻找blackjack最优策略

代码参见:epsilon greedy policy寻找blackjack最有策略的代码实现

最终的状态图如下:

最终的策略图如下(H表示Hit动作,S表示Stick动作):

可见,-greedy policy所找到的最优策略要比单纯的greedy policy好的多。