文章目录

  • 为什么需要值迭代
  • Value Iteration & Policy Iteration
    • Value Iteration
      • Synchronous vs. Asynchronous
      • Value Iteration Example: Shortest Path
    • Policy Iteration
      • Example
      • Value Iteration vs. Policy Iteration
  • Learning an MDP Model

  在这个系列的 马尔可夫决策过程与动态规划这篇文章中我们是有说这个策略迭代和值迭代的,但是说的更公式化一点,本文主要是对其进行一个更加深刻的理解。

为什么需要值迭代

  其实我们更希望强化学习直接学习出来一个policy直接用这个policy解决问题就可以,那为什么还需要value function?其实这个value function是非常重要的,当我们拿到一个state之后,follow当前的policy,可以得到一个值函数VVV,这样不仅可以横向地和其它state进行比较,还可以横向地与其它policy进行比较

  那既然可以和其它state,其它policy进行比较,那我们就可以去找一个optimal state,也可以去找optimal policy

  那是怎么找的呢?上一节我们也有说过,这里重复一下,如果我们已知state的情况下,希望找一个optimal state,也就是取遍所有的policy,能够使得当前的state在某个policy下值最大,也就找到了最好的这个value

v∗(s)=max⁡πvπ(s)v_{*}(s)=\max_{\pi} v_{\pi}(s) v∗​(s)=πmax​vπ​(s)

  如果找到了这个最好的value的话,通过Bellman function可以知道这个时候就会是一个完全收敛的情况:

v∗(s)=max⁡aRsa+arg max⁡a∈Aγ∑s′∈SPss′av(s′)v_{*}(s)=\max _{a} \mathcal{R}_{s}^{a}+\argmax_{a \in A}\gamma \sum_{s^{\prime} \in \mathcal{S}} \mathcal{P}_{s s^{\prime}}^{a} v\left(s^{\prime}\right) v∗​(s)=amax​Rsa​+a∈Aargmax​γs′∈S∑​Pss′a​v(s′)

  如果不收敛,那它(value)肯定还没有到达optimal variable。上述等式在收敛的情况下就会成立,而不仅仅是一个赋值的关系。

  如果我们能够得到上述等式这样一个case的话,里面就蕴含了optimal policy,也就是上述等式的后面那一项:

π∗(s)=arg max⁡a∈A∑s′∈SPss′av(s′)\pi^{*}(s) = \argmax_{a \in A} \sum_{s^{\prime} \in \mathcal{S}} \mathcal{P}_{s s^{\prime}}^{a} v\left(s^{\prime}\right) π∗(s)=a∈Aargmax​s′∈S∑​Pss′a​v(s′)

  因此在这种情况下,对于其它任何的policy,我们都有:

v∗(s)=vπ∗(s)≥vπ(s)v_{*}(s) = v_{\pi *}(s) \geq v_{\pi}(s) v∗​(s)=vπ∗​(s)≥vπ​(s)

Value Iteration & Policy Iteration

  从上述分析我们也可以知道,其实 value function and policy are correlated :

Vπ(s)=R(s)+γ∑s′∈SPsπ(s)(s′)Vπ(s′)π(s)=arg⁡max⁡a∈A∑s′∈SPsa(s′)Vπ(s′)\begin{aligned} V^{\pi}(s) &=R(s)+\gamma \sum_{s^{\prime} \in S} P_{s \pi(s)}\left(s^{\prime}\right) V^{\pi}\left(s^{\prime}\right) \\ \pi(s) &=\arg \max _{a \in A} \sum_{s^{\prime} \in S} P_{s a}\left(s^{\prime}\right) V^{\pi}\left(s^{\prime}\right) \end{aligned} Vπ(s)π(s)​=R(s)+γs′∈S∑​Psπ(s)​(s′)Vπ(s′)=arga∈Amax​s′∈S∑​Psa​(s′)Vπ(s′)​

  value function是在给定policy的情况下进行的计算,在每个state-value function算出来之后,我们又可以直接导出来在每个state应该去take哪个action,去max value function。因此就会有两种方法,到底是基于value function作为主体来更新还是基于policy作为主体来进行更新。

  • It is feasible to perform iterative update towards the optimal value function and optimal policy

    • Value iteration
    • Policy iteration

Value Iteration

  value iteration 就是不断地去套bellman equation,就变成了对于每一个state去计算V(s)V(s)V(s)。

V(s)=R(s)+max⁡a∈Aγ∑s′∈SPsa(s′)V(s′)\begin{aligned} V(s) =R(s)+\max _{a \in A}\gamma \sum_{s^{\prime} \in S} P_{s a}\left(s^{\prime}\right) V\left(s^{\prime}\right) \end{aligned} V(s)=R(s)+a∈Amax​γs′∈S∑​Psa​(s′)V(s′)​

  这里是没有策略π\piπ的,整个方程就是在表达,policytack action的时候,就是在tack max⁡a∈Aγ∑s′∈SPsa(s′)V(s′)\max _{a \in A}\gamma \sum_{s^{\prime} \in S} P_{sa}\left(s^{\prime}\right)V\left(s^{\prime}\right)maxa∈A​γ∑s′∈S​Psa​(s′)V(s′),那在值迭代里面,它自己去维护这样一个value function就可以了。policy只要使得后面上述等式后面那个max成立就可以了。

  整个的迭代过程只关心value是多少就可以了,这里是value作为主导,policy包含在了里面。

Synchronous vs. Asynchronous

  更细节一点,这里还有我们怎么去做这个value function的更新,有两种办法Synchronous value iterationIn-place asynchronous value iteration

  • Synchronous value iteration

  Synchronous value iteration stores two copies of value functions 。

Vnew (s)←max⁡a∈A(R(s)+γ∑s′∈SPsa(s′)Vold (s′))V_{\text {new }}(s) \leftarrow \max _{a \in A}\left(R(s)+\gamma \sum_{s^{\prime} \in S} P_{s a}\left(s^{\prime}\right) V_{\text {old }}\left(s^{\prime}\right)\right) Vnew ​(s)←a∈Amax​(R(s)+γs′∈S∑​Psa​(s′)Vold ​(s′))

  这一轮迭代,我们先把所有的state更新一下,都先缓存起来,然后我再把缓存覆盖到原来的value function上面。这里要keep住当前的state value去更新new state value,当所有的state被更新完成之后,拷贝到之前的value上面去。

  • In-place asynchronous value iteration

  In-place asynchronous value iteration stores one copy of value function

V(s)←max⁡a∈A(R(s)+γ∑s′∈SPsa(s′)V(s′))V(s) \leftarrow \max _{a \in A}\left(R(s)+\gamma \sum_{s^{\prime} \in S} P_{s a}\left(s^{\prime}\right) V\left(s^{\prime}\right)\right) V(s)←a∈Amax​(R(s)+γs′∈S∑​Psa​(s′)V(s′))

  相应的asynchronous的方法从头到尾只有一个寄存器,或者说一个版本的state,随时更新。

  Synchronous value iteration是更加稳定的asynchronous的方法中可能刚刚算过的state value又马上用到了别的state value上面,这就会非常不稳定,而有些state value没有更新。

Value Iteration Example: Shortest Path

  上图中v1v_{1}v1​,v2v_{2}v2​都表示迭代过程,在每个位置的选择都是随机的,每走一步消耗-1的奖励。

Policy Iteration

  Policy Iteration中先拿一个策略π\piπ,然后计算出稳定的V(s)V(s)V(s),再拿这个稳定的V(s)V(s)V(s)去更新policy。但是The step of value function update could be time-consuming。

Example

  Evaluating a Random Policy in a Small Gridworld

  开始,我们拿随机的policy去评估value,然后进行赋值更新value

  得到更新的值之后,我们再使用贪婪策略得到最终的策略。

Value Iteration vs. Policy Iteration
  1. Value iteration is a greedy update strategy
  2. In policy iteration, the value function update by bellman equation is costly
  3. For small-space MDPs, policy iteration is often very fast and converges quickly
  4. For large-space MDPs, value iteration is more practical (efficient)

Learning an MDP Model

  上面的很多例子都是MDP中状态转移概率被给定的情况,在很多时候不会给定状态转移概率。但是我们可以从agent与环境交互的数据中反推reward functionR(s)\mathcal{R}(s)R(s)和 state transitionPsa\mathcal{P}_{sa}Psa​。

  例如: we have only observed some episodes

Episode 1: s0(1)a0(1)R(s0)(1)s1(1)a1(1)R(s1)(1)s2(1)a2(1)R(s2)(1)s3(1)⋯sT(1)Episode 2: s0(2)a0(2)R(s0)(2)s1(2)a1(2)R(s1)(2)s2(2)a2(2)R(s2)(2)s3(2)⋯sT(2)\begin{aligned} &\text { Episode 1: } \quad s_{0}^{(1)} \frac{a_{0}^{(1)}}{R\left(s_{0}\right)^{(1)}} s_{1}^{(1)} \frac{a_{1}^{(1)}}{R\left(s_{1}\right)^{(1)}} s_{2}^{(1)} \frac{a_{2}^{(1)}}{R\left(s_{2}\right)^{(1)}} s_{3}^{(1)} \cdots s_{T}^{(1)}\\ &\text { Episode 2: } s_{0}^{(2)} \frac{a_{0}^{(2)}}{R\left(s_{0}\right)^{(2)}} s_{1}^{(2)} \frac{a_{1}^{(2)}}{R\left(s_{1}\right)^{(2)}} s_{2}^{(2)} \frac{a_{2}^{(2)}}{R\left(s_{2}\right)^{(2)}} s_{3}^{(2)} \cdots s_{T}^{(2)} \end{aligned} ​ Episode 1: s0(1)​R(s0​)(1)a0(1)​​s1(1)​R(s1​)(1)a1(1)​​s2(1)​R(s2​)(1)a2(1)​​s3(1)​⋯sT(1)​ Episode 2: s0(2)​R(s0​)(2)a0(2)​​s1(2)​R(s1​)(2)a1(2)​​s2(2)​R(s2​)(2)a2(2)​​s3(2)​⋯sT(2)​​

  拿到这些episode之后我们可以反推一个MDP,比如给定一个state sss 和一个action aaa 其下一个状态的转移概率我们可以从episode中去统计:

Psa(s′)=times we took action ain state sand got to state s′times we took action ain state s\mathcal{P}_{sa}(s^{\prime}) = \frac{\text{times we took action $a$ in state $s$ and got to state $s^{\prime}$}}{\text{times we took action $a$ in state $s$}} Psa​(s′)=times we took action a in state stimes we took action a in state s and got to state s′​

  用episode中的 reward 做平均就是 expected immediate reward

R(s)=average{R(s)(i)}R(s) = \text{average} \{R(s)^{(i)}\} R(s)=average{R(s)(i)}

  在统计了很多情况的基础上,我们就可以基于这个模型去做动态规划、值迭代、策略迭代这些就可以了。整个的算法流程如下图所示:

  这是一种解法,在不知道模型的基础之上,自己通过经验数据建立模型,之后再进行迭代求解,收集的数据不够多的情况下,状态转移概率和奖励函数就会差很多。另外一种方法是通过model-free的强化学习直接去value

我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!

手把手教你强化学习 (五) 为什么需要值迭代和策略迭代相关推荐

  1. 强化学习系列5:有模型的策略迭代方法

    1. 策略迭代算法 这里策略迭代使用的是表格法,基本步骤是: 用字典存储每个s的v值 根据v值来选骰子 策略迭代的步骤为: 初始化sss,VVV,Π\PiΠ 进行一定次数的迭代直至Π\PiΠ收敛. 2 ...

  2. 强化学习——值迭代和策略迭代

    [强化学习]值迭代和策略迭代 在强化学习中我们经常会遇到策略迭代与值迭代,但是很多人都搞不清楚他们两个之间的区别,他们其实都是强化学习中的动态规划方法(DP). --<Reinforcement ...

  3. 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BRAC算法原理详解与实现(经验篇)

    论文原文:[Yifan Wu, George Tucker, Ofir Nachum: "Behavior Regularized Offline Reinforcement Learnin ...

  4. 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BEAR算法原理详解与实现

    论文信息:Stabilizing Off-Policy Q-Learning via Bootstrapping Error Reduction 本文由UC Berkeley的Sergey Levin ...

  5. 【手把手教你】用backtrader量化回测海龟交易策略

    01 引言 海龟交易策略是比较经典的趋势交易系统之一,涵盖了从入场交易(品种选择).仓位管理(基于ATR加减仓).离场(触发条件)的整个过程.机械套用海龟交易法则在A股上进行交易可能效果不佳,但其交易 ...

  6. 【论文解读】深度强化学习基石论文:函数近似的策略梯度方法

     导读:这篇是1999 年Richard Sutton 在强化学习领域中的经典论文,论文证明了策略梯度定理和在用函数近似 Q 值时策略梯度定理依然成立,本论文奠定了后续以深度强化学习策略梯度方法的基石 ...

  7. 【文献学习】强化学习1:基于值函数的方法

    参考文献: [1]<机器学习>,周志华(西瓜书) [2]<强化学习>,邹伟,等(鳄鱼书) (今天看书总是走神,干脆总结一下,希望帮自己理清思路.如果碰巧能被大神看到,如有不正确 ...

  8. 论文学习:Decoupling Value and Policy for Generalization in Reinforcement Learning(强化学习中泛化的解耦价值和策略)

    摘要: Standard deep reinforcement learning algorithms use a shared representation for the policy and v ...

  9. 手把手教你深度学习强大算法进行序列学习(附Python代码)

    作者:NSS 翻译:陈之炎 校对:丁楠雅 本文共3200字,建议阅读10分钟. 本文将教你使用做紧致预测树的算法来进行序列学习. 概述 序列学习是近年来深度学习的热点之一.从推荐系统到语音识别再到自然 ...

  10. Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!(转载学习)

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

最新文章

  1. APP不同上线情况对应的测试流程
  2. 注意力机制的本质中文版代码
  3. Net WebClient 异步批量下载文件
  4. python详细安装教程3.8-python3.8下载及安装步骤详解
  5. 数据库常用语句(日常填充)
  6. webstorm怎么跑项目_怎么跑Mint-UI的实例,你知道吗?
  7. php include file_包含与被包含(PHP include文件)
  8. Moodle: 查询 / 更新 / 添加 / 删除 / 导出 用户 ($DB用法)
  9. 基于Hadoop2.2.0版本号分布式云盘的设计与实现
  10. Android编程中dp、px和sp的区别
  11. 华为与万达签订5G战略合作协议 推动5G商业场景应用
  12. ISA防火墙策略配置以及服务器的发布
  13. R--ggplot包的学习(3)
  14. 上海发布通知:年底前全面清退不符条件的网约车车辆和驾驶员
  15. 多元伯努利分布 multivariate bernoulli distribution
  16. Unity 为游戏对象设置标签
  17. Linux安装及管理应用程序
  18. Python数据分析案例18——化学分子数据模型(机器学习分类问题全流程)
  19. 【JS 逆向百例】医保局 SM2+SM4 国产加密算法实战
  20. nodejs简单学习

热门文章

  1. JS里设控件不可用取值
  2. HCIE-Security Day17:防火墙双机热备实验(五):防火墙旁挂交换机,交换机静态路由引流
  3. web安全day17:天天都在说的中间人攻击到底是啥
  4. nssm在服务器上的使用超详细说明
  5. LNMP详解(十六)——Nginx日志切割
  6. CentOS安装后初始配置
  7. 防火墙双机热备配置实例(二)
  8. mysql批量替换 语法
  9. 计组_IEEE754_练习题
  10. gcc编译器参数使用及解决