文章目录
在这个系列的
马尔可夫决策过程与动态规划
这篇文章中我们是有说这个策略迭代和值迭代的,但是说的更公式化一点,本文主要是对其进行一个更加深刻的理解。
为什么需要值迭代
其实我们更希望强化学习直接学习出来一个policy
直接用这个policy
解决问题就可以,那为什么还需要value function
呢?其实这个value function
是非常重要的,当我们拿到一个state
之后,follow
当前的policy
,可以得到一个值函数
V
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) v∗(s)=πmaxvπ(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) v∗(s)=amaxRsa+a∈Aargmaxγs′∈S∑Pss′av(s′)
如果不收敛,那它(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) π∗(s)=a∈Aargmaxs′∈S∑Pss′av(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 ′ ∈ 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} Vπ(s)π(s)=R(s)+γs′∈S∑Psπ(s)(s′)Vπ(s′)=arga∈Amaxs′∈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 ′ ∈ 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} V(s)=R(s)+a∈Amaxγs′∈S∑Psa(s′)V(s′)
这里是没有策略
π
\pi
π的,整个方程就是在表达,policy
在tack 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)
maxa∈Aγ∑s′∈SPsa(s′)V(s′),那在值迭代里面,它自己去维护这样一个value function
就可以了。policy
只要使得后面上述等式后面那个max
成立就可以了。
整个的迭代过程只关心value
是多少就可以了,这里是value
作为主导,policy
包含在了里面。
Synchronous vs. Asynchronous
更细节一点,这里还有我们怎么去做这个value function
的更新,有两种办法Synchronous value iteration
和In-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) 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 ′ ∈ 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) 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
上图中
v
1
v_{1}
v1,
v
2
v_{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
- Value iteration is a greedy update strategy
- In policy iteration, the value function update by bellman equation is costly
- For small-space MDPs, policy iteration is often very fast and converges quickly
- For large-space MDPs, value iteration is more practical (efficient)
Learning an MDP Model
上面的很多例子都是MDP
中状态转移概率被给定的情况,在很多时候不会给定状态转移概率。但是我们可以从agent
与环境交互的数据中反推reward function
R
(
s
)
\mathcal{R}(s)
R(s)和 state transition
P
s
a
\mathcal{P}_{sa}
Psa。
例如: 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 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
s
s
s 和一个action
a
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$}} 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
。
我的微信公众号名称:小小何先生
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!