无模型预测(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\)可以这样渐进地计算

\[\begin{align}
\mu_k & = \frac{1}{k}\sum^k_{j=1}x_j \\
& = \frac{1}{k}\Bigg(x_k + \sum^{k-1}_{j = 1}x_j \Bigg) \\
& = \frac{1}{k} (x_k + (k-1)\mu_{k-1}) \\
& = \mu_{k-1} + \frac{1}{k}(x_k - \mu_{k-1})
\end{align}
\]

渐进蒙特卡罗更新(Incremental Monte-Carlo Updates)

基于序列\(S_1,A_1,R_2\dots,S_T\)渐进地更新\(V(s)\)

对于状态\(S_t\)及其返回回报\(G_t\)

\[\begin{align}
N(S_t) & \leftarrow N(S_t) + 1 \\
V(S_t) & \leftarrow V(S_t) + \frac{1}{N(S_t)}(G_t - V(S_t))
\end{align}
\]

对于非静态问题,这个渐进更新可以用于拟合一个动态的均值,i.e 去除旧序列的影响

\[V(S_t) \leftarrow V(S_t) + \alpha(G_t - V(S_t))
\]

时序差分学习(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))
      \]
  • 最简单的时序差分学习算法:\(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\),仅目前状态会进行更新
\[\begin{align}
E_t(s) & = \mathbf1(S_t=s) \\
V(s)& \leftarrow V(s) + \alpha\delta_tE_t(s)
\end{align}
\]
  • 此时与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)

机器学习 | 强化学习(3) | 无模型预测(Model-Free Prediction)的更多相关文章

  1. 强化学习(十七) 基于模型的强化学习与Dyna算法框架

    在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Base ...

  2. 强化学习之 免模型学习(model-free based learning)

    强化学习之 免模型学习(model-free based learning) ------ 蒙特卡罗强化学习 与 时序查分学习 ------ 部分节选自周志华老师的教材<机器学习> 由于现 ...

  3. 时间序列深度学习:seq2seq 模型预测太阳黑子

    目录 时间序列深度学习:seq2seq 模型预测太阳黑子 学习路线 商业中的时间序列深度学习 商业中应用时间序列深度学习 深度学习时间序列预测:使用 keras 预测太阳黑子 递归神经网络 设置.预处 ...

  4. 强化学习 3—— 使用蒙特卡洛采样法(MC)解决无模型预测与控制问题

    一.问题引入 回顾上篇强化学习 2 -- 用动态规划求解 MDP我们使用策略迭代和价值迭代来求解MDP问题 1.策略迭代过程: 1.评估价值 (Evaluate) \[v_{i}(s) = \sum_ ...

  5. ICML 2018 | 从强化学习到生成模型:40篇值得一读的论文

    https://blog.csdn.net/y80gDg1/article/details/81463731 感谢阅读腾讯AI Lab微信号第34篇文章.当地时间 7 月 10-15 日,第 35 届 ...

  6. AI之强化学习、无监督学习、半监督学习和对抗学习

    1.强化学习 @ 目录 1.强化学习 1.1 强化学习原理 1.2 强化学习与监督学习 2.无监督学习 3.半监督学习 4.对抗学习 强化学习(英语:Reinforcement Learning,简称 ...

  7. Predicting effects of noncoding variants with deep learning–based sequence model | 基于深度学习的序列模型预测非编码区变异的影响

    Predicting effects of noncoding variants with deep learning–based sequence model PDF Interpreting no ...

  8. backbone学习笔记:模型(Model)(2)属性验证

    Backbone的属性验证有2种方法: 1.Backbone自带简单的验证方法,但是验证规则需要自己实现 通过validate()方法进行验证,验证规则写在此方法里. var RoomModel = ...

  9. backbone学习笔记:模型(Model)(1)基础知识

    backbone为复杂Javascript应用程序提供MVC(Model View Controller)框架,框架里最基本的是Model(模型),它用来处理数据,对数据进行验证,完成后台数据与前台数 ...

  10. 伯克利、OpenAI等提出基于模型的元策略优化强化学习

    基于模型的强化学习方法数据效率高,前景可观.本文提出了一种基于模型的元策略强化学习方法,实践证明,该方法比以前基于模型的方法更能够应对模型缺陷,还能取得与无模型方法相近的性能. 引言 强化学习领域近期 ...

随机推荐

  1. TensorFlow 中 conv2d 的确切含义

    在读: <TensorFlow:实战Google深度学习框架> 才云科技Caicloud, 郑泽宇, 顾思宇[摘要 书评 试读]图书https://www.amazon.cn/gp/pro ...

  2. 【Vue】vite+vue3 如何实现点击进入详情页/文章页

    如上图,点击标题可以进入详情页,关键代码截图如下: 然后去配置路由 那么组件如何从地址中接收参数呢

  3. docker - 将几个目录复制到另一个目录

    您如何将多个目录复制到Docker中的目标目录?我不想复制目录内容,而是复制整个目录结构.COPY和ADD命令复制目录内容,展平结构,这是我不想要的.也就是说,如果这些是我的来源: . ├── a │ ...

  4. arch linux deepin-wine-wechat

    https://aur.archlinux.org/packages/deepin-wine-wechat md5sum for WeChatSetup-3.9.0.28.exe should be ...

  5. Mysql数据库连接失败SSLException: Unsupported record version Unknown-0.0

    问题描述:mysql版本:5.7.27jdk版本:1.8.0_201 tomcat日志中报错,显示连接数据库失败,报错信息如下: The last packet successfully receiv ...

  6. Qt开源作品33-图片开关控件

    一.前言 进入智能手机时代以来,各种各样的APP大行其道,手机上面的APP有很多流行的元素,开关按钮个人非常喜欢,手机QQ.360卫士.金山毒霸等,都有很多开关控制一些操作,在WINFORM项目上,如 ...

  7. IIS通过URL重写配置http跳转https,排除部分域名

    <rewrite> <rules> <rule name="http to https" stopProcessing="true" ...

  8. Python学习(六)——配套《PyTorch深度学习实战》

    1. NumPy介绍 这张图片介绍了Python中两个非常重要的科学计算库:NumPy和SciPy,以及它们的核心功能和特性. NumPy NumPy(Numerical Python)是一个开源的P ...

  9. 关于动态使用keepAlive不生效的问题

    首先,我想实现在返回页面时,页面不进行刷新,比如我原先选择的第四页,返回后显示了第一页 想到使用keepAlive缓存组件,大部分推荐的方法为这样,但是不生效 <keep-alive v-if= ...

  10. 安装docker-compose v1

    1.首先要确保已经安装docker 2.下载docker-compose二进制文件,并移动到适当的目录 sudo curl -L "https://github.com/docker/com ...