zoukankan      html  css  js  c++  java
  • 2. 动态规划

    在马尔科夫模型(MDP)完全已知的情况下,我们可以用动态规划来求解最优策略,求出在给定状态$s$下,应该选择哪一个 下个状态$s'$,这样使得累积奖励最大。

    因为需要求解的是累积奖励,所以单纯的贪婪即时奖励最大的策略是不可行的。

    所以我们引入了能够包含未来奖励的v值(和q值),在与环境的交互过程中,更新v值从而得到更好的策略,得到更大的累积奖励

    在前几篇中,为了便于理解,我们的v值(和q值)是离散的,是一张表。比如q表,就是一个状态数*动作数的大表,每一行是对应状态$s$可选的动作$a$的q值。这样一来,到达某一状态时,我们只需要查询q表,找到给定状态$s$对应的行,对比哪个动作$a$的q值高,就选择哪个动作$a$就好。

    策略评估

    给定策略$pi$,在每一步的迭代$k$中,对所有的状态$s in S$,利用贝尔曼公式根据$v_{k-1}(s')$求$v_k(s)$,多次迭代至$v_pi$会收敛。

    $s'$是$s$的下一个状态,$v(s)$更新的时候需要用到$v(s')$,$v(s)=R+gamma v(s')$。

    在第$k+1$次迭代,更新状态$s$的$v_{k+1}(s)$时,状态$s'$的$v_{k+1}(s')$还未更新,

    我们就用上一次迭代$k$的结果$v_{k}(s'),来更新$v_{k+1}(s)$,公式如下:

    策略迭代

    由于值函数$v(s)$中包含了未来状态的奖励,所以整个动态规划问题可以拆成一个个子问题,子问题最优即是全局最优。

    所以我们的策略其实就是对待每一个子问题给定状态$s$下,在下一步可到达的状态$s'$里,选择$v(s')$值最大的状态$s'$,即贪心策略。不同的v值就对应了贪心的选择不同,即不同的策略$pi$。

    $pi' = greedy(v_pi)$

    在上个小节我们迭代收敛得到了新的$v_pi$后,就可以依据新的$v_pi$改进我们的策略$pi$。改进的策略$pi$又可以继续迭代收敛到新的$v_pi$,如此循环,最终收敛至$pi^*$。

    在这样的更新方式中,我们评估了这个策略得到稳定值后,再改进这个策略,称之为同策略学习(On-Policy learning)

     

    值迭代

     在策略迭代中,我们针对每次的策略$pi$都先不断迭代至收敛的$v_pi$之后,再来改进这个策略$pi$。

    为了加快收敛速度,我们可以在$v_pi$还没有收敛的迭代过程中,就立马改进策略$pi$,再循环这个过程。

    $s'$是$s$的下一个状态,$v(s)$更新的时候需要用到$v(s')$,$v(s)=R+gamma v(s')$。

    在第$k+1$次迭代,更新状态$s$的$v_{k+1}(s)$时,$v_pi$还没有收敛,就立马利用第$k$次迭代更新结果,改进策略$pi$。

    在这样的更新方式中,我们边评估策略,边改进策略,称之为异策略学习(Off-Policy learning)

    我们的策略是根据v值的贪婪策略,$pi' = greedy(v_pi)$,所以贪心max的更新公式如下:

    参考:

    1. David Silver 课程

    2. Reinforcement learning: An Introduction. Richard S. Sutton

  • 相关阅读:
    linux驱动开发学习一:创建一个字符设备
    如何高效的对有序数组去重
    找到缺失的第一个正整数
    .NET不可变集合已经正式发布
    中国人唯一不认可的成功——就是家庭的和睦,人生的平淡【转】
    自己动手搭建 MongoDB 环境,并建立一个 .NET HelloWorld 程序测试
    ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
    自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试
    ServiceStack 介绍
    一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL
  • 原文地址:https://www.cnblogs.com/yijuncheng/p/9860675.html
Copyright © 2011-2022 走看看