动态规划求解(Planning by Dynamic Programming)

动态规划概论

  • 动态(Dynamic):序列性又或是时序性的问题部分
  • 规划(Programming):最优化一个程序(Program),i.e 一种策略
    • 线性规划(Linear Programming)

显然马尔科夫决策过程就符合动态规划的顺序

因为相信带伙对于DP都是懂哥了,这里就没记录多少东西

策略评价(Policy Evaluation)

  • 问题:评价一个给定的策略\(\pi\)
  • 解决:使用贝尔曼期望的一个状态进行迭代
  • \(v_1\rightarrow v_2\rightarrow \dots\rightarrow v_\pi\)
  • 同步状态更新
    • 对于每一代\(k+1\)
    • 一切状态\(s\in\mathcal{S}\)
    • 从\(v_k(s')\)更新\(v_{k+1}(s)\)
    • 其中\(s'\)是\(s\)的后续节点
  • 后面会提到非同步的状态更新
  • \(v_\pi\)的收敛性也可以得到证明

由贝尔曼方程,我们得到:

\[\begin{align}
v_{k+1}(s) & = \mathcal{\sum_{a\in A}\pi(a|s)\Bigg( R^a_s + \gamma\sum_{s'\in S} P ^ a_{ss'}v_k(s') \Bigg)}\\
v^{k+1} & = \mathcal{R ^ \pi + \gamma P ^ \pi v ^ k}
\end{align}
\]

值得留意的是,上一节课谈到最优策略是固定的,为此我们的\(\pi\)是对某一个最优动作的选择,即\(\pi(a|s)\)本质上是退化类似于\([0 \ 0 \ 1 \ 0 \ 0\dots]\)的分布,或者说指定一个\(s\),可以用一个数字来表示\(\pi(a|s)\)。

[这里是习题/样例]

策略迭代(Policy Iteration)

  • 给定策略\(\pi\)

    • 评价策略\(\pi\)

    • \[v_\pi(s) = \mathbb{E}[R_{t+1} + \gamma R_{t+2} + \dots|S_t = s]
      \]
    • 通过过贪心算法改进策略

    • \[\pi' = greedy(s_\pi)
      \]
  • 最终经过改进的策略乃是最优的,\(\pi'=\pi^*\)

  • 一般来说,多轮的迭代是必要的

  • 策略迭代必定收敛于\(\pi^*\)

[这里是样例,习题]

  • 对于一个确定的策略,\(a = \pi(s)\)

  • 我们通过贪心算法改进策略

    \[\pi'(s) = \mathop{argmax}_{a\in A} q_\pi(s,a)
    \]
  • 每一步从每一个状态去更新价值函数

    \[q_\pi(s, \pi'(s)) = \max_{a \in A} q_\pi(s,a)\ge q_\pi(s,\pi(s))=v_\pi(s)
    \]
  • 因此去更新状态-价值函数,\(v_{\pi'}(s)\ge v_\pi(s)\)

    \[\begin{align}
    v_\pi(s) & \le q_\pi(s,\pi'(s)) = \mathbb{E}_{\pi'}[R_{t+1}+\gamma v_\pi(S_{t+1})|S_t = s] \\
    & \le q_\pi(s,\pi'(s)) = \mathbb{E}_{\pi'}[R_{t+1}+\gamma q_\pi(S_{t+1},\pi'(S_{t+1})) |S_t = s]\\
    & \le q_\pi(s,\pi'(s)) = \mathbb{E}_{\pi'}[R_{t+1} + \gamma R_{t+2} +\gamma^2 q_\pi(S_{t+1},\pi'(S_{t+1})) |S_t = s] \\
    & \le q_\pi(s,\pi'(s)) = \mathbb{E}_{\pi'}[R_{t+1} + \gamma R_{t+2} +\dots |S_t = s] \\
    & = v_{\pi'}(s)
    \end{align}
    \]
  • 若迭代没有进一步改进,即:

    \[q_\pi(s,\pi'(s)) = \max_{a\in A} q_\pi(s,a) = q_\pi(s,\pi(s))=v_\pi(s)
    \]
  • 那么贝尔曼最优方程即得解:

    \[v_\pi(s)=\max_{a\in A}q_\pi(s,a)
    \]
  • 因此\(v_\pi(s)=v_*(s),\forall s \in S\)

终止条件

  • 策略评价是否真的需要完全收敛于\(v_\pi\)呢?
  • 或者说我们是否可以人为地规定一个终止条件
    • e.g. 价值函数的\(\epsilon\)-收敛
  • 又或者\(k\)轮迭代之后即可终止
    • 例如说之前给出的gridworld样例中\(k=3\)的情况中就已经是最优策略了
  • 为何不一次迭代就全部更新策略
    • i.e. 第一代就停止更新了
    • P.S. 本质上是价值递归(Value Iteration),下面章节会讲的

价值迭代(Value Iteration)

对于任何一个最优策略都可以划分为以下两个部分

  • 最优动作\(A_*\)
  • 最优策略下跟随的下一个后继状态\(S'\)

最优化原理:

当一个策略\(\pi(a|s)\)从状态\(s\)出发达到最优价值,即\(v_\pi(s)=v_*(s)\)

有且仅有:

  • 对于所有能够从状态\(s\)转移到的状态\(s'\)
  • \(\pi\)从\(s'\)出发也得到了达到最优价值,即\(v_\pi(s')=v_*(s')\)

因此

  • 如果我们能求解子问题\(s_*(s')\)

  • 那么\(v_*(s)\)的解只需要向前一步就能解出来

    \[v_*(s) \leftarrow \mathcal{\max_{a\in A} R^a_s + \gamma \sum_{s'\in S}P^a_{ss'}v_*(s')}
    \]
  • 此处就是价值迭代的核心思想:利用这个公式迭代更新公式

  • 原理阐释:从最终的回报开始进行反向传播

  • 对于循环、随机的马尔科夫决策过程同样适用

算法原理:

  • 问题:寻找最优策略\(\pi\)

  • 解决方案:迭代利用贝尔曼最优备份方案

  • \(v_1\rightarrow v_2\rightarrow\dots\rightarrow v_*\)

  • 采用同步备份更新

    • 对于每一代\(k+1\)
    • 一切状态\(s\in S\)
    • 从\(v_k(s')\)更新\(v_{k+1}(s)\)
  • \(v_*\)的收敛后面会证明

  • 相对于策略迭代,并不显式输出一个策略

  • 中间状态的价值函数并不表示任何有意义的策略

公式原理:

\[v_{k+1}(s) = \mathcal{\max_{a\in A}\Bigg( R^a_s + \gamma\sum_{s'\in S}P^a_{ss'} v_k(s')\Bigg)}
\]

矩阵形式:

\[v_{k+1} = \mathcal{\max_{a\in A} R^a + \gamma P^a v_k}
\]

一个demo

http://www.cs.ubc.ca/~poole/demos/mdp/vi.html

总结概要

问题 贝尔曼方程 算法
预测问题 贝尔曼期望方程 迭代策略评价
决策问题 贝尔曼期望方程+贪心算法策略提升 策略迭代
决策问题 贝尔曼最优方程 价值迭代
  • 基于状态-价值函数\(V_pi(s)\)或者是\(s_*(s)\)的算法
  • 时间复杂度:每一代\(O(mn^2)\),其中\(m\)为动作、\(n\)为状态
  • 基于动作-价值函数\(q_\pi(s,a)\)或者是\(q_*(s,a)\)
  • 时间复杂度:每一代\(O(m^2 n^2)\)

动态规划的拓展

  • 目前用到的DP都是同步备份更新的
  • 而异步更新DP则通过某种顺序独立更新每一个状态
  • 对于每一个选定的状态采取最适合的备份进行更新
  • 能够显著地减少计算的消耗
  • 若所有状态一直被选中则确保收敛了

三种异步动态规划的简单思想

  • 原地DP
  • 优先扫描
  • 实时DP

原地DP

一般来说,价值迭代都会存储着两份价值函数的拷贝

\[v_{new}(s) \leftarrow \mathcal{ \max_{a\in A} \Bigg( R^a_s + \gamma\sum_{s'\in S}P^a_{sss}v_{old}(s') \Bigg)}
\]

其中\(v_{old}\)和\(v_{new}\)之间就是两个备份

而原地DP则只存储一份价值函数的备份:

\[v(s) \leftarrow \mathcal{ \max_{a\in A} \Bigg( R^a_s + \gamma\sum_{s'\in S}P^a_{sss}v(s') \Bigg)}
\]

直接就使用最新的\(v(s')\),因为包含更多信息,但是难点在于如何安排更新顺序

一般会采取贝尔曼误差去选择要更新价值函数

\[\mathcal{\Bigg| \max_{a\in A} \Bigg(R^a_s + \gamma\sum_{s'\in S}P^a_{ss'}v(s') \Bigg) - v(s) \Bigg|}
\]
  • DP利用全广度备份
  • 在中等规模问题相当有效
  • 但是在高维数据会显得低效
  • 通过邻接链表的形式可以改造DP

机器学习 | 强化学习(2) | 动态规划求解(Planning by Dynamic Programming)的更多相关文章

  1. 动态规划算法详解 Dynamic Programming

    博客出处: https://blog.csdn.net/u013309870/article/details/75193592 前言 最近在牛客网上做了几套公司的真题,发现有关动态规划(Dynamic ...

  2. David Silver强化学习Lecture3:动态规划

    课件:Lecture 3: Planning by Dynamic Programming 视频:David Silver强化学习第3课 - 动态规划(中文字幕) 动态规划 动态(Dynamic): ...

  3. 强化学习三:Dynamic Programming

    1,Introduction 1.1 What is Dynamic Programming? Dynamic:某个问题是由序列化状态组成,状态step-by-step的改变,从而可以step-by- ...

  4. DRL强化学习:

    IT博客网 热点推荐 推荐博客 编程语言 数据库 前端 IT博客网 > 域名隐私保护 免费 DRL前沿之:Hierarchical Deep Reinforcement Learning 来源: ...

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

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

  6. 动态规划(Dynamic Programming)算法与LC实例的理解

    动态规划(Dynamic Programming)算法与LC实例的理解 希望通过写下来自己学习历程的方式帮助自己加深对知识的理解,也帮助其他人更好地学习,少走弯路.也欢迎大家来给我的Github的Le ...

  7. 最优化问题 Optimization Problems & 动态规划 Dynamic Programming

    2018-01-12 22:50:06 一.优化问题 优化问题用数学的角度来分析就是去求一个函数或者说方程的极大值或者极小值,通常这种优化问题是有约束条件的,所以也被称为约束优化问题. 约束优化问题( ...

  8. 动态规划系列(零)—— 动态规划(Dynamic Programming)总结

    动态规划三要素:重叠⼦问题.最优⼦结构.状态转移⽅程. 动态规划的三个需要明确的点就是「状态」「选择」和「base case」,对应着回溯算法中走过的「路径」,当前的「选择列表」和「结束条件」. 某种 ...

  9. 强化学习(三)用动态规划(DP)求解

    在强化学习(二)马尔科夫决策过程(MDP)中,我们讨论了用马尔科夫假设来简化强化学习模型的复杂度,这一篇我们在马尔科夫假设和贝尔曼方程的基础上讨论使用动态规划(Dynamic Programming, ...

  10. 【转载】 强化学习(三)用动态规划(DP)求解

    原文地址: https://www.cnblogs.com/pinard/p/9463815.html ------------------------------------------------ ...

随机推荐

  1. 智能存储 | 超质感 HDR 生产,激活你的视神经

    视频平台尊贵的会员可以享受 4K HDR 超清视界,各类新型旗舰机都具备拍摄 HDR 视频的能力,3C 产品发布会必提 HDR 超清显示.想必各位看官感受到视觉逐渐被 HDR 浪潮侵袭了,那 HDR ...

  2. 使用PG的部分索引

    PG 又带来一个惊喜. 现在有一张表,每天增加几十万数据,数据量迅速超过 1亿.此时 create_at 上的索引已经非常庞大,检索速度很慢. 接下来要分表分区了? NO,PG 有一个非常有意思的特性 ...

  3. Netty有关

    https://www.baeldung.com/tag/netty/ https://github.com/eugenp/tutorials https://stackoverflow.com/qu ...

  4. Spark内存调优

    一.概述Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优.本文旨 ...

  5. Qt开源作品30-农历控件

    一.前言 农历控件在国产linux中必备的控件之一,毕竟要适应国人的习惯,你看win10系统的日历,现在点开来直接就有农历在上面,非常方便人性化,所以在很多用Qt做的项目中,也有农历控件的应用场景,而 ...

  6. Vue3项目运行时报错误:TypeError Cannot read properties of undefined (reading 'filter')

    let matched = this.$route.mached.filter(item => item.name);方法报错:TypeError Cannot read properties ...

  7. pytorch模型降低计算成本和计算量

    下面是如何使用PyTorch降低计算成本和计算量的一些方法: 压缩模型:使用模型压缩技术,如剪枝.量化和哈希等方法,来减小模型的大小和复杂度,从而降低计算量和运行成本. 分布式训练:使用多台机器进行分 ...

  8. 【原创】浅谈EtherCAT主站EOE(下)-EtherCAT IgH主站EoE具体实现

    目录 1.IgH 框架概述 2. IgH EOE机制 2.1 EoE服务规范 2.1 EoE虚拟网络设备 2.1.1 EoE Virtual Network Interfaces 2.1.2 EoE ...

  9. 基于.NET8.0实现RabbbitMQ的Publish/Subscribe发布订阅以及死信队列

    [前言] RabbitMQ提供了五种消息模型,分别是简单模型.工作队列模型.发布/订阅模型.路由模型和主题模型.‌‌ 简单模型(Simple)‌:在这种模式下,一个生产者将消息发送到一个队列,只有一个 ...

  10. SpringCloud(四) - 微信获取用户信息

    1.项目介绍 2.微信公众平台 和 微信开放文档 2.1 微信公众平台 2.1.1 网址链接 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?ac ...