Processing math: 100%

机器学习 | 强化学习(2) | 动态规划求解(Planning by Dynamic Programming)

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

动态规划概论#

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

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

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

策略评价(Policy Evaluation)#

  • 问题:评价一个给定的策略π
  • 解决:使用贝尔曼期望的一个状态进行迭代
  • v1v2vπ
  • 同步状态更新
    • 对于每一代k+1
    • 一切状态sS
    • vk(s)更新vk+1(s)
    • 其中ss的后续节点
  • 后面会提到非同步的状态更新
  • vπ的收敛性也可以得到证明

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

vk+1(s)=aAπ(a|s)(Ras+γsSPassvk(s))vk+1=Rπ+γPπvk

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

[这里是习题/样例]

策略迭代(Policy Iteration)#

  • 给定策略π

    • 评价策略π

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

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

    • π=greedy(sπ)

  • 最终经过改进的策略乃是最优的,π=π

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

  • 策略迭代必定收敛于π

[这里是样例,习题]

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

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

    π(s)=argmaxaAqπ(s,a)

  • 每一步从每一个状态去更新价值函数

    qπ(s,π(s))=maxaAqπ(s,a)qπ(s,π(s))=vπ(s)

  • 因此去更新状态-价值函数,vπ(s)vπ(s)

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

  • 若迭代没有进一步改进,即:

    qπ(s,π(s))=maxaAqπ(s,a)=qπ(s,π(s))=vπ(s)

  • 那么贝尔曼最优方程即得解:

    vπ(s)=maxaAqπ(s,a)

  • 因此vπ(s)=v(s),sS

终止条件#

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

价值迭代(Value Iteration)#

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

  • 最优动作A
  • 最优策略下跟随的下一个后继状态S

最优化原理:

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

有且仅有:

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

因此

  • 如果我们能求解子问题s(s)

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

    v(s)maxaARas+γsSPassv(s)

  • 此处就是价值迭代的核心思想:利用这个公式迭代更新公式

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

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

算法原理:

  • 问题:寻找最优策略π

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

  • v1v2v

  • 采用同步备份更新

    • 对于每一代k+1
    • 一切状态sS
    • vk(s)更新vk+1(s)
  • v的收敛后面会证明

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

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

公式原理:

vk+1(s)=maxaA(Ras+γsSPassvk(s))

矩阵形式:

vk+1=maxaARa+γPavk

一个demo#

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

总结概要#

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

动态规划的拓展#

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

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

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

原地DP#

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

vnew(s)maxaA(Ras+γsSPasssvold(s))

其中voldvnew之间就是两个备份

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

v(s)maxaA(Ras+γsSPasssv(s))

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

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

|maxaA(Ras+γsSPassv(s))v(s)|

  • DP利用全广度备份
  • 在中等规模问题相当有效
  • 但是在高维数据会显得低效
  • 通过邻接链表的形式可以改造DP
posted @   Uzuki  阅读(569)  评论(0编辑  收藏  举报
编辑推荐:
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
阅读排行:
· DeepSeek V3 两周使用总结
· 回顾我的软件开发经历(1)
· C#使用yield关键字提升迭代性能与效率
· 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解
· 4. 使用sql查询excel内容
点击右上角即可分享
微信分享提示
CONTENTS