[Reinforcement Learning] 动态规划(Planning)

动态规划

动态规划(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,γ> 和策略 π 或者是 MRP <S,P,R,γ>
    • Output:价值函数 vπ
  • For Control:
    • Input:MDP <S,A,P,R,γ>
    • Output:最优价值函数 v 或者最优策略 π

策略评估

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

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

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

![](https://img2018.cnblogs.com/blog/764050/201810/764050-20181028143942641-469462535.png)

vk+1=aAπ(a|s)(Rsa+γsSPssavk(s))

使用向量形式表示:

vk+1=Rπ+γPπvk

策略迭代

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

给定一个策略 π

  • 评估策略 π

vπ(s)=E[Rt+1+γRt+2+...|St=s]

  • 提升策略:通过采用贪婪方法来提升策略:

π=greedy(vπ)

可以证明,策略迭代不断进行总是能收敛到最优策略,即 π=π

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

![](https://img2018.cnblogs.com/blog/764050/201810/764050-20181028143955739-496309310.png)

广义策略迭代

通过上述提到的策略评估我们不难发现,策略评估是一个不断迭代的过程:

vπ(s)=E[Rt+1+γRt+2+...|St=s]

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

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

![](https://img2018.cnblogs.com/blog/764050/201810/764050-20181028144005038-1446757918.png)

值迭代

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

最优化原理

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

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

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

以状态 s 为起始点,策略 π(a|s) 可以得到最优值 vπ(s)=v(s) 当且仅当:

  • 任意状态 s 对于状态 s 均可达;
  • 以状态 s 为起始点,策略 π 可以得到最优值 vπ(s)=v(s)

根据最优化原理可知,如果我们得到了子问题的解 v(s),那么以状态 s 为起始点的最优解 v(s) 可以通过一步回退(one-step lookahead)就能获取:

v(s)maxaA(Rsa+γsSPssav(s))

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

MDP值迭代

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

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

  • 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

如下图所示:

![](https://img2018.cnblogs.com/blog/764050/201810/764050-20181028144014755-573375074.png)
vk+1(s)=maxaA(Rsa+γsSPssavk(s))

对应的向量表示为:

vk+1=maxaARa+γPavk

下图为三种方法的总结:

![](https://img2018.cnblogs.com/blog/764050/201810/764050-20181028144022645-1891229163.png)

动态规划扩展

异步动态规划(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

posted @   Poll的笔记  阅读(5488)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示