理解强化学习中的策略迭代和值迭代

在这里插入图片描述

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

为什么需要值迭代

  其实我们更希望强化学习直接学习出来一个policy直接用这个policy解决问题就可以,那为什么还需要value function?其实这个value function是非常重要的,当我们拿到一个state之后,follow当前的policy,可以得到一个值函数 V V ,这样不仅可以横向地和其它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)

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

v ( s ) = max a R s a + arg max a A γ s S P s s a v ( 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)

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

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

π ( s ) = arg max a A s S P s s a v ( s ) \pi^{*}(s) = \argmax_{a \in A} \sum_{s^{\prime} \in \mathcal{S}} \mathcal{P}_{s s^{\prime}}^{a} v\left(s^{\prime}\right)

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

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

Value Iteration & Policy Iteration

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

V π ( s ) = R ( s ) + γ s S P s π ( s ) ( s ) V π ( s ) π ( s ) = arg max a A s S P s a ( 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}

  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 ) = R ( s ) + max a A γ s S P s a ( 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}

  这里是没有策略 π \pi 的,整个方程就是在表达,policytack action的时候,就是在tack max a A γ s S P s a ( s ) V ( s ) \max _{a \in A}\gamma \sum_{s^{\prime} \in S} P_{sa}\left(s^{\prime}\right)V\left(s^{\prime}\right) ,那在值迭代里面,它自己去维护这样一个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 。

V new  ( s ) max a A ( R ( s ) + γ s S P s a ( s ) V old  ( 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)

  这一轮迭代,我们先把所有的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 S P s a ( 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)

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

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

Value Iteration Example: Shortest Path

Shortest Path

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

Policy Iteration

  Policy Iteration中先拿一个策略 π \pi ,然后计算出稳定的 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 function R ( s ) \mathcal{R}(s) state transition P s a \mathcal{P}_{sa}

  例如: we have only observed some episodes

 Episode 1:  s 0 ( 1 ) a 0 ( 1 ) R ( s 0 ) ( 1 ) s 1 ( 1 ) a 1 ( 1 ) R ( s 1 ) ( 1 ) s 2 ( 1 ) a 2 ( 1 ) R ( s 2 ) ( 1 ) s 3 ( 1 ) s T ( 1 )  Episode 2:  s 0 ( 2 ) a 0 ( 2 ) R ( s 0 ) ( 2 ) s 1 ( 2 ) a 1 ( 2 ) R ( s 1 ) ( 2 ) s 2 ( 2 ) a 2 ( 2 ) R ( s 2 ) ( 2 ) s 3 ( 2 ) s T ( 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之后我们可以反推一个MDP,比如给定一个state s s 和一个action a a 其下一个状态的转移概率我们可以从episode中去统计:

P s a ( s ) = times we took action  a  in state  s  and got to state  s times we took action  a  in 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$}}

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

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

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

在这里插入图片描述

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

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

发布了185 篇原创文章 · 获赞 168 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/weixin_39059031/article/details/104441355
今日推荐