机器学习 | 强化学习(3) | 无模型预测(Model-Free Prediction)
无模型预测(Model-Free Prediction)
无模型预测概论
上一节课《通过DP求解》可以解决一个已知的马尔科夫决策过程
本节课
- 实践无模型预测
- 解决或者估计一个未知马尔科夫决策过程的价值函数
下一节课
- 实现无模型决策(Model-free control)
- 最优化一个马尔科夫决策过程的价值函数
蒙特卡罗学习(Monte-Carlo Learning/MC Learning)
- 蒙特卡罗学习方法直接从一系列(Episode,下文序列同)记录中进行学习
- 蒙特卡罗属于无模型:即对马尔科夫决策过程的状态和回报一无所知
- 蒙特卡罗从完整的一系列记录中学习,而非自助法学习
- 蒙特卡罗使用最简单的思想:价值等于平均回报
- 注意:蒙特卡罗方法仅仅适用于带有序列化的马尔科夫决策过程
- 即所有序列都具有终结状态
蒙特卡罗策略评价(Monte-Carlo Policy Evaluation)
-
目标:在策略\(\pi\)生成的一系列记录中学习\(v_\pi\)
\[S_1,A_1,R_2,\dots,S_k\sim\pi \] -
返回回报照旧为所有衰退的回报的总和
\[G_t = R_{t+1} + \gamma R_{t+2} + \dots + \gamma^{T-1}R_T \] -
价值函数照旧为期望的返回回报
\[V_\pi(s) = \mathbb{E}_\pi[G_t|S_t = s] \] -
蒙特卡罗策略评价采用经验均值返回回报而非是期望返回回报
蒙特卡罗首次评价法(First-Visit Monte-Carlo Policy Evaluation)
- 为了评价一个状态\(s\)
- 第一时间戳\(t\)即是状态\(s\)在序列中被首次访问到的时间戳
- 计数器更新\(N(s)\leftarrow N(s) + 1\)
- 总回报更新\(S(s)\leftarrow S(s) + G_t\)
- 价值通过均值返回回报进行估计\(V(s)=\frac{S(s)}{N(s)}\)
- 基于大数定理(Law of Large Numbers),\(V(s)\rightarrow v_\pi(s) \ \ as \ \ N(s)\rightarrow\infty\)
蒙特卡罗每次评价法(Every-Visit Monte-Carlo Policy Evaluation)
- 为了评价一个状态\(s\)
- 时间戳\(t\)即是状态\(s\)在序列中被每次访问到的时间戳
- 计数器更新\(N(s)\leftarrow N(s) + 1\)
- 总回报更新\(S(s)\leftarrow S(s) + G_t\)
- 价值通过均值返回回报进行估计\(V(s)=\frac{S(s)}{N(s)}\)
- 基于大数定理(Law of Large Numbers),\(V(s)\rightarrow v_\pi(s) \ \ as \ \ N(s)\rightarrow\infty\)
均值渐进(Incremental Mean)
对于序列\(x_1,x_2,\dots\)的均值\(\mu_1,\mu_2,\dots\)可以这样渐进地计算
渐进蒙特卡罗更新(Incremental Monte-Carlo Updates)
基于序列\(S_1,A_1,R_2\dots,S_T\)渐进地更新\(V(s)\)
对于状态\(S_t\)及其返回回报\(G_t\)
对于非静态问题,这个渐进更新可以用于拟合一个动态的均值,i.e 去除旧序列的影响
时序差分学习(Temporal-Difference Learning)
- TD法直接从序列化的记录中学习
- TD是无模型的,也就是对于马尔科夫决策过程的转移和回报一无所知
- TD直接从不完整的序列学习,通过自助法
- TD通过估计去更新估计
蒙特卡罗比较时序差分
-
目标:在线通过策略\(\pi\)下产生的序列记录对\(v_\pi\)进行学习
-
渐进地进行每次访问蒙特卡罗
- 通过实际返回回报\(G_t\)去更新价值\(V(S_t)\)\[V(S_t)\leftarrow V(S_t) + \alpha(\color{red}{G_t} - V(S_t)) \]
- 通过实际返回回报\(G_t\)去更新价值\(V(S_t)\)
-
最简单的时序差分学习算法:\(TD(0)\)
-
通过估计的返回回报\(R_{t+1} + \gamma V(S_{t+1})\)去更新价值\(V(S_t)\)
\[V(S_t)\leftarrow V(S_t) + \alpha(\color{red}{R_{t+1} + \gamma V(S_{t+1})} - V(S_t)) \] -
\(R_{t+1} + \gamma V(S_{t+1})\)则称为时序差分目标(TD target)
-
\(\delta_t = R_{t+1} + \gamma V(S_{t+1}) - V(S_t)\)则称为时序差分误差(TD error)
-
时序分析比起蒙特卡罗的优点就是无需达到终止状态就可以立即更新价值函数
David Silver的至理名言:要是你凉了,你就更新不了价值函数了。
【例子】
蒙特卡罗与时序差分的优缺点
- 时序差分在得知最终结果之前就可以进行学习
- 时序差分从每一步中直接在线学习
- 蒙特卡罗必须直到序列结尾的返回回报是已知的
- 时序差分直接学习即使没有最终结果
- 时序差分直接从不完整的序列中学习
- 蒙特卡罗只能从完整序列中学习
- 时序差分能够在连续的(非终止的)环境中学习
- 蒙特卡罗只能从序列化的(终止的)的环境中学习
偏差与方差之权衡
- 返回回报\(G_t = R_{t+1} + \gamma R_{t+2} + \dots + \gamma^{T-1}R_T\)即是\(v_\pi\)的无偏差估计
- 真实的差分时序目标\(R_{t+1}+\gamma v_\pi(S_{t+1})\)即是\(v_\pi(S_t)\)的无偏差估计
- 非真实的差分时序目标则是\(R_{t+1}+\gamma V_\pi(S_{t+1})\)即是\(v_\pi(S_t)\)的偏差估计
- 时序差分显然比返回回报拥有更低的方差
- 返回回报取决于很多的随机行动、转移概率、回报
- 时序差分目标取决于一个随机的行为、转移概率、回报
因此
- 蒙特卡罗拥有高方差、零偏差
- 收敛性更强
- (甚至可以函数拟合)
- 但对初值不太敏感
- 容易理解与使用
- 时序差分拥有低方差、稍微的偏差
- 一般而言比蒙特卡罗更高效
- TD(0)收敛于\(v_\pi(s)\)
- (但并非总是能函数近似),按照David Silver的解释就是不完全适用于所有场合的\(v_\pi\)估计
- 对初值比较敏感
批量蒙特卡罗与时序差分
-
蒙特卡罗与时序差分的收敛性:\(V(s)\rightarrow v_\pi(s) \ \ as \ \ experience \rightarrow \infty\)
-
但如果对于一个无穷记录的批量解决方案呢?
\[s^1_1,a^1_1,r_2^1,\dots,s_{T_1}^1 \\ \vdots \\ s_1^K, a_1^K, r_2^K,\dots,s_{T_k}^K \] -
例如重复地从序列\(k\in[1,K]\)中采样
-
然后对序列\(k\)应用蒙特卡罗与时序差分
[David Siler这里举了一个例子来说明蒙特卡罗和时序差分对于无限重复序列的区别]
确定性等价(Certainty Equivalence)
-
蒙特卡罗通过最小化方差收敛于解决方案
-
最优拟合于观测到的返回回报
\[\sum^K_{k=1}\sum^{T_k}_{t=1}(g_t^k - V(s_t^k)) ^ 2 \] -
在上述AB例子中,\(V(A) = 0\)
-
-
而TD(0)则收敛于最大似然马尔科夫模型的解
-
对于马尔科夫决策过程\(\mathcal{\langle S,A,\hat P,\hat R, \gamma\rangle}\),最优拟合为
\[\mathcal{ \hat P ^a_{s,s'} = \frac{1}{N(s,a)}\sum^K_{k=1}\sum^{T_k}_{t=1} \mathbf 1(s^k_t, a^k_t, s^k_{t+1} = s,a,s') \\ \hat R^a_s = \frac{1}{N(s,a)}\sum^K_{k=1}\sum^{T_k}_{t=1}\mathbf 1(s^k_t,a^k_t=s,a)r^k_t } \] -
在上述AB例子,\(V(A)=0.75\)
-
比较总结
- 时序差分利用了马尔科夫性
- 因此在马尔科夫环境中的效率更高
- 而蒙特卡罗没有利用马尔科夫性
- 其在非马尔科夫环境中的效率会更高(按照David Silver的说法,一般非马尔科夫环境指的是不能完全观察的环境)
[这里David Silver用图像演示了蒙特卡罗、时序差分、动态规划三种求解方法]
自助法与采样(Bootstrapping and Sampling)
- 自助法:估计值也会参与模型更新
- 蒙特卡罗并非自助法
- 动态规划是自助法
- 时序差分是自助法
- 采样:通过采样的均值进行更新
- 蒙特卡罗就是采样
- 动态规划并没有采样
- 时序差分就是采样
[这里David Silver给了一张很意思的强化学习总结图表,然后有人问了为什么每次学习都是更精确的而不会倒退]
n步预测(n-Step Prediction)
- 如果时序差分目标是n步向前取样的(我们一般时序差分就是一步取样的)
- 那么当步数不限制的话就退化为蒙特卡罗算法了
n步返回回报(n-Step Return)
-
n步返回回报(\(n=1,2,\infty\))即是:
\[\begin{align} n=1\quad & (TD) & G^{(1)}_t & = R_{t+1} + \gamma V(S_{t+1}) \\ n=2\quad & & G^{(2)}_t & = R_{t+1} + \gamma R_{t+2} + \gamma^2 V(S_{t+2}) \\ \vdots & & \vdots& \\ n=\infty \quad & (MC) & G^{(\infty)}_t & = R_{t+1} + \gamma R_{t+2} + \dots + \gamma^{T-1}R_T \\ \end{align} \] -
那么n步返回回报定义为
\[G^{(n)}_t = R_{t+1} + \gamma R_{t+2} + \dots + \gamma ^ {n-1}R_{t+n} + \gamma ^ n V(S_{t+n}) \] -
n步时序差分学习
\[V(S_t)\leftarrow V(S_t) + \alpha \big(G_t^{(n)} - V(S_t)\big) \]
n步平均返回回报(Averaging n-Step Returns)
-
我们可以对n步返回回报除以数量进行取平均
-
例如对2步返回回报以及4步返回回报去平均
\[\frac{1}{2}G^{(2)} + \frac{1}{2}G^{(4)} \] -
从两个返回回报中混合得到的信息
-
那么有办法高效地从所有时间缀中混合全部信息吗?
\(\lambda\)-返回回报(\(\lambda\)-return)
-
对于\(\lambda\)-返回回报\(G^\lambda_t\)混合了全部n步返回回报\(G^{(n)}_t\)
-
采取权重\((1-\lambda)\lambda^{n-1}\)
\[G^\lambda_t = (1-\lambda)\sum^\infty_{n=1}\lambda^{n-1}G^{(n)}_t \] -
Forward-view \(TD(0)\)
\[V(S_t)\leftarrow V(S_t) + \alpha\big(G^\lambda_t - V(S_t)\big) \]
Forward-view TD(\(\lambda\))
- 通过\(\lambda\)-返回回报去更新价值函数
- Forward-view前向观测去计算\(G^\lambda_t\)
- 与蒙特卡罗相似,只能通过完整序列去进行计算
Backward-view TD(\(\lambda\))
有效性追踪(Eligibility Traces)
对于序列2,2,2,1,3
那么3的发生应该归结于2还是1?
-
频率启发(Frequency Heuristic):将归结为最频繁的状态
-
最近启发(Recency Heuristic):将归结为最近的状态
-
而有效性追踪(Eligibility Traces)则包含了这两种启发
\[\begin{align} E_0(s) &=0\\ E_t(s) &= \gamma\lambda E_{t-1}(s) + \mathbf1(S_t=s) \end{align} \] -
Backward-view TD(\(\lambda\))中,我们对于每个状态\(s\)应用有效性追踪
-
然后再更新所有状态\(s\)的\(V(s)\)
-
更新时与时序差分误差\(\delta_t\)和有效性追踪\(E_t(s)\)成正比
\[\begin{align} \delta_t & = R_{t+1}+\lambda V(S_{t+1}) - V(S_t) \\ V(t)&\leftarrow V(s) + \alpha\delta_tE_t(s) \end{align} \]
TD(\(\lambda\))与TD(0)
- 当\(\lambda = 0\),仅目前状态会进行更新
- 此时与TD(0)是完全一致的\[V(S_t)\leftarrow V(S_t) + \alpha\delta_t \]
TD(\(\lambda\))与蒙特卡罗
-
当\(\lambda=1\),有效性追踪一直到序列的尽头
-
在序列化的环境中采用离线更新
-
更新一个序列的时候,对于\(TD(1)\)的全部更新和其在蒙特卡罗的全部更新完全一致
-
原理:
-
离线更新的总和由forward-view和backward-viewTD(\(\lambda\))组成
\[\sum^T_{t=1}\alpha\delta_tE_t(s) = \sum^T_{t=1}\alpha\bigg(G^\lambda_t - V(S_t)\bigg)\mathbf1(S_t=s) \]
前向和后向TD(\(\lambda\))的总结
\(\lambda=0\) | \(\lambda\in(0,1)\) | \(\lambda=1\) | |
---|---|---|---|
Backward View | TD(0) | TD(\(\lambda\)) | TD(1) |
Forward View | TD(0) | Forward TD(\(\lambda\)) | 蒙特卡罗 |
Exact Online | TD(0) | Exact TD(\(\lambda\)) | Exact TD(1) |