3.1 背景描述
当把强化学习的问题建模为一个马尔可夫决策过程(MDP)时,我们如果拥有一个完整的环境模型(即状态转移概率和奖励函数),那么就可以用动态规划的方法来求解最优策略。然而,现实中,我们很难能够得到一个完整的环境模型。我们往往只能通过与真实环境不断交互获得一个个的交互数据,并从中来学习到一个近似的环境模型。在这种情况下,是用动态规划方法求解最优策略一定是会有偏差的。如果能够找到一种不需要环境模型的最优策略求解方法,就可以绕开环境模型的估计,从而学习到一个最优策略。
Monte Carlo 方法就是一种 Model-free 的方法,是首个从经验中学习最优策略的方法。 它的理念是通过一幕幕的交互数据(注意,也因此朴素的 Mote Carlo 方法只适用于分幕式任务,因为必须要有终止状态),利用价值估计可以用平均回报得到的思想来估计状态的价值函数。
3.2 朴素的 Monte Carlo 方法
3.2.1 采样代替期望
假设当前有一个策略 ,我们可以通过与环境交互得到一系列的状态-动作-奖励序列,记为轨迹 ,于是我们使用
来表示从 时刻开始到终止状态的回报。于是这样得到的一个轨迹的回报 就是回报随机变量 的一个样本。我们可以通过多次采样来估计 的期望值。
于是,状态价值函数的估计也就可以用如下式子完成
这里的 是轨迹的数量, 是第 条轨迹下的从状态 开始的回报。
3.2.2 迭代均值更新
结论 均值迭代化计算
对于一个序列 ,若欲计算其前缀子序列 的均值,可以采用如下迭代方式
其中
推导:
3.2.3 增量式 MC 价值估计
当智能体与环境交互结束后,得到一段交互轨迹 ,那么可以用这段轨迹的经验数据逐步更新轨迹中出现的每一个状态 ,利用
来实现价值函数的更新。这里的迭代更新方式利用了上述的结论。
不过,对于非平稳问题(即环境会随时间发生变化),利用均值更新学习的效果不好。此时可以采用一个常数 (类似学习率) 来代替 ,来跟踪一个现阶段的平均值(即学习当前时间局域内的价值)
3.3 基于 Monte Carlo 的强化学习
3.3.1 策略评估
目标是在给定策略 下经验片段 中学习状态价值函数 ,思想是用采样的经验数据的平均回报来代替有环境模型计算的期望回报。
但是存在一个问题,即在一段轨迹中,智能体可能从开始到终止会多次访问某几个状态。由此,估计的方法分为 首次访问MC (First visit MC) 和 每次访问MC (Every visit MC) 两种。
Monte Carlo算法对于每个状态的估计是独立的,它对于一个状态的估计并不依赖于对其他状态的估计,这与DP完全不同。这也说明了MC方法没有 自举思想。
首次访问型 MC 策略评估
First Visit MC 算法
| Input: | 待评估的策略 |
| Output: | 状态价值函数 |
| 1: | 初始化 和 回报 为空列表 对于所有的状态 |
| 2: | repeat |
| 3: | 根据策略 生成轨迹 |
| 4: | 初始化 |
| 5: | for |
| 6: | |
| 7: | 若 在之前的状态 中没有出现 |
| 8: | 将 添加到 |
| 9: | |
| 10: | 令 |
可以发现,这个算法有如下细节:
- 反向迭代计算回报 ,因为反向计算比争先计算效率更高。
- 维护一个 的列表是因为估计状态价值不能单纯只靠一次的经验数据就可以得到
- 首次访问,排除第二次访问的状态估计
每次访问型 MC 策略评估
Every Visit MC 算法
| Input: | 待评估的策略 |
| Output: | 状态价值函数 |
| 1: | 初始化 和 回报 为空列表 对于所有的状态 |
| 2: | repeat |
| 3: | 根据策略 生成轨迹 |
| 4: | 初始化 |
| 5: | for |
| 6: | |
| 7: | 将 添加到 |
| 8: | |
| 9: | 令 |
动作价值的估计
很遗憾,上述对状态价值函数的估计方法并不适用于动作价值函数的估计。因为,动作价值函数是关于状态和动作的二元函数,然而,在一段经验轨迹中,智能体可能从未访问过某些确定的状态-动作对,这就导致了这些状态-动作无法被估计。
当然,我们也可以利用 Bellman 方程,使用状态价值函数来求解动作价值函数
不过,还有其他的方法。既然我们需要保证智能体的轨迹中能访问每个状态-动作对,不妨设置一个让智能体能够从任意一个状态以任意一个动作开始的轨迹,运用这个轨迹来估计动作价值函数,这个方法称为 Explore-Start. 这个方法将与策略改进放在一起使用。
3.3.2 策略改进
有了当前最新的价值函数,就可以使用贪心方法来改进当前策略。
Monte Carlo Explore-Start
同时维护一个近似策略和近似的价值函数,彼此为对方设定优化目标。从而,价值函数不断迭代逼近当前策略的真实价值函数,当前的策略也会根据当前的价值函数不断优化。这个算法框架被称作 广义策略迭代 GPI。(实际上就是 EM 算法的思想)
利用这个思想,得到如下 MC ES 算法
Monte Carlo Explore-Start 算法
| Input: | |
| Output: | 最优策略 |
| 1: | 任意初始化策略 和动作价值函数 ,为每个动作和状态创建空列表 |
| 2: | repeat |
| 3: | 随意选择初始状态 和初始动作 // 这里不需要初始动作和状态的采样是遵循均匀分布的,但是要保证每个初始的动作和状态都有非0的概率访问到 |
| 4: | 从初始状态 和 动作 开始,利用策略 生成一段轨迹 |
| 5: | |
| 6: | for |
| 7: | |
| 8: | 若 在 中没有出现 |
| 9: | 把 加入到 |
| 10: | |
| 11: |
这里是 Explore-Start + First Vist 的策略迭代算法,需要时可修改为其他的组合。
实际上这里维护一个 的列表并不高效,可以使用前述的迭代均值更新来减少内存复杂度。
3.3.3 没有试探性出发假设的 Monte Carlo 控制
如何避免很难被满足的试探性出发假设呢?唯一的一般性解决方案就是智能体可以持续不断地选择所有可能的动作。有两种方法可以保证这一点,分别是 同轨策略 (on-policy) 和离轨策略 (off-policy)。
Definition On-Policy
在同轨策略种中,用于生成采样数据序列的策略和用于实际决策的待评估和改进的策略是相同的。 同轨策略是在交互中学习,是自学。
Definition Off-Policy
在离轨策略中,用于评估、改进的策略和用于生成采样数据的策略是不同的。 有点类似有一个示教策略和一个学习策略,观察他人的行为进行学习。
同轨策略学习
在同轨策略方法中,一般会采用”软性”的策略,例如 -greedy,在保证整体策略收敛到最优策略的同时,仍然以一定的概率随机选择动作。而正是这里的一定概率的随机动作选择保证了即使没有 Explore-Start 的条件,智能体也能学习到所有 状态-动作 组合的价值函数。
On-Policy First Visit MC Control with ε-greedy 算法
| Input: | , |
| Output: | 最优策略 |
| 1: | 任意初始化策略 和动作价值函数 ,为每个动作和状态创建空列表 ,注意这里要保证策略初始化为一个 -greedy 策略 |
| 2: | repeat |
| 3: | 从初始状态 和 动作 开始,利用策略 生成一段轨迹 |
| 4: | |
| 5: | for |
| 6: | |
| 7: | 若 在 中没有出现 |
| 8: | 把 加入到 |
| 9: | |
| 10: | 更新策略 |
这个方法非常类似 MC-ES 算法,区别就是一个需要能从任意的动作-状态组合出发,一个可以从固定的动作-状态组合出发但是策略必须是 -贪心。
Example Problem 证明 ε-贪心策略能够改进策略
解:
假设 是基于 用 -贪心更新的。有
由此得出策略 比策略 好。
离轨策略学习
离轨策略的方法比同轨策略方法的方差要大,而且收敛速度要慢,但是它的通用性更好。这是因为采用上述的同轨策略例如 -greedy 的方法时,存在一个问题。为了克服 Explore-Start 的要求,采用了以 的概率随机选择动作的技巧,。但是,正是这个技巧导致了当策略收敛到最优策略附近时,智能体仍然有一定的概率会选择十分愚蠢的行为,必须以较小的可能去选择非最优的动作。很显然,这是不合适的,尤其是当智能体有可能会做出损害自己或他人的危险的事情的情况下。
于是我们考虑使用两个策略来克服 Explore-Start 的问题。让执行动作的策略 去产生轨迹,然后用于评估当前的目标策略 ,然后改进目标策略 。不过,由于两个策略不同,如果直接拿 产生的轨迹数据来更新 的话,很可能导致在 自身需要重点关注的地方没怎么改进,反而在不重要的地方有较大的更新。
因此,需要使用基于重要度采样的技巧。
Theorem 重要性采样
数学中,重要度采样的公式为
其中,重要性权重为
根据
构造重要性权重为
注意看,虽然 需要环境模型,但是在重要性权重中,由于环境模型的概率被约去,因此实际上并不需要状态转移概率。于是
有两种方法可以估计 ,分别是 普通重要度采样 和 加权重要度采样。
普通重要度采样为
它保持了无偏性 (),但是由于权重 的方差极大,学习过程中仍然有剧烈抖动和发散等不稳定的情况存在。其中 为轨迹数量。
加权重要度采样为
这种方法显著降低了方差,因为权重被整体缩放,不至于因单条轨迹的超大权重而主导估计;但归一化也带来了有偏性(估计值收敛到行为策略下的某种加权平均,而非严格的 。
离轨策略的策略评估 算法
| Input: | 策略 |
| Output: | 动作价值函数 |
| 1: | 任意初始化 ,令计数器 |
| 2: | repeat |
| 3: | 任何能包括 的策略 (覆盖性假设,即行为策略 必须在所有状态 下对目标策略 的所有动作 赋予非零概率,即行为策略 必须”覆盖”目标策略 的所有可能行为, ) |
| 4: | 根据策略 生成一幕数据 |
| 5: | 和 |
| 6: | for |
| 7: | 当 时 |
| 8: | |
| 9: | |
| 10: | |
| 11: | |
| 12: | 否则,若 ,退出循环 |
| 13: | 令 |
这其中第 3 行的覆盖性假设是为了保证重要性采样比率 的分母不会为 0.
离轨策略的 Monte Carlo 控制 算法
| Input: | |
| Output: | 最优策略 |
| 1: | 任意初始化 ,令计数器 |
| 2: | 令策略 |
| 3: | repeat |
| 4: | 任何 -greedy 策略 |
| 5: | 根据策略 生成一幕数据 |
| 6: | 和 |
| 7: | for |
| 8: | 当 时 |
| 9: | |
| 10: | |
| 11: | |
| 12: | |
| 13: | 如果 ,则退出循环 |
| 14: |
3.3.4 一些问题
为什么做动作选择使用的是 动作价值函数,而不是状态价值函数?
解:
如果基于状态价值函数选择来更新策略,公式为
这里的公式显然需要环境模型 。但是如果采用动作价值函数,就不需要环境信息了
这里的策略用 表示是因为采用的是贪心策略,这样表示比概率更方便。
注意,。如果状态转移模型是一个确定性的模型,那么,,那么此时用状态价值函数更新策略也是可以的。

