一、MC basic 算法
如前述, 将策略迭代算法中"策略评估" 的部分, 由原来基于模型直接计算, 替换成基于多次实验采样来计算, 就得到了MC basic,所以MC basic的过程几乎与策略迭代算法相同
-
求解MC basic的步骤
Step1(稍有改动): (策略评估)Policy evaluation (PE)-
目的依然是更新state value
-
首先从一个状态中的一个动作出发, 进行N次实验(episode)来收集数据
-
比如在状态s1 , 我们多次从动作a1开始行动 并累计得到的结果(计算 discount return)
-
episode的长度是一个人为配置的参数, 每一次行动, 只有步数到达episode才终止 可以认为episode的长度就是探索半径
-
最后把这些结果取平均, 来代替原本依赖模型计算出的的结果
-
对于所有的状态s和所有的动作a 都执行一次这个步骤就完成了策略评估Policy evaluation
-
Step2(无变化): (策略改进)Policy evaluation (PI)
-
对于每一个state, 求出它能进行的所有动作(action)的行动价值(action value)
-
选择行动价值(action value)最大的动作(action), 更新策略
-
迭代过程也是 Step1→Step2→Step1→Step2→…→Step2→收敛
二、MC Exploring Starts 算法
相比较计算效率极低的MC basic有两个优化
-
第一个优化是关于episide, 对于MC basic来说
假如有这样两个episide :
-
s1(a2) → s2(a4) → s3(a5) →…
-
s2(a4) → s3(a5) →…
s1(a2) 代表在s1采取行动a2
第一个是从s1出发, 第二个是从s2出发 但是因为第一个路径其实包含了第二个路径, 所以对于第二个路径的计算就是重复的 我们只需要在第一次计算到s2(a4)时, 把它的结果保存下来, 在计算第二个, 第三个…包含s2(a4)的路径时就能可以不重复计算, 这样完成了这个优化, 而这个优化对于采样的处理又可以分为两种:
-
first-visit method
-
every-visit method
- 1是只把第一次遇到某个状态-行动对, 比如(s1, a2)的时候计算得到的值作为样本, 后续再遇到时直接照搬这个值
- 2是每次遇到某个状态-行动对, 都计算一次它的值, 但是当做它的不同样本
个人观点 : 表面上every-visit 方法每次都重复计算, 看起来好像没有减少重复计算量, 但是由于无论起点在哪, 每遇到一次就增加一次样本量, 所以重复实验的次数N确定的情况下, 这种方法获取的样本量远超MC basic算法, 那么我们就能适当减小N的值, 也相当于变相减少了计算量
-
-
第二个优化是更多策略更新(改进), 对于MC basic来说
对于每个状态-行动对要进行N次episode取均值以后, 才进行一次策略更新。
由于进行N次episode的计算量远超进行一次策略更新(改进)的计算量, 所以这里可以每完成一次episode的计算就直接进行一次策略更新, 来达到更高的效率
Exploring Starts的理解
Exploring : 必须探索(explore)完所有的action, 才能够确定最优的action Start : 为了确保所有action都被探索到, 简单的想法是确保每个(s, a)都发起(Start)一个episode
-
什么是探索起始(exploring starts)?
- 探索(exploring)指的是我从每一个(s,a)出发,都要有 episode,只有这样我才能用后面生成的这些 reward 来估计 return,进一步估计 action value。如果恰恰有一个 state-action 没有被访问到,那我就可能把这个 action 给漏掉了,但是那个可能就是最优的,所以我们需要确保每个都被访问。
- 起始(starts)意味着我们要访问每个(s,a),从它后面能够生成 reward 的这些数据有两种方法:第一种方法是从每一个 (s,a) 开始都有一个 episode,就是 start;第二种方法是从其他的 (s,a) 开始,但是也能经过当前的这个 (s,a),那后面的这些数据也可以估计当前 (s,a) 的 return,这个叫 visit。目前来讲,visit 方法没法确保,它依赖于策略和环境,没法确保从其他的 (s,a) 开始一定能够经过剩下的所有 (s,a),下面我们介绍的新方法就是使得 visit 可以做到,这样就可以避免必须从每个 (s,a) 都开始的条件。
三、MC ε-Greedy 算法
上一个算法中虽然能够保证所有action都能探索到, 但从每一个(s, a)出发一个episode, 是一个比较低效的方法,ε-Greedy 算法的思想就是从策略下手:
-
如果在某个状态s0处的策略是100%选择 a1, 那么在固定策略下, 其他的动作一定不会被随机选择 只有通过覆盖式的方法, 将所有(s, a)无论概率如何都遍历一遍才能保证不会遗漏action。
-
而如果我们允许策略(policy) 在执行中以比较小的概率, 随机的选择一些并不是最优的action, 那么我们就得到了一种soft-policy (相对于determined policy) 也就是ε-Greedy policy 这样即使原始策略中某个action的概率是0% , 它也有一定几率被尝试
选择greedy(最优action)的概率 始终比选择其他action的概率要大 -
ε是一个可调参数
如果ε = 0. 那么会始终选择greedy (最优action)
如果ε = 1. 那么选择所有action的概率都相同 (均匀分布)
ε的值越小, 生成的策略可能接近最优策略, 所以在实际中可以在前期让ε较大获得探索性, 在后期让ε较小获得最优性
通过这种方法, 我们不必从每一个action出发, 也能保证所有action都不会被遗漏, 也就去掉了Exploring Starts的限制
- MC ε-Greedy 算法的特点
优点: 具有一定的探索性, 即使只有一个episode , 它也会尝试多数的action
缺点: 牺牲了最优性, 得到的策略可能不是最优的, 这点与之前所有的算法都不同