前言
本文为强化学习入门系列的第三篇,主要介绍如何通过动态规划来求解贝尔曼最优方程。
我们知道最优策略
π
\pi
π 对应的就是最优价值函数,而其求解分为策略迭代、价值迭代两种方法。本节将详细介绍这两种方法。
本节所讨论的MDP都是已知的MDP。已知的意思就是环境的动态特性是已知的,也就是
p
(
s
′
,
a
∣
s
,
a
)
p(s',a | s,a)
p(s′,a∣s,a) 这个概率密度函数是确定的。
动态规划
策略迭代
策略迭代可以分为策略评估和策略改进两步骤。策略评估就是给定一个策略
π
\pi
π 求解状态价值函数
v
π
(
s
)
v_{\pi}(s)
vπ?(s) ,而策略改进就是寻求一个更优的策略
π
′
\pi'
π′,使得
v
π
′
(
s
)
>
v
π
(
s
)
v_{\pi'}(s)>v_{\pi}(s)
vπ′?(s)>vπ?(s)。
策略评估 Policy Evaluation
解析解推导
策略评估就是给定一个策略
π
\pi
π 求解贝尔曼方程
v
π
(
s
)
v_{\pi}(s)
vπ?(s) 。我们知道贝尔曼方程有如下形式:
v
π
(
s
)
=
∑
a
π
(
a
∣
s
)
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
π
(
s
′
)
]
????
,
?
s
∈
S
v_{\pi}(s)=\sum_a \pi(a|s)\sum_{s',r}p(s',r|s,a)[r+\gamma v_{\pi}(s')]\;\;,\forall s\in S
vπ?(s)=a∑?π(a∣s)s′,r∑?p(s′,r∣s,a)[r+γvπ?(s′)],?s∈S 我们把
v
π
(
s
)
,
v
π
′
(
s
)
v_{\pi}(s),v_{\pi'}(s)
vπ?(s),vπ′?(s) 看成未知的,那其实可看出
v
π
(
s
)
,
v
π
′
(
s
)
v_{\pi}(s),v_{\pi'}(s)
vπ?(s),vπ′?(s) 之间是线性关系。因为状态
s
s
s 是有多个,所以
v
π
(
s
)
v_{\pi}(s)
vπ?(s) 可写成向量形式:
v
π
(
s
)
=
[
v
π
(
s
1
)
v
π
(
s
2
)
.
.
.
v
π
(
s
S
)
]
∣
S
∣
×
1
v_{\pi}(s)= \begin{bmatrix} v_{\pi}(s_1)\\v_{\pi}(s_2)\\...\\v_{\pi}(s_S) \end{bmatrix}_{|S|\times1}
vπ?(s)=?????vπ?(s1?)vπ?(s2?)...vπ?(sS?)??????∣S∣×1? 那问题实际上就是求解一个有
∣
S
∣
|S|
∣S∣ 个未知量的线性方程组。我们用矩阵来表示
v
π
(
s
)
,
v
π
′
(
s
)
v_{\pi}(s),v_{\pi'}(s)
vπ?(s),vπ′?(s) 之间的关系,显然矩阵应该是
S
×
S
S\times S
S×S 维的。那接下来我们进一步化简方程组,方程组可拆开成如下两部分:
v
π
(
s
)
=
∑
a
π
(
a
∣
s
)
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
?
r
+
∑
a
π
(
a
∣
s
)
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
?
γ
v
π
(
s
′
)
????
,
?
s
∈
S
v_{\pi}(s)=\sum_a \pi(a|s)\sum_{s',r}p(s',r|s,a)\cdot r+\sum_a \pi(a|s)\sum_{s',r}p(s',r|s,a)\cdot \gamma v_{\pi}(s')\;\;,\forall s\in S
vπ?(s)=a∑?π(a∣s)s′,r∑?p(s′,r∣s,a)?r+a∑?π(a∣s)s′,r∑?p(s′,r∣s,a)?γvπ?(s′),?s∈S 观察式子左边项,其实
s
′
s'
s′可以被积分掉,也就变成 $\sum_{r}p(r|s,a)r $ ,这就是一个期望的形式,把它定义成一个奖励函数
r
(
s
,
a
)
r(s,a)
r(s,a),表示给定策略
π
\pi
π 下,状态
s
s
s 下采取动作
a
a
a 时的期望奖励。那左边项就变成
∑
a
π
(
a
∣
s
)
?
r
(
s
,
a
)
\sum_a \pi(a|s)\cdot r(s,a)
∑a?π(a∣s)?r(s,a)。我们知道
π
\pi
π 是关于a的一个概率分布,那对a积分,则可以把a消掉,左边项最终可以写成
r
π
(
s
)
r_{\pi}(s)
rπ?(s)。
r
π
(
s
)
r_{\pi}(s)
rπ?(s) 是一个
∣
S
∣
×
1
|S|\times 1
∣S∣×1 的矩阵。
再来观察式子右边项,
γ
\gamma
γ 是一个常数,把r积分掉,则变成
γ
∑
a
∑
s
′
π
(
a
∣
s
)
p
(
s
′
∣
s
,
a
)
v
π
(
s
′
)
\gamma \sum_a \sum_{s'}\pi(a|s)p(s'|s,a)v_{\pi}(s')
γ∑a?∑s′?π(a∣s)p(s′∣s,a)vπ?(s′),令
P
π
(
s
,
s
′
)
=
∑
a
∑
s
′
π
(
a
∣
s
)
p
(
s
′
∣
s
,
a
)
P_{\pi}(s,s')=\sum_a \sum_{s'}\pi(a|s)p(s'|s,a)
Pπ?(s,s′)=∑a?∑s′?π(a∣s)p(s′∣s,a),表示状态
s
,
s
′
s,s'
s,s′ 之间的转移概率矩阵,维度为
∣
S
∣
×
∣
S
∣
|S|\times |S|
∣S∣×∣S∣。那么右边项最终可写成
γ
P
π
(
s
,
s
′
)
v
π
(
s
′
)
\gamma P_{\pi}(s,s')v_{\pi}(s')
γPπ?(s,s′)vπ?(s′)。
最后,式子化简为:
v
π
(
s
)
=
r
π
(
s
)
+
γ
P
π
(
s
,
s
′
)
v
π
(
s
′
)
v
π
(
s
i
)
=
r
π
(
s
i
)
+
γ
∑
j
=
1
∣
S
∣
P
π
(
s
i
,
s
j
)
v
π
(
s
j
)
v_{\pi}(s)=r_{\pi}(s)+\gamma P_{\pi}(s,s')v_{\pi}(s') \\ v_{\pi}(s_i)=r_{\pi}(s_i)+\gamma \sum_{j=1}^{|S|} P_{\pi}(s_i,s_j)v_{\pi}(s_j)
vπ?(s)=rπ?(s)+γPπ?(s,s′)vπ?(s′)vπ?(si?)=rπ?(si?)+γj=1∑∣S∣?Pπ?(si?,sj?)vπ?(sj?) 再进一步简写为:
v
π
=
(
I
?
γ
P
π
)
?
1
r
π
v_{\pi}=(I-\gamma P_{\pi})^{-1}r_{\pi}
vπ?=(I?γPπ?)?1rπ? 这个就是解析解。显然是一个
∣
S
∣
×
1
|S|\times 1
∣S∣×1 维的矩阵。由于涉及到矩阵运算,时间复杂度为
O
(
∣
S
∣
3
)
O(|S|^3)
O(∣S∣3)。
数值解推导
解析解涉及矩阵运算,计算量较大,我们可以通过迭代求数值解。我们构造一个数列
{
v
k
(
s
)
}
,
k
∈
[
1
,
∞
]
\{v_k(s)\},k\in[1,\infty]
{vk?(s)},k∈[1,∞]。其中
v
k
v_k
vk? 时包含
∣
S
∣
|S|
∣S∣ 个状态价值函数的函数向量。
v
k
、
v
k
+
1
v_k、v_{k+1}
vk?、vk+1? 根据贝尔曼方程我们可以写出其迭代关系:
v
k
+
1
(
s
)
=
E
π
[
R
t
+
1
+
γ
G
t
+
1
??
∣
??
S
t
=
s
]
=
E
π
[
R
t
+
1
+
γ
v
k
(
s
′
)
??
∣
??
S
t
=
s
]
=
∑
a
π
(
a
∣
s
)
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
k
(
s
′
)
]
\begin{aligned} v_{k+1}(s) =& E_{\pi}[R_{t+1}+\gamma G_{t+1}\;|\;S_t=s] \\ =&E_{\pi}[R_{t+1}+\gamma v_{k}(s')\;|\;S_t=s] \\ =&\sum_a \pi(a|s)\sum_{s',r}p(s',r|s,a)[r+\gamma v_{k}(s')] \\ \end{aligned}
vk+1?(s)===?Eπ?[Rt+1?+γGt+1?∣St?=s]Eπ?[Rt+1?+γvk?(s′)∣St?=s]a∑?π(a∣s)s′,r∑?p(s′,r∣s,a)[r+γvk?(s′)]? 其实
v
1
,
v
2
,
.
.
.
,
v
k
v_1,v_2,...,v_{k}
v1?,v2?,...,vk? 是通过迭代求得的价值函数的近似解,我们的目标就是使其收敛到
v
π
v_{\pi}
vπ?。这个
v
1
v_1
v1?是先通过随机动作来确定的,也就是一个随机的初始函数向量。
策略改进
当我们能估计
π
′
\pi'
π′ 时,我们想知道与当前策略
π
\pi
π 哪个好,就需要比较
v
π
,
v
π
′
v_{\pi},v_{\pi'}
vπ?,vπ′?。这就引出了策略改进定理。
策略改进定理 policy improvement theorem
【定义】给定
π
,
π
′
\pi,\pi'
π,π′,如果对于任意状态s,有
q
π
(
s
,
π
′
(
s
)
)
≥
v
π
(
s
)
q_{\pi}(s,\pi'(s))\geq v_{\pi}(s)
qπ?(s,π′(s))≥vπ?(s),则
?
s
∈
S
,
v
π
′
(
s
)
≥
v
π
(
s
)
\forall s\in S,v_{\pi'}(s)\geq v_{\pi}(s)
?s∈S,vπ′?(s)≥vπ?(s)。
这个定理把原先需要求两个状态价值函数变成只需求一个
v
π
(
s
)
v_{\pi}(s)
vπ?(s) 就好。
那如何证明?
我们先回顾动作价值函数:
q
π
(
s
,
a
)
=
E
[
R
t
+
1
+
γ
?
v
π
(
S
t
+
1
)
??
∣
??
S
t
=
s
,
A
t
=
a
]
=
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
π
(
s
′
)
]
q_{\pi}(s,a)=E[R_{t+1}+\gamma \cdot v_{\pi}(S_{t+1})\;|\;S_t=s,A_t=a] =\sum_{s',r}p(s',r|s,a)[r+\gamma v_{\pi}(s')]
qπ?(s,a)=E[Rt+1?+γ?vπ?(St+1?)∣St?=s,At?=a]=s′,r∑?p(s′,r∣s,a)[r+γvπ?(s′)] 值得注意的是,
R
t
+
1
R_{t+1}
Rt+1? 和
π
\pi
π 其实是无关的,因为在(s,a)时,平均奖励
R
t
+
1
R_{t+1}
Rt+1? 已经获得了,而
π
\pi
π 影响的是下一时刻的状态
s
t
+
1
s_{t+1}
st+1? 对于动作的选择,
R
t
+
2
R_{t+2}
Rt+2? 和
π
\pi
π 才有关。
我们把
π
′
(
s
)
\pi'(s)
π′(s) 代入动作
a
a
a,表示
t
t
t 时刻的动作是由
π
′
\pi'
π′ 确定的,下一时刻的动作还是由
π
\pi
π 确定,所以
R
t
+
1
R_{t+1}
Rt+1? 和
π
′
\pi'
π′ 有关,之后的奖励和
π
\pi
π 有关,推导过程如下:
v
π
(
s
)
≤
q
π
(
s
,
π
′
(
s
)
)
=
E
[
R
t
+
1
+
γ
?
v
π
(
S
t
+
1
)
??
∣
??
S
t
=
s
,
A
t
=
π
′
(
s
)
]
=
E
π
′
[
R
t
+
1
+
γ
?
v
π
(
S
t
+
1
)
??
∣
??
S
t
=
s
]
≤
E
π
′
[
R
t
+
1
+
γ
?
q
π
(
S
t
+
1
,
π
′
(
S
t
+
1
)
)
??
∣
??
S
t
=
s
]
≤
E
π
′
[
R
t
+
1
+
γ
R
t
+
2
+
γ
2
?
q
π
(
S
t
+
2
,
π
′
(
S
t
+
2
)
)
??
∣
??
S
t
=
s
]
≤
E
π
′
[
R
t
+
1
+
γ
R
t
+
2
+
γ
2
R
t
+
3
+
.
.
.
+
.
.
.
??
∣
??
S
t
+
1
=
s
]
=
v
π
′
(
s
)
\begin{aligned} v_{\pi}(s)\leq & q_{\pi}(s,\pi'(s)) \\ =& E[R_{t+1}+\gamma \cdot v_{\pi}(S_{t+1})\;|\;S_t=s,A_t=\pi'(s)] \\ =& E_{\pi'}[R_{t+1}+\gamma \cdot v_{\pi}(S_{t+1})\;|\;S_t=s] \\ \leq& E_{\pi'}[R_{t+1}+\gamma \cdot q_{\pi}(S_{t+1},\pi'(S_{t+1}))\;|\;S_t=s] \\ \leq& E_{\pi'}[R_{t+1}+\gamma R_{t+2} +\gamma^2\cdot q_{\pi}(S_{t+2},\pi'(S_{t+2}))\;|\;S_t=s] \\ \leq& E_{\pi'}[R_{t+1}+\gamma R_{t+2} +\gamma^2 R_{t+3}+...+...\;|\;S_{t+1}=s] \\ =& v_{\pi'}(s) \end{aligned}
vπ?(s)≤==≤≤≤=?qπ?(s,π′(s))E[Rt+1?+γ?vπ?(St+1?)∣St?=s,At?=π′(s)]Eπ′?[Rt+1?+γ?vπ?(St+1?)∣St?=s]Eπ′?[Rt+1?+γ?qπ?(St+1?,π′(St+1?))∣St?=s]Eπ′?[Rt+1?+γRt+2?+γ2?qπ?(St+2?,π′(St+2?))∣St?=s]Eπ′?[Rt+1?+γRt+2?+γ2Rt+3?+...+...∣St+1?=s]vπ′?(s)? 有了这一定理,我们怎么寻找最优的策略?一种比较直观的方法就是贪心方法。
对每个状态s,都选取其动作价值函数最大的的策略
π
′
\pi'
π′,即
?
s
∈
S
,
π
′
(
s
)
=
arg
?
max
?
a
q
π
(
s
,
a
)
=
=
arg
?
max
?
a
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
π
(
s
′
)
]
\forall s\in S,\pi'(s)=\arg\max_a q_{\pi}(s,a)==\arg\max_a \sum_{s',r}p(s',r|s,a)[r+\gamma v_{\pi}(s')]
?s∈S,π′(s)=argamax?qπ?(s,a)==argamax?s′,r∑?p(s′,r∣s,a)[r+γvπ?(s′)] 根据策略改进定理,如果
q
π
(
s
,
π
′
(
s
)
)
≥
v
π
(
s
)
q_{\pi}(s,\pi'(s))\geq v_{\pi}(s)
qπ?(s,π′(s))≥vπ?(s),则更新策略。直到某一时刻下
v
π
′
(
s
)
=
v
π
(
s
)
v_{\pi'}(s)= v_{\pi}(s)
vπ′?(s)=vπ?(s) 时,则算法已收敛,这时也满足贝尔曼最优方程,此时的策略就是我们的最优策略。
简单的流程图如下:
价值迭代
在策略迭代中,我们每轮迭代的步骤是:先根据
π
\pi
π 评估
v
π
(
s
)
v_{\pi}(s)
vπ?(s),再采用贪心方法改进策略。但是在策略评估时,为了使价值函数收敛到
v
π
v_{\pi}
vπ? 我们需要对所有状态都迭代若干次直到价值函数收敛,这就造成迭代中套娃迭代,计算非常麻烦。
那能不能减少迭代呢?有一个方法就是,在评估时只进行一次迭代,也就是对所有状态只扫描一次,接着进行策略改进。
v
k
+
1
(
s
)
=
max
?
a
E
π
[
R
t
+
1
+
γ
G
t
+
1
??
∣
??
S
t
=
s
]
=
max
?
a
E
π
[
R
t
+
1
+
γ
v
k
(
s
′
)
??
∣
??
S
t
=
s
]
=
max
?
a
∑
a
π
(
a
∣
s
)
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
k
(
s
′
)
]
\begin{aligned} v_{k+1}(s) =& \max_a E_{\pi}[R_{t+1}+\gamma G_{t+1}\;|\;S_t=s] \\ =&\max_a E_{\pi}[R_{t+1}+\gamma v_{k}(s')\;|\;S_t=s] \\ =&\max_a \sum_a \pi(a|s)\sum_{s',r}p(s',r|s,a)[r+\gamma v_{k}(s')] \\ \end{aligned}
vk+1?(s)===?amax?Eπ?[Rt+1?+γGt+1?∣St?=s]amax?Eπ?[Rt+1?+γvk?(s′)∣St?=s]amax?a∑?π(a∣s)s′,r∑?p(s′,r∣s,a)[r+γvk?(s′)]?
那这个其实就是贝尔曼最优方程。这样子就不需要反复迭代来求解
v
π
(
s
)
v_{\pi}(s)
vπ?(s)了。
从过程来理解价值迭代与策略迭代的不同
-
价值迭代的过程是:
v
1
→
v
2
→
v
3
→
.
.
.
→
v
?
v_1\rightarrow v_2\rightarrow v_3\rightarrow ...\rightarrow v_*
v1?→v2?→v3?→...→v?? -
策略迭代的过程是:
π
1
→
v
π
1
→
π
2
→
v
π
2
→
π
3
→
v
π
3
→
.
.
.
→
π
?
→
v
?
\pi_1\rightarrow v_{\pi_1}\rightarrow\pi_2\rightarrow v_{\pi_2}\rightarrow \pi_3\rightarrow v_{\pi_3}\rightarrow ...\rightarrow \pi_*\rightarrow v_{*}
π1?→vπ1??→π2?→vπ2??→π3?→vπ3??→...→π??→v??
显然,策略迭代需要先求精确的状态价值函数 ,然后不停更新策略。一次更新是对整个状态空间进行遍历。而价值迭代是在一次遍历后立即停止策略评估,这样对每个状态只进行一次更新,计算的是近似的价值函数。
价值迭代虽然计算简化,但仍需遍历一次状态空间,这种方法其实也称为同步动态规划(Synchronous DP)。
事实上,还有一种更为简化的方法叫做就地策略迭代。属于异步动态规划Asynchronous DP方法。即我们并不需要保持所有状态更新的同步,在某次更新中,不对状态集合 S 中的每一个状态都更新,而只随机选取其中的某一个状态的价值函数进行更新,其他状态保持不变 。这样减小计算,可以更快的达到收敛。
小结
本节介绍了如何用动态规划求解最优策略。动态规划是属于在model-based的情况下的算法,因为我们已经假定了环境的动态特性是已知的。动态规划分为策略迭代和价值迭代。策略迭代又分为两个步骤,一个是策略评估,一个是策略改进。策略评估用于计算给定策略的价值函数,属于精确计算。策略改进利用策略改进定理比较两个策略的价值函数,从而对策略进行更新。策略评估需要迭代计算,而策略迭代本身也是个迭代的过程,涉及到迭代中的迭代,造成计算非常复杂,于是就有了价值迭代。价值迭代可看出是特殊的策略迭代,其主要思想是在计算价值函数时只迭代一步,近似计算价值函数。价值迭代也称为同步动态规划。尽管计算简化,但价值迭代中对状态空间的每个状态都要更新一次,仍需遍历一次状态空间。为此,就有人提出异步的迭代思路——就地策略迭代。即我们并不需要保持所有状态更新的同步,在某次更新中,不对状态集合 S 中的每一个状态都更新,而只随机选取其中的某一个状态的价值函数进行更新,其他状态保持不变 。
参考
[1] sutton.Barto.《强化学习(第二版)》
[2] 动态规划——强化学习第四章 - 知乎 (zhihu.com)
[2] 【机器学习】白板推导系列(三十五) ~ 强化学习之动态规划_bilibili
|