动态规划

动态规划(Dynamic Programming,简称DP)是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。

动态规划常常适用于具有如下性质的问题:

  • 具有最优子结构(Optimal substructure)

    • Principle of optimality applies
    • Optimal solution can be decomposed into subproblems
  • 重叠子问题(Overlapping subproblems)
    • Subproblems recur many times
    • Solutions can be cached and reused

动态规划方法所耗时间往往远少于朴素解法。

马尔可夫决策过程MDP满足上述两个性质:

  • 贝尔曼方程提供了递归分解的结构;
  • 价值函数可以保存和重复使用递归时的结果。

使用动态规划解决MDP/MRP

动态规划需要满足MDP过程是已知的(model-based)。

  • For Predict:

    • Input:MDP \(<S, A, P, R, \gamma>\) 和策略 $\pi $ 或者是 MRP \(<S, P, R, \gamma>\)
    • Output:价值函数 \(v_{\pi}\)
  • For Control:
    • Input:MDP \(<S, A, P, R, \gamma>\)
    • Output:最优价值函数 \(v_{*}\) 或者最优策略 \(\pi_{*}\)

策略评估

策略评估(Policy Evaluation)指的是计算给定策略的价值,解决的问题是 "How to evaluate a policy"。

策略评估的思路:迭代使用贝尔曼期望方程(关于 MDP 的贝尔曼期望方程形式见《马尔可夫决策过程》)。

策略评估过程如下图所示:

\[v_{k+1} = \sum_{a\in A}\pi(a|s) \Bigl( R_{s}^a + \gamma\sum_{s'\in S}P_{ss'}^a v_{k}(s') \Bigr)\]

使用向量形式表示:

\[\mathbf{v^{k+1}} = \mathbf{R^{\pi}} + \gamma \mathbf{P^{\pi}v^{k}}\]

策略迭代

策略迭代(Policy Iteration,简称PI)解决的问题是 "How to improve a policy"。

给定一个策略 \(\pi\):

  • 评估策略 \(\pi\):
    \[v_{\pi}(s) = E[R_{t+1} + \gamma R_{t+2} + ...| S_t = s]\]
  • 提升策略:通过采用贪婪方法来提升策略:
    \[\pi ' = \text{greedy}(v_{\pi})\]

可以证明,策略迭代不断进行总是能收敛到最优策略,即 \(\pi ' = \pi^{*}\)。

策略迭代可以使用下图来形式化的描述:

广义策略迭代

通过上述提到的策略评估我们不难发现,策略评估是一个不断迭代的过程:
\[v_{\pi}(s) = E[R_{t+1} + \gamma R_{t+2} + ...| S_t = s]\]

那么问题来了,Does policy evaluation need to converge to \(v_{\pi}\)?
我们是不是可以引入一个停止规则或者规定在迭代 \(k\) 次后停止策略评估?
再进一步想,我们为什么不在每次策略评估的迭代过程中进行策略提升(等同于策略评估迭代1次后停止)?
注:这和后续要介绍的值迭代等价。

因此我们可以把上述策略迭代的过程一般化,即广义策略迭代(Generalised Policy Iteration,简称GPI)框架:

值迭代

介绍值迭代之前,我们先介绍下最优化原理。

最优化原理

最优化原理(Principle of Optimality)定义:

一个过程的最优决策具有这样的性质:即无论其初始状态和初始决策如何,其今后诸策略对以第一个决策所形成的状态作为初始状态的过程而言,必须构成最优策略。

最优化原理如果用数学化一点的语言来描述的话就是:

以状态 \(s\) 为起始点,策略 \(\pi(a|s)\) 可以得到最优值 \(v_{\pi}(s) = v_*(s)\) 当且仅当:

  • 任意状态 \(s'\) 对于状态 \(s\) 均可达;
  • 以状态 \(s'\) 为起始点,策略 \(\pi\) 可以得到最优值 \(v_{\pi}(s') = v_*(s')\)。

根据最优化原理可知,如果我们得到了子问题的解 $ v_*(s')$,那么以状态 \(s\) 为起始点的最优解 \(v_*(s)\) 可以通过一步回退(one-step lookahead)就能获取:
\[v_*(s) ← \max_{a\in A}\Bigl(R_s^a + \gamma \sum_{s'\in S}P_{ss'}^{a}v_*(s') \Bigr)\]

也就是说,我们可以从最后开始向前回退从而得到最优解,值迭代就是基于上述思想进行迭代更新的。

MDP值迭代

值迭代(Value Iteration,简称VI)解决的问题也是 "Find optimal policy $\pi $"。
但是不同于策略迭代使用贝尔曼期望方程的是,值迭代使用贝尔曼最优方程进行迭代提升。

值迭代与策略迭代不同的地方在于:

  • Use Bellman optimal function, rather than Bellman expectation function
  • Unlike policy iteration, there is no explicit policy
  • Intermediate value functions may not correspond to any policy

如下图所示:

\[v_{k+1}(s) = \max_{a\in A}\Bigl(R_s^a + \gamma\sum_{s'\in S}P_{ss'}^a v_k(s') \Bigr)\]

对应的向量表示为:
\[\mathbf{v}_{k+1} = \max_{a\in A}\mathbf{R}^a + \gamma \mathbf{P^av}^k\]

下图为三种方法的总结:

动态规划扩展

异步动态规划(Asynchronous Dynamic Programming)

  • In-place dynamic programming
  • Prioritised sweeping
  • Real-time dynamic programming

Full-Width Backups vs. Sample Backups

Full-Width Backups

  • DP uses full-width backups(DP is model-based)

    • Every successor state and action is considered
    • Using knowledge of the MDP transitions and reward function
  • DP is effective for medium-sized problems (millions of states)
  • For large problems, DP suffers Bellman’s curse of dimensionality(维度灾难)

维度灾难:Number of states \(n = |S|\) grows exponentially with number of state variables

  • Even one backup can be too expensive

Sample Backups

后续将要讨论的时序差分方法

  • Using sample rewards and sample transitions \(⟨S, A, R, S′⟩\)
  • Instead of reward function R and transition dynamics P
  • Advantages:
    • Model-free: no advance knowledge of MDP required
    • Breaks the curse of dimensionality through sampling
    • Cost of backup is constant, independent of \(n = |S|\)

Reference

[1] 智库百科-最优化原理
[2] Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto, 2018
[3] David Silver's Homepage

[Reinforcement Learning] 动态规划(Planning)的更多相关文章

  1. Awesome Reinforcement Learning

    Awesome Reinforcement Learning A curated list of resources dedicated to reinforcement learning. We h ...

  2. 【论文阅读】PRM-RL Long-range Robotic Navigation Tasks by Combining Reinforcement Learning and Sampling-based Planning

    目录 摘要部分: I. Introduction II. Related Work III. Method **IMPORTANT PART A. RL agent training [第一步] B. ...

  3. (zhuan) Deep Reinforcement Learning Papers

    Deep Reinforcement Learning Papers A list of recent papers regarding deep reinforcement learning. Th ...

  4. Learning Roadmap of Deep Reinforcement Learning

    1. 知乎上关于DQN入门的系列文章 1.1 DQN 从入门到放弃 DQN 从入门到放弃1 DQN与增强学习 DQN 从入门到放弃2 增强学习与MDP DQN 从入门到放弃3 价值函数与Bellman ...

  5. getting started with building a ROS simulation platform for Deep Reinforcement Learning

    Apparently, this ongoing work is to make a preparation for futural research on Deep Reinforcement Le ...

  6. (转) Deep Reinforcement Learning: Pong from Pixels

    Andrej Karpathy blog About Hacker's guide to Neural Networks Deep Reinforcement Learning: Pong from ...

  7. 增强学习(Reinforcement Learning and Control)

    增强学习(Reinforcement Learning and Control)  [pdf版本]增强学习.pdf 在之前的讨论中,我们总是给定一个样本x,然后给或者不给label y.之后对样本进行 ...

  8. [Reinforcement Learning] Model-Free Control

    上篇总结了 Model-Free Predict 问题及方法,本文内容介绍 Model-Free Control 方法,即 "Optimise the value function of a ...

  9. [Reinforcement Learning] Model-Free Prediction

    上篇文章介绍了 Model-based 的通用方法--动态规划,本文内容介绍 Model-Free 情况下 Prediction 问题,即 "Estimate the value funct ...

随机推荐

  1. SpringBoot使用qq邮箱发送邮件

    最近公司要做一个邮箱注册和重置密码的功能,因为之前就做过,但是不是Springboot项目,所以相对来说还是比较容易的,在这里记录一下. 一.引用Maven依赖 这里使用spring自带的邮件jar包 ...

  2. C#二维码与条形码的生成

    二维码 using Gma.QrCodeNet.Encoding;using Gma.QrCodeNet.Encoding.Windows.Render; string str = "Htt ...

  3. Java第二次作业程序设计作业

    本次作业包含两个部分:一是以下4个题目的程序源码和运行结果截图:二是本次作业的小结(谈谈你在做作业的过程中遇到了哪些问题,如何解决,有哪些收获). 1.编写"人"类及其测试类. 1 ...

  4. CF396C On Changing Tree

    CF396C On Changing Tree 给定一棵以 \(1\) 为根的树,初始时所有点权为 \(0\) 有 \(m\) 次操作,分为两种 \(1\ u\ x\ k\) 表示给以 \(u\) 的 ...

  5. linux-----docker

    docker简介 Docker时Docker.Lnc公司开源的一个基于LXC技术之上搭建的Container容器引擎,源代码托管在Github上,基于Go语言并遵从Apache2.0协议开源. Doc ...

  6. python在linux中用setproctitle自定义进程名

    在linux中,如果想用python自定义进程名,需要用到第三方库setproctitle. #coding:utf8 import setproctitle setproctitle.setproc ...

  7. vue填坑指南之模板的使用

    坑提示:"The template root requires exactly one element" Src下面有个App.vue文件,在index里引用了这个文件以后,我在. ...

  8. Visual Studio Code扩展:

    Auto Close TagAuto Rename TagBeautifyChinese (Simplified) Language Pack for Visual Studio CodeClass ...

  9. windows 平台使用 VS2017 编译openssl源码

    windows 平台使用 VS2017 编译openssl源码 1)依赖安装 安装 perl 脚本解释器 下载 http://libevent.net/download 安装 nasm 汇编器 C:\ ...

  10. django xadmin(1)

    filter_horizontal 从‘多选框’的形式改变为‘过滤器’的方式,水平排列过滤器,必须是一个 ManyToManyField类型,且不能用于 ForeignKey字段,默认地,管理工具使用 ...