前提:一个环境可以用 MDP 进行表示,但是我们并不知道这个 MDP,我们还是想要解决问题,找到最优解
一、Introduction
1)课程联系:
- 上节课:
- Planning by dynamic programming
- Solve a know MDP
- 本节课:
- Model-free prediction 【给定一个 Policy ,我们按照这个 Policy 可以获取多少奖励】
- 评估(Estimate)一个未知的 MDP 的 value function
- 下节课:
- Model-free Control
- 优化(Optimize)一个未知 MDP 的value function
本节下面的部分介绍具体的几种方法,分别是蒙特卡洛强化学习(Monte-Carlo Learning)、时序差分强化学习(Temporal-Difference Learning)和介于两者之间的λ时序差分强化学习(TD(λ))
二、Monte-Carlo Learning【蒙特卡洛学习】
1)MC Learning 的特点
- 直接从经验中学习;这种方法非常适合于具有 episode 的 MDP 过程【类似于游戏的过程】
- Model-free: 不知道 MDP 的知识,包括状态转移和即时奖励
- 从整个 episodes 中学习;通常情况下,某一个状态的 value ,以这个状态在多个 Episode 中获得的奖励的平均来计算;
-
注意:
- 所有的 Episodes 必须会终止
2) MC Policy Evaluation【蒙特卡洛策略评估】
蒙特卡洛学习方法(Monte-Carlo RL):在不清楚 MDP状态转移以及即时奖励的情况下,直接从一系列的 Episodes 中学习状态值函;通常情况下,某一个状态的价值等于在多个 Episode 中以这个状态得到的所有收获的平均;
- 目标(Goal):给定 Policy 情况下,从一系列完整的 episode 的经验中学习
v
π
v_{\pi}
vπ (状态值函数)
- episode 中包含的信息包含状态的转移、行为、即时奖励(即 R t R_t Rt)
S 1 , A 1 , R 2 , S 2 , A 2 , . . . , S t , A t , R t + 1 . . . , S k ∼ π S_1, A_1, R_2, S_2, A_2, ..., S_t, A_t, R_{t+1} ...,S_k \sim \pi S1,A1,R2,S2,A2,...,St,At,Rt+1...,Sk∼π
-
回顾之前的知识:
-
return是总的折扣奖励(discounted reward),因此,t 时刻 $S_t $ 的收获【其中 T 为终止时刻】:
-
值函数(value function)是 return 的期望(expected return)
-
-
MC 中,我们使用 empirical mean return 而不是 expected return,即 使用有限的、完整 Episode 产生的经验性信息,经验性地推导出每个状态的平均收获(empirical mean return),来代替每个状态的收获的期望(expected return)
-
在状态转移过程中,可能发生一个状态经过一定的转移之后又一次或者多次返回这个状态的情况,当出现这种情况的时候,在一个 episode 中如何计算这个状态发生的次数和这个 episode 的收获呢?主要有两种办法:
1. 首次访问蒙特卡洛策略评估(First-Visit Monte-Carlo Policy Evaluation)
- 给定一个策略 Policy,我们使用一系列 Episode 评估一个状态 s 的时候,在每一个 Episode 中,只有当一个状态 s 是第一次出现的时候,我们进行如下的计算【下面更新的变量都是全局的,而不是一个 Episode 中的变量】:
- 更新状态出现的次数的计数器 counter: N ( s ) ← N ( s ) + 1 N(s) \leftarrow N(s) + 1 N(s)←N(s)+1
- 更新这个状态 s 的总的收获: S ( s ) ← S ( s ) + G t S(s) \leftarrow S(s) + G_t S(s)←S(s)+Gt
- 最终,对于任意一个状态 s 的收获可以使用平均值进行计算: V ( s ) = S ( s ) / N ( s ) V(s) = S(s)/N(s) V(s)=S(s)/N(s)
- 根据大数定理(by law of large numbers),当 N ( s ) → ∞ N(s) \rightarrow \infty N(s)→∞ 的时候,就有 V ( s ) → v π ( s ) V(s) \rightarrow v_{\pi}(s) V(s)→vπ(s)
2. 每次访问蒙特卡洛策略评估(Every-Visit Monte-Carlo Policy Evaluation)
- 给定一个策略 Policy,我们使用一系列 Episode 评估一个状态 s 的时候,在每一个 Episode 中,每当一个状态 s 出现的时候,都进行下面的计算【下面更新的变量都是全局的,而不是一个 Episode 中的变量】:
- 更新状态出现的次数的计数器 counter: N ( s ) ← N ( s ) + 1 N(s) \leftarrow N(s) + 1 N(s)←N(s)+1
- 更新这个状态 s 的总的收获: S ( s ) ← S ( s ) + G t S(s) \leftarrow S(s) + G_t S(s)←S(s)+Gt
- 最终,对于任意一个状态 s 的收获可以使用平均值进行计算: V ( s ) = S ( s ) / N ( s ) V(s) = S(s)/N(s) V(s)=S(s)/N(s)
- 根据大数定理(by law of large numbers),当 N ( s ) → ∞ N(s) \rightarrow \infty N(s)→∞ 的时候,就有 V ( s ) → v π ( s ) V(s) \rightarrow v_{\pi}(s) V(s)→vπ(s)
3) Incremental Monte-Carlo
-
Incremental Mean
-
一个序列 x 1 , x 2 , . . . x_1, x_2,... x1,x2,... 的平均数 μ 1 , μ 2 , . . . \mu_1, \mu_2, ... μ1,μ2,... 可以增量地进行计算
-
-
Incremental Monte-Carlo Updates【蒙特卡洛增量更新】
-
对于一系列的 Episodes 中的每一个 Episode: S 1 , A 1 , R 2 , . . . , S T S_1, A_1, R_2, ..., S_T S1,A1,R2,...,ST ,我们可以进行增量地进行更新(采用上面的办法);对于收获是 G t G_t Gt 的状态 S t S_t St ,更新方法如下:
- 注意:即便是下面的更新,也是需要等待每一个 Episode 结束以后
-
在处理非静态(non-stationary)问题的时候,使用这个方法跟踪一个实时更新的平均值是非常有用的,可以丢弃已经计算过的 Episode 信息。可以引入参数 α:
- 这个方法的优点是,我们可以放弃保存一些过去的信息,这些信息可能会导致我们效率的下降
- 在这里我们是在评估一个给定的 Policy,但是实际的强化学习中,我们是在不断地优化我们的 Policy,这样一些历史的信息就不是那么重要了;
-
三、Temporal-Difference(TD) Learning
TD 学习方法也是直接从经验中进行学习;这个方法是 Model-free 的,即在不知道 MDP 状态转移和奖励的情况下;与蒙特卡洛方法的区别: TD 方法从不完整的 Episodes 中进行学习(我们不必实际地走完整个轨迹,我们可以部分地走这个轨迹,然后预测走完整个轨迹我们所能获得的奖励),我们称这个方法为 bootstrapping. 实际上 TD 方法是 updates a guess towards a guess
- 更新的过程:在状态的开始,我们做一个预测,然后我们沿着轨迹走,当我们走了部分的轨迹,我们再次进行一个预测,这个预测可以用来更新我们最开始的预测。
1) MC 与 TD 的对比
-
目标(Goal):给定策略 Policy 的情况下,在线地从经验中学习状态价值函数 v π v_{\pi} vπ
-
every-visit 增量蒙特卡洛:用实际的 return G t G_t Gt 更新值 V ( S t ) V(S_t) V(St)
-
最简单的 TD 学习算法:
-
使用预测的return(estimated return)即:,来更新 V ( S t ) V(S_t) V(St)
-
称之为 TD target
-
δ t = R t+1 + γV (S t+1 ) − V (S t ) 称之为 TD error
-
-
TD 对 MC 的优势在于
-
当遇到可能的非常大的负奖励的时候,TD 会立即采取行动,而 MC 直到这种不好的情况发生才会进行更新
-
-
举个栗子:开车回家
- TD 算法实际上在整个回家的过程中(一个 Episode),根据已经消耗的时间和预期还需要的时间来不断更新最终需要消耗的总时间;
- MC 算法在路上碰到各种状况的时候并不会更新对回家时间的预估,只有在真的回家之后,才会更新各个节点上的时间,在下一次回家的时候使用新的评估进行决策;
-
分别使用 MC 和 TD 方法绘制出上个例子的图形
- TD 算法不需要等待所有的都发生以后再进行更新
-
对比 MC 与 TD 算法的优势与不足:
- TD 算法可以在知道最终结果之前进行学习:
- TD 算法可以在每一步之后在线学习
- MC 算法必须等待一个 Episode 结束之后,才能进行学习
- 当没有最终结果的时候,TD 算法可以进行学习
- 也就是说,TD 算法可以从不完整的序列中进行学习
- MC 算法只能从完整的序列中进行学习
- TD 算法可以在没有终止的,持续的环境中进行训练
- MC 算法只能在有终止的 Episode 环境中
- 偏差(Bias)与方差(Variance)
- 蒙特卡洛方法中,Return 是 v π ( S t ) v_{\pi}(S_t) vπ(St) 的无偏估计
- True TD 算法中的 target ,也是 v π ( S t ) v_{\pi}(S_t) vπ(St) 的无偏估计
- 但是,TD 中的 target 是 v π ( S t ) v_{\pi}(S_t) vπ(St) 的有偏估计
- TD 算法的 target 比 MC 算法有更小的方差(Variance)
- Return 依赖于很多随机的行为,转换和奖励
- TD 算法的 Target 则依赖于一个随机的行为,转换和奖励
- 总结:
- MC 算法高方差(Variance),零偏差(Bias)
- 以为上面的的性质,MC 算法有比较好的收敛性
- 对初始 value 不是很敏感
- 容易理解,并且使用简单
- TD 算法有较低的方差(Variance)和一些偏差(Bias)
- 通常比 MC 算法更加高效
- TD(0) 收敛于 v π ( s ) v_{\pi}(s) vπ(s)
- 对初始值更加敏感
- MC 算法高方差(Variance),零偏差(Bias)
- TD 算法可以在知道最终结果之前进行学习:
-
举个栗子:Random Walk
- 左图中分别介绍了这个游戏和使用 TD 算法得到的结果,可以看到随着训练的 Episodes 的增加,得到的状态价值函数,越来越接近于真实的状态价值函数
- 右图中是 MC 算法和 TD 算法效率的比较,可以看出 TD 算法的效率更高;换可以看到当 step-size 不是非常小的情况下,TD 算法可能得不到最终真实的价值,会在某一个区间震荡
2) Batch MC and TD
-
这里说的意思是:当 Episodes 的个数趋向于无穷的时候,MC 和 TD 算法都会收敛于真是的状态值函数: V ( s ) → v π ( s ) V(s) \rightarrow v_{\pi}(s) V(s)→vπ(s)
-
但是,当 Episode 的个数是有限的情况下呢?重复地在有限的 Episodes 上进行训练,结果是怎样的?
-
举个栗子:AB
-
现有两个状态(A和B),MDP未知,衰减系数为1,有如下表所示8个完整Episode的经验及对应的即时奖励,其中除了第1个Episode有状态转移外,其余7个均只有一个状态。依据现有的 Episodes,状态 A 和状态 B 的状态值函数分别是多少?
-
根据 MC 算法,需要完整的 Episode 才能进行预测,而在上面的 Episodes 中,之后第一个是包含状态 A 的,而此时的 Return 是 0,因此,MC 算法会预测 A 状态的值为 0;而 B 状态是 8 个 Episode 中都有的,因此可以求出来平均值是 0.75;
-
根据 TD 算法,尝试建立 MDP 模型,因此根据上面的 8 个 Episodes,可以构建如下图中的 MDP 模型,因此,状态 A 和状态 B 的值都是 0.75
-
-
结论:
-
MC 算法收敛于一个能够最小化状态值函数与实际收获的均方差的解决方案:
-
TD(0) 算法收敛于一个 MDP 模型,这个模型可以最好地契合现有的数据
-
-
关于 MC 和 TD 算法优势与劣势比较的补充:
- TD 算法利用了马尔科夫性质,在马尔科夫环境中更加高效
- MC 算法并没有利用马尔科夫性质,因此通常在非马尔科夫环境中更加高效
3)蒙特卡洛学习(MC)、时序差分强化学习(TD)以及动态规划(DP)算法比较
-
Bootstrapping:使用预估值进行更新(update involves an estimate)
- MC 算法不包含
- DP 和 TD 算法包含
-
Sample:
- MC 和 TD 算法都是采样
- DP 算法不使用采样
-
蒙特卡洛学习(MC):
- 假如我们要更新的是根节点的 value,我们需要采样完整的 Episode(即从根节点到终止状态),用来更新根节点的状态值
-
时序差分学习(TD)
- 假设同样的要更新根节点的状态值,我们需要采样,但是这个采样可以是不完整的 Episode,只考虑向前 一步,即可用来更新根节点的状态值
-
动态规划(DP)
- 同样的,我们在动态规划中想要更新根节点,我们不能进行采样,要根据完整的模型更新根节点的状态值
-
下图从两个维度:采样深度和广度,对四种强化学习算法进行了区分(增加一种穷举法 exhaustive search):
四、TD(λ)
1)n-Step Prediction
- TD(0) 算法是向前多看一步,我们可以考虑多向前看 n 步,当 n 趋向于无穷的时候,实际上就是 MC 算法
-
那么现在的问题是,既然存在 n-step 预测,那么当 n 是多少的时候有最好的效果呢?下面看一个例子
- 下图中分别绘制了在线学习和离线学习的曲线,曲线旁边的数字即 n-step 中的 n;
- 从这个曲线中可以看出对于离线和在线学习,最有效的 n 是不一样的;同时不同的问题对应的最有效的 n 也是不同的
-
我们也可以将多个不同的 n 结合起来,比如将 2-step 和 4-step return 结合起来:
-
那么我们能不能将所有不同的 n-step 结合起来,同时又可以不增加算法的时间复杂度呢?
2) TD(λ)
-
λ-return:将所有不同的 n 都考虑了进来
-
公式推导:
KaTeX parse error: No such environment: equation at position 10: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \begin{align…- 当 n 趋向于无穷的时候, S n = 1 1 − λ S_n = \frac{1}{1-\lambda} Sn=1−λ1 ,因此,上图中总和为 1
-
-
Forward-view TD(λ)
- 类似于 MC 算法,TD(λ) 算法只能适用于完整的 Episodes;使用 λ return 来更新 value function;
-
Backward View TD(λ)
-
Eligibility Traces:首先了解一个概念;如下图所示,是铃铛还是亮灯引起了最后的警示?
-
频率启发式(Frequency heuristic):认为是频率最高的
-
最近启发式(Recency heuristic):认为是最近发生的
-
Eligibility Traces 将上面的两个结合在一起,实际上就是一个状态的影响是随着时间递减的:
-
-
Backward View TD(λ)
-
给每一个状态保存一个 Eligibility Traces
-
给每一个状态 s 更新状态值 V(s)
-
-
-
Forward 和 backward TD 之间的关系【对于这两个概念理解还是不深刻,大家有自己的理解的话可以给我留言,一块探讨一下】
-
TD(λ) 和 TD(0):
-
当 λ = 0,只有当前的状态会被更新
-
这等同于 TD(0) 的更新:
-
-
TD(λ) 和 MC
-
-
当λ=1时,TD(1)粗略看与每次访问的MC算法等同;在线更新时,状态价值差每一步都会有积累;离线更新时,TD(1)等同于MC算法。
-
下表给出了在 λ 不同取值,离线学习和在线学习时,forward 和 backward 的关系
![image-20210215160849683](https://www.icode9.com/i/ll/?i=img_convert/86bfeddac49f1c30287ab84e579b73a0.png)