无模型控制(Model-Free Control)

无模型预测概论

  • 上一节课:

    • 无模型预测
    • 用于估计一个未知马尔科夫决策过程的价值函数
  • 这节课
    • 无模型控制
    • 最优化一个未知马尔科夫决策过程的价值函数

一般在以下两种情况采用无模型预测

  • 马尔科夫决策过程是未知的,仅能通过采用得到记录
  • 马尔科夫决策过程是已知的,但是过于巨大,仅能通过采样进行

基于策略学习与非基于策略学习(On and Off-Policy Learning)

  • 基于策略学习(On-policy learning)

    • “实践出真知”(“Learn on the job”)
    • 基于策略\(\pi\)的采样结果去学习策略\(\pi\)
  • 非基于策略学习(Off-policy learning)
    • “站在巨人的肩膀上”(”Look over someone's shoulder“)
    • 基于策略\(\mu\)的采样结果去学习策略\(\pi\)

无模型策略迭代基于动作-状态函数

  • 基于\(V(s)\)的贪心策略提升必须要有马尔科夫决策过程的一个模型

    \[\pi'(s)= \mathcal{\mathop{\arg\max}_{a\in A}R^a_s+P^a_{ss'}}V(s')
    \]
  • 基于\(Q(s,a)\)的贪心策略提升则是无需模型的

    \[\pi'(s)= \mathop{\arg\max}_{a\in \mathcal{A}}Q(s,a)
    \]

\(\epsilon\)-贪心探索(\(\epsilon\)-Greedy Exploration)

贪心策略提升的缺陷

  • 如果我们始终按照策略\(\pi\)的最优解进行行动,那么极有可能我们会卡在局部最优解当中

我们引入\(\epsilon\)-贪心探索以避免这种局部最优解窘况

  • 这是一种简单而有效的方式来提供可控的随机探索

  • 一切行动\(m\)都基于非零的概率得以被执行

  • 有\(1-\epsilon\)的概率选择最优的动作

  • 有\(\epsilon\)的概率随机选择一个行动

    \[\pi(a|s) = \Bigg \{
    \begin{align}
    &\frac{\epsilon}{m} + 1-\epsilon\quad & if \quad a^* = \mathop{\arg\max}_{a\in \mathcal{A}}Q(s,a) \\
    & \frac{\epsilon}{m} & otherwise
    \end{align}
    \]

\(\epsilon\)-贪心策略改进

对于任意一个\(\epsilon\)-贪心策略\(\pi\),关于\(q_\pi\)的\(\epsilon\)-贪心策略\(\pi'\)则为一个提升,\(v_{\pi'}(s)\ge v_{\pi}(s)\)

证明如下:

\[\begin{align}
q_\pi(s,\pi'(s)) & = \sum_{a\in\mathcal A}\pi'(a|s)q_\pi(s,a) \\
& = \frac{\epsilon}{m}\sum_{a\in\mathcal A}q_\pi(s,a) + (1-\epsilon)\max_{a\in\mathcal A} q_\pi(s,a) \\
& \ge \frac{\epsilon}{m}\sum_{a\in\mathcal A}q_\pi(s,a) + (1-\epsilon)\sum_{a\in\mathcal A} \frac{\pi(a|s) - \frac{\epsilon}{m}}{1-\epsilon}q_\pi(s,a) \\
& = \sum_{a\in\mathcal A}\pi(a|s)q_\pi(s,a) \\
& = v_\pi(s)

\end{align}
\]

无限制探索的限制性贪心算法(Greedy in the Limit with Infinite Exploration)(GLIE)

定义:

  • 所有状态-动作二元匹配都将被不断地被探索

    \[\lim_{k\rightarrow\infty} N_k(s,a)=\infty
    \]
  • 那么策略将会收敛于一个贪心策略

    \[\lim_{k\rightarrow\infty}\pi_k(a|s)=\mathbf1(a=\mathop{\arg\max}_{a'\in \mathcal{A}}Q_k(s,a'))
    \]
  • 比如说当\(\epsilon\)-贪心算法为\(\epsilon_k=\frac{1}{k}\)当\(\epsilon\)下降到0,就是GLIE,

GLIE蒙特卡罗控制(GLIE Monte-Carlo Control)

  • 基于策略\(\pi\)采样得到第k个序列:\(\{S_1,A_1,R_2,\dots,S_T\}\sim\pi\)

  • 对于序列中的一切状态\(S_t\)和动作\(A_t\)

    \[\begin{align}
    N(S,A_t) & \leftarrow N(S_t,A_t) + 1 \\
    Q(S_t,A_t) & \leftarrow Q(S_t,A_t) + \frac{1}{N(S_t,A_t)}(G_t - Q(S_t,A_t))
    \end{align}
    \]
  • 再基于新的动作-价值函数去提升策略

    \[\begin{align}
    \epsilon & \leftarrow \frac{1}{k} \\
    \pi & \leftarrow \epsilon-greedy(Q)
    \end{align}
    \]

那么GILE蒙特卡罗控制收敛于最优动作-状态函数

  • \(Q(s,a)\rightarrow q_\pi(s,a)\)

蒙特卡罗对比时序差分控制

  • 时序差分学习对比蒙特卡罗有以下的优点

    • 低方差
    • 在线学习
    • 非完整的序列
  • 自然启发:采用时序差分取代蒙特卡罗
    • 对\(Q(S,A)\)采用时序差分
    • 再使用\(\epsilon\)-贪心算法去提升策略
    • 每一步时间缀都更新一次

基于SARSA算法更新动作-价值函数

\[Q(S,A)\leftarrow Q(S,A) + \alpha(R+\gamma Q(S',A')-Q(S,A))
\]

因为是基于五元组\(\mathcal{\langle S,A,R,S',A'\rangle}\)去更新动作-价值函数,故称为SARSA算法

基于策略控制的SARSA算法

  • 对\(Q(s,a),\forall s\in S,a\in A(s)\)进行任意初始化,并且\(Q\)(终结状态)\(=0\)
  • 重复(对每一个序列):
    • 初始化\(S\)
    • 从基于由\(Q\)(例如\(\epsilon\)-贪心算法)生成的策略的\(S\)中选择\(A\)
    • 重复(对序列的每一步)
      • 采取动作\(A\),返回得到\(R\),\(S'\)
      • 从基于由\(Q\)(例如\(\epsilon\)-贪心算法)生成的策略的\(S'\)中选择\(A'\)
      • \(Q(S,A)\leftarrow Q(S,A) + \alpha[R+\gamma Q(S',A')-Q(S,A)]\)
      • \(S\leftarrow S';A\leftarrow A'\)
    • 直到\(S\)到达终结状态

SARSA算法的收敛性

如果符合以下条件,那么SARSA将会收敛于最优动作-状态函数\(Q(s,a)\rightarrow q_*(s,a)\)

  • 策略\(\pi_t(a|s)\)是一个GLIE序列

  • 步长的大小\(\alpha_t\)是一个罗宾斯-门罗(Robbins-Monro)序列

    \[\begin{align}
    \sum^{\infty}_{t=1}\alpha_t = \infty \\
    \sum^{\infty}_{t=1}\alpha ^ 2_t \lt \infty
    \end{align}
    \]

n步SARSA算法(n-Step SARSA)

  • 对于n步返回回报其中(\(n = 1,2,\infty\))

    \[\begin{align}
    n=1\quad & (SARSA) & q^{(1)}_t & = R_{t+1} + \gamma Q(S_{t+1}) \\
    n=2\quad & & q^{(2)}_t & = R_{t+1} + \gamma R_{t+2} + \gamma^2 Q(S_{t+2}) \\
    \vdots & & \vdots& \\
    n=\infty \quad & (MC) & q^{(\infty)}_t & = R_{t+1} + \gamma R_{t+2} + \dots + \gamma^{T-1}R_T \\

    \end{align}
    \]

  • 对于n步\(Q\)-返回回报之定义

    \[q_t^{(n)} = R_{t+1} + \gamma R_{t+2} + \dots+\gamma ^ {n-1}R_{t+n} + \gamma ^ nQ(S_{t+n})
    \]
  • 那么n步SARSA通过n步\(Q\)-返回回报去更新\(Q(s,a)\)

\[Q(S_t,A_t)\leftarrow Q(S_t,A_t) + \alpha\Big( q_t^{(n)} - Q(S_t,A_t) \Big)
\]

Forward View \(SARSA(\lambda)\)

  • 对于返回回报\(q^\lambda\)混合了所有的n步\(Q\)-返回回报\(q_t^{(n)}\)

  • 通过权重\((1-\lambda)\lambda^{n-1}\)

    \[q^\lambda_t = (1-\lambda)\sum^\infty_{n=1}\lambda^{n-1}q^{(n)}_t
    \]
  • Forward-view \(SARSA(\lambda)\)

    \[Q(S_t,A_t)\leftarrow Q(S_t,A_t) + \alpha\Big(q_t^\lambda - Q(S_t,A_t)\Big)
    \]

Backward View \(SARSA(\lambda)\)

  • 正如\(TD(\lambda)\)一样,我们采用有效性检测作为一个在线的算法

  • 只不过在\(SARSA(\lambda)\)中每一个动作-状态对都仅有一次有效性检测

    \[\begin{align}
    E_0(s,a)& =0\\
    E_t(s,a)& = \gamma\lambda E_{t-1}(s,a) + \mathbf1(S_t=s,A_t=a)
    \end{align}
    \]
  • 每个状态\(s\)与动作\(a\)的\(Q(s,a)\)都得以更新

  • 正比于时序差分误差\(\delta_t\)和有效性检测\(E_t(s,a)\)

    \[\begin{align}
    &\delta_t = R_{t+1} + \gamma Q(S_{t+1}, A_{t+1}) - Q(S_t,A_t) \\
    & Q(s,a)\leftarrow Q(s,a) + \alpha\delta_t E_t(s,a)
    \end{align}
    \]

\(SARSA(\lambda)\)流程(Backward View版本)

随机初始化\(Q(s,a)\),其中\(\mathcal{s\in S,a\in A(s)}\)

重复(对所有序列)

​ \(E(s,a) = 0\),其中\(\mathcal{s\in S,a\in A(s)}\)

​ 初始化\(S,A\)

​ 重复(对序列中的每一步)

​ 得到动作\(A\),可以观测到的\(R,S'\)

​ 基于\(Q\)(比如\(\epsilon\)-贪心算法)生成的策略以及状态\(S'\)得到动作\(A'\)

​ \(\delta\leftarrow R+\gamma Q(S',A')-Q(S,A)\)(TD-error)

​ \(E(S,A)\leftarrow E(S,A) + 1\)

​ 对于所有\(\mathcal{s\in S,a\in A(s)}\)

​ \(Q(s,a) \leftarrow Q(s,a) + \alpha\delta E(s,a)\)

​ \(E(s,a)\leftarrow \gamma\lambda E(s,a)\)

​ \(S\leftarrow S';A\leftarrow A'\)

​ 直到\(S\)为终止状态

[例子时间,基于gridWorld解释了有\(\lambda\)和无\(\lambda\)的区别]

非基于策略学习(Off-Policy Learning)

  • 通过评价策略\(\pi(a|s)\)来计算\(v_\pi(s)\)或者\(q_\pi(s,a)\)

  • 当基于行为策略\(\mu(a|s)\)

    \[\{S_1,A_1,R_2,\dots,S_T\}\sim\mu
    \]
  • 为何这样做很重要呢?

  • 通过观察人类专家或者其他agent的作法学习

  • 重新利用基于旧策略\(\pi_1,\pi_2,\dots,\pi_{t-1}\)学到的记录

  • 从探索性的策略中学习最优策略

  • 从一个策略中学到复数个策略

重要性采样(Importance Sampling)

  • 用于估算不同分布的期望
    \[\begin{align}
    \mathbb{E}_{X\sim P}[f(X)] & =\sum P(X)f(X)\\
    & = \sum Q(X)\frac{P(X)}{Q(X)}f(X) \\
    & = \mathbb{E}_{X\sim Q}\bigg[\frac{P(X)}{Q(X)}f(X)\bigg]
    \end{align}
    \]

在非基于策略的蒙特卡罗中应用重要性采样

  • 利用从\(\mu\)中产生的返回回报去评价\(\pi\)

  • 基于策略之间的相似程度去决定返回回报\(G_t\)的权重

  • 对整个序列乘以一个重要性采样的修正指数

    \[G_t^{\pi/\mu}=\frac{\pi(A_t|S_t)\pi(A_{t+1}|S_{t+1})}{\mu(A_t|S_t)\mu(A_{t+1}|S_{t+1})}\cdots\frac{\pi(A_T|S_T)}{\mu(A_T|S_T)}G_t
    \]
  • 基于修正过的返回回报去更新价值函数

    \[V(S_t)\leftarrow V(S_t) + \alpha\bigg(\color{red}{G_t^{\pi/\mu}}-V(S_t)\bigg)
    \]
  • 若\(\mu\)等于\(0\)而\(\pi\)为非零,则该方法无法使用

  • 重要性采样会显著地增加方差

  • 蒙特卡罗真的真的不好用,要用就用TD算法(David Silver语)

在非基于策略的蒙特卡罗中应用重要性采样

  • 利用从\(\mu\)中产生的时序差分目标去评价\(\pi\)

  • 基于重要性采样去决定时序差分目标\(R+\gamma V(S')\)的权重

  • 只需进行一次一个重要性采样修正

    \[V(S_t)\leftarrow V(S_t) + \alpha\bigg( \color{red}{\frac{\pi(A_t|S_t)}{\mu(A_{t}|S_{t})}(R_{t+1} + \gamma V(S_{t+1}))} -V(S_t) \bigg)
    \]
  • 方差相比于重要性采样的蒙特卡罗要低得多

  • 因为策略只需要在一部内相似

动作价值学习(Q-Learning)

  • 我们定义一个针对于动作-价值函数\(Q(s,a)\)的非基于策略学习

  • 完全不需要重要性采样

  • 基于行为策略去选择下一个动作\(A_{t+1}\sim \mu(\cdot |S_t)\)

  • 但是我们定义一个不一样的后继动作\(A'\sim \pi(\cdot|S_t)\)

  • 同时基于不一样的动作的价值去更新\(Q(S_t,A_t)\)

    \[Q(S_t,A_t)\leftarrow Q(S_t,A_t) + \alpha(\color{red}{R_{t+1} + \gamma Q(S_{t+1},A')}-Q(S_t,A_t))
    \]

非基于策略的Q-Learning

  • 现在我们允许行为策略与目标策略可以同时提升

  • 目标策略\(\pi\)是关于\(Q(s,a)\)的贪心算法

    \[\pi(S_{t+1})=\mathop{\arg\max}_{a'}Q(S_{t+1},a')
    \]
  • 而行为策略\(\mu\)则例如是关于\(Q(s,a)\)的\(\epsilon\)-贪心算法

  • 那么动作价值学习的目标是简化

    \[\begin{align}
    & R_{t+1} + \gamma Q(S_{t+1},A')\\
    = & R_{t+1} + \gamma Q(S_{t+1},\mathop{\arg\max}_{a'}Q(S_{t+1},a')) \\
    = & R_{t+1} + \max_{a'}\gamma Q(S_{t+1},a')
    \end{align}
    \]

Q-Learning算法(或称SARSAMAX)

\[Q(S,A)\leftarrow Q(S,A)+ \alpha\bigg(R + \gamma \max_{a'}Q(S',a') - Q(S,A)\bigg)
\]

DP与TD的关系

完全备份(DP) 采样备份(TD)
求解\(v_\pi(s)\)的贝尔曼期望方程 迭代策略评价 时序差分学习
求解\(q_\pi(s,a)\)的贝尔曼期望方程 Q-策略迭代 SARSA
求解\(q_*(s,a)\)的贝尔曼最优方程 Q-价值迭代 动作价值学习

机器学习 | 强化学习(4) | 无模型控制(Model-Free Control)的更多相关文章

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

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

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

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

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

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

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

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

  5. 【强化学习RL】model-free的prediction和control —— MC,TD(λ),SARSA,Q-learning等

    本系列强化学习内容来源自对David Silver课程的学习 课程链接http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html 本文介绍了在m ...

  6. 强化学习8-时序差分控制离线算法Q-Learning

    Q-Learning和Sarsa一样是基于时序差分的控制算法,那两者有什么区别呢? 这里已经必须引入新的概念 时序差分控制算法的分类:在线和离线 在线控制算法:一直使用一个策略选择动作和更新价值函数, ...

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

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

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

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

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

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

  10. 深度强化学习资料(视频+PPT+PDF下载)

    https://blog.csdn.net/Mbx8X9u/article/details/80780459 课程主页:http://rll.berkeley.edu/deeprlcourse/ 所有 ...

随机推荐

  1. 【分享】记一次项目迁移(docker java | docker python)

    项目:前端Vue3,后端Python+Java,数据库Redis+MySQL 原先部署在centos7里面的,使用的宝塔面板部署的,还算方便. 但是服务器要到期了,要将项目迁移到另外一台服务器. 另外 ...

  2. 【深度学习】Tensorflow学习(1)张量与常用函数

    关于张量 张量可以表示0阶到N阶的数组 在TensorFlow中,张量(Tensor)表示某种相同数据类型的多维数据 因此张量有两个重要特征: 数据类型 数组形状(各个维度的大小) 张量的数据类型 t ...

  3. remove a git submodule

    参考: http://stackoverflow.com/questions/1260748/how-do-i-remove-a-submodule 1. Delete the relevant se ...

  4. 【转载】Spring Cloud Gateway-全局过滤器(Global Filters)

    http://www.imooc.com/article/290821 TIPS 本文基于Spring Cloud Gateway SR2,理论适配Spring Cloud Gateway SR1以及 ...

  5. .NET 9 增强 OpenAPI 规范

    在 .NET 9 的更新中,微软增强了原生 OpenAPI.这一变化表明 .NET 正在更加拥抱开放标准,同时让开发者体验更加轻松高效.本文将探讨为何进行这一更改.OpenAPI 的优势,以及如何在 ...

  6. Mac 配置多版本JDK

    @ 目录 前言 一.下载并安装多个JDK版本 二.配置环境变量 三.切换JDK版本 四.下篇预告!!! 总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i. 提示:以下是本篇文章正文 ...

  7. vue3项目实战+element-plus

    记录自己搭建前端项目的学习过程和开发过程,希望一起学习进步 采用Vue3+element-plus+axios+vue-router+sass--(目前刚开始是用到了这些,随着开发慢慢更新) npm是 ...

  8. UDP与TCP+JAVA相关理论

    相关知识 目录 相关知识 UDP UDP认识 UDP的特点(与TCP相比) UDP网络Socket编程(Java实现) 1.创建客户端 2.客户端图形界面 TCP Socket编程通信 JAVA 基础 ...

  9. Pytorch损失函数总结

    损失函数 nn.L1Loss 创建一个衡量输入中每个元素之间的平均绝对误差 (MAE) 的标准XX和目标是的是的. nn.MSELoss 创建一个标准,用于测量输入中每个元素之间的均方误差(平方 L2 ...

  10. Uniapp仿ChatGPT Stream流式输出(非Websocket)

    前言 最近写一个chagpt小程序,流式输出可以使用websocket也可以使用stream来实现,这里就不折腾websocket的了,我发现uniapp实现流式输出的方式挺多的,主要是有些小程序还不 ...