Chapter 4 Dynamic Programming
动态规划(Dynamic Programming,DP)是一类在给定完备环境模型的MDP后用来计算最优策略的算法。动态规划算法在强化学习中因为:1. 假设有一个完美的环境模型;2. 极大的计算代价 实际用处不大,但是它提供了理解本书其他算法的重要基础。
假设环境是第3章定义过的有限MDP, 也就是环境的状态 S \mathcal{S} S、动作 A \mathcal{A} A、奖励 R \mathcal{R} R是有限的,对于所有的 s ∈ S , r ∈ R , a ∈ A ( s ) ,且 s ′ ∈ S + s \in \mathcal{S}, r\in \mathcal{R}, a \in \mathcal{A}(s),且s^{\prime} \in \mathcal{S^+} s∈S,r∈R,a∈A(s),且s′∈S+ ,MDP的动态性由一系列概率 p ( s ′ , r ∣ s , a ) p(s^{\prime}, r | s, a) p(s′,r∣s,a)表示。
DP的核心思想是使用价值函数来组织和结构化对于好的策略的搜索。当我们已经得到满足以下Bellman最优方程的最优价值函数
v
∗
v_*
v∗或
q
∗
q_*
q∗后,很容易得到最优策略:
v
∗
(
s
)
=
m
a
x
a
E
[
R
t
+
1
+
γ
v
∗
(
S
t
+
1
)
∣
S
t
=
s
,
A
t
=
a
]
=
m
a
x
a
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
∗
(
s
′
)
]
(
4.1
)
\begin{aligned} v_{*}(s)\ &= \ \mathop{max} \limits_a \ \mathbb{E}[R_{t+1} + \gamma v_{*}(S_{t+1}) \mid S_t=s,A_t=a] \\ &= \mathop{max} \limits_a \sum_{s^{\prime}, r}p(s^{\prime}, r|s, a)[r + \gamma v_*(s^{\prime})] \qquad (4.1) \end{aligned}
v∗(s) = amax E[Rt+1+γv∗(St+1)∣St=s,At=a]=amaxs′,r∑p(s′,r∣s,a)[r+γv∗(s′)](4.1)
q ∗ ( s , a ) = E [ R t + 1 + γ m a x a ′ q ∗ ( S t + 1 , a ′ ) ∣ S t = s , A t = a ] = ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ m a x a ′ q ∗ ( s ′ , a ′ ) ] ( 4.2 ) \begin{aligned} q_{*}(s, a)\ & = \ \mathbb{E}[R_{t+1} + \gamma\ \mathop{max} \limits_{a^{\prime}}\ q_*(S_{t+1}, a^{\prime}) \mid S_t=s,A_t=a] \\ &= \sum_{s^{\prime}, r} p(s^{\prime}, r | s, a) [r + \gamma\ \mathop{max} \limits_{a^{\prime}}\ q_*(s^{\prime}, a^{\prime})] \ \qquad (4.2) \end{aligned} q∗(s,a) = E[Rt+1+γ a′max q∗(St+1,a′)∣St=s,At=a]=s′,r∑p(s′,r∣s,a)[r+γ a′max q∗(s′,a′)] (4.2)
4.1 Policy Evaluation(Prediction)
来考虑一下对任意的策略 π \pi π如何计算状态价值函数 v π v_{\pi} vπ, 在DP文献中,将这个称作策略评估(policy evaluation),也将其称作预测问题(prediction problem)。
回忆一下第3章的式(3.14),对于所有的
s
∈
S
s \in \mathcal{S}
s∈S,有:
v
π
(
s
)
=
˙
E
π
[
G
t
∣
S
t
=
s
]
=
E
π
[
R
t
+
1
+
γ
G
t
+
1
∣
S
t
=
s
]
(
b
y
(
3.9
)
)
=
E
π
[
R
t
+
1
+
γ
v
π
(
S
t
+
1
)
∣
S
t
=
s
]
(
4.3
)
=
∑
a
π
(
a
∣
s
)
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
π
(
s
′
)
]
(
4.4
)
\begin{aligned} v_{\pi}(s)\ & \dot{=} \ \mathbb{E}_{\pi}\left[G_t \mid S_t=s\right] \\ & =\mathbb{E}_{\pi}\left[R_{t+1}+\gamma G_{t+1} \mid S_t=s\right] \qquad (by(3.9)) \\ & =\mathbb{E}_{\pi}\left[R_{t+1}+\gamma v_{\pi}(S_{t+1}) \mid S_t=s\right] \qquad (4.3) \\ &= \sum _{a } \pi(a | s) \sum_{s^{\prime},r} p(s^{\prime}, r | s, a) \left[ r + \gamma v_{\pi}(s^{\prime}) \right] \qquad (4.4) \end{aligned}
vπ(s) =˙ Eπ[Gt∣St=s]=Eπ[Rt+1+γGt+1∣St=s](by(3.9))=Eπ[Rt+1+γvπ(St+1)∣St=s](4.3)=a∑π(a∣s)s′,r∑p(s′,r∣s,a)[r+γvπ(s′)](4.4)
上式中的
π
(
a
∣
s
)
\pi(a|s)
π(a∣s)表示在策略
π
\pi
π下的状态
s
s
s时采取动作
a
a
a的概率。在策略
π
\pi
π下,只要
γ
<
1
\gamma < 1
γ<1或有最终步,那么
v
π
v_{\pi}
vπ的存在和唯一性是有保证的。
迭代策略评估算法(iterative policy evaluation):
如果环境的动态性是完全可知的,则公式(4.4)是一个有
∣
S
∣
|\mathcal{S}|
∣S∣个未知数(
v
π
,
s
∈
S
v_{\pi},s \in \mathcal{S}
vπ,s∈S)的
∣
S
∣
|\mathcal{S}|
∣S∣个等式的线性联立方程组。理论上这个方程组可以被直接解出,只是计算很繁琐。而使用迭代方法更合适;考虑有一系列的近似价值函数
v
0
,
v
1
,
v
2
,
⋯
v_0, v_1, v_2, \cdots
v0,v1,v2,⋯,每一个都将
S
+
S^+
S+映射到
R
\mathbb{R}
R。初始的近似价值函数
v
0
v_0
v0被随意选择(除了终止状态必须设为0)。其他每个后继近似价值函数使用式(4.4)的
v
π
v_{\pi}
vπ的贝尔曼方程来作为更新规则:
v
k
+
1
(
s
)
=
˙
E
π
[
R
t
+
1
+
γ
v
k
(
S
t
+
1
)
∣
S
t
=
s
]
=
∑
a
π
(
a
∣
s
)
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
k
(
s
′
)
]
(
4.5
)
\begin{aligned} v_{k+1}(s) & \dot{=} \mathbb{E}_{\pi}\left[R_{t+1}+\gamma v_{k}(S_{t+1}) \mid S_t=s\right] \\ &= \sum _{a } \pi(a | s) \sum_{s^{\prime},r} p(s^{\prime}, r | s, a) \left[ r + \gamma v_{k}(s^{\prime}) \right] \qquad (4.5) \end{aligned}
vk+1(s)=˙Eπ[Rt+1+γvk(St+1)∣St=s]=a∑π(a∣s)s′,r∑p(s′,r∣s,a)[r+γvk(s′)](4.5)
对于所有的
s
∈
S
s \in \mathcal{S}
s∈S来说,
v
k
=
v
π
v_k= v_{\pi}
vk=vπ是这个更新规则中的不动点,因为
v
π
v_{\pi}
vπ的贝尔曼方程已经保证了这种情况下等式的成立。并且在保证
v
π
v_{\pi}
vπ的成立的条件下,序列
{
v
k
}
\{v_k\}
{vk}在
k
→
∞
k \rightarrow \infty
k→∞时可以收敛到
v
π
v_{\pi}
vπ。这个求解算法被称为迭代策略评估算法。
期望更新(expected update):为了从 v k v_k vk得到下一个近似 v k + 1 v_{k+1} vk+1, 迭代策略评估算法对每一个状态 s s s采用相同的操作:在被评估的策略下可能的所有的一步转移中,用从s的后继状态的旧值中获得的新值来替换s的旧值,以及期望即时奖励。迭代策略评估的每一次迭代更新所有的状态的价值函数,以产生新的近似价值函数 v k + 1 v_{k+1} vk+1。在DP中这些方法被称为期望更新,因为它们是基于所有可能的后继状态的期望值的,而不是后继状态的一个样本。
为了编程实现式(4.5)所示的迭代策略评估:
- 我们需要两个数组,一个用于存储旧的价值函数 v k ( s ) v_k(s) vk(s),一个存储新的价值函数 v k + 1 ( s ) v_{k+1}(s) vk+1(s);这样在旧的价值函数不变的情况下,新的价值函数可以一个接一个的被计算出来。
- 也可以只使用一个数组来“就地(in place)"更新,即每次用新的价值函数直接替换旧的价值函数;在这种情况下,根据状态更新的顺序,在式(4.5)的右侧有时候会使用新的状态值而不是旧的状态值;这种就地更新的算法也能够收敛到 v π v_{\pi} vπ,甚至会比两个数组的版本收敛更快,因为它更快的使用新数据。
- 在DP算法中一般使用就地更新的版本。
迭代策略评估的就地更新的伪代码如下,在每次遍历之后会测试 m a x s ∈ S ∣ v k + 1 ( s ) − v k ( s ) ∣ max_{s \in \mathcal{S}} |v_{k+1}(s)-v_k(s)| maxs∈S∣vk+1(s)−vk(s)∣, 当它足够小时就停止迭代。
4.2 Policy Improvement
先来看一下策略提升定理(policy improvement theorem, 也译作策略改进定理或策略改善定理)的特例:假设对于任意一个确定的策略
π
\pi
π,我们已经确定了它的价值函数
v
π
v_{\pi}
vπ。对于一些状态
s
s
s,我们想知道是否应该选择一个不同于给定的策略的动作
a
≠
π
(
s
)
a \neq \pi(s)
a=π(s),我们已经知道从状态s继续选择当前策略的价值
v
π
(
s
)
v_{\pi}(s)
vπ(s),但是选择新策略是更好还是更坏?回答这个问题的一个答案是在状态s选择动作a,然后继续遵循现有的策略
π
\pi
π。这种方法的价值为:
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
′
)
]
(
4.6
)
\begin{aligned} q_{\pi}(s, a)\ & \dot{=} \ \mathbb{E}[R_{t+1} + \gamma v_{\pi}(S_{t+1}) \mid S_t=s,A_t=a] \\ &= \sum_{s^{\prime}, r}p(s^{\prime}, r|s, a)[r + \gamma v_{\pi}(s^{\prime})] \qquad (4.6) \end{aligned}
qπ(s,a) =˙ E[Rt+1+γvπ(St+1)∣St=s,At=a]=s′,r∑p(s′,r∣s,a)[r+γvπ(s′)](4.6)
而关键准则就是这个值是大于还是小于
v
π
(
s
)
v_{\pi}(s)
vπ(s),如果这个值更大,则说明在状态s下选择动作a,然后继续使用策略
π
\pi
π比始终使用策略
π
\pi
π更优。当每次在转态s下选择a都是更好时,我们就认为新策略总体上来说更好。
接下来就是策略提升定理的更一般形式,假设
π
\pi
π和
π
′
\pi^{\prime}
π′是任意两个确定的策略,对于任意状态
s
∈
S
s \in \mathcal{S}
s∈S:
q
π
(
s
,
π
′
(
s
)
)
≥
v
π
(
s
)
(
4.7
)
q_{\pi}(s, \pi^{\prime}(s)) \ge v_{\pi}(s) \qquad (4.7)
qπ(s,π′(s))≥vπ(s)(4.7)
那么策略
π
′
\pi^{\prime}
π′相比与策略
π
\pi
π 一样好或更好,也就是说,对于任意状态
s
∈
S
s \in \mathcal{S}
s∈S,它肯定能获得一样或更好的期望回报:
v
π
′
(
s
)
≥
v
π
(
s
)
(
4.8
)
v_{\pi^{\prime}}(s) \ge v_{\pi}(s) \qquad (4.8)
vπ′(s)≥vπ(s)(4.8)
并且如果式(4.7)中的不等式在某个状态下是严格不等的,那么式(4.8)在这个状态下也会是严格不等的。
策略提升定理的证明通过以下推导过程可以证明,从式(4.7)开始,我们用式(4.6)不断扩展公式左侧的
q
π
q_{\pi}
qπ,并不断应用式(4.7)直到得到
v
π
′
(
s
)
v_{\pi^{\prime}}(s)
vπ′(s):
v
π
(
s
)
≤
q
π
(
s
,
π
′
(
s
)
)
=
E
[
R
t
+
1
+
γ
v
π
(
S
t
+
1
)
∣
S
t
=
s
,
A
t
=
π
′
(
s
)
]
(
b
y
(
4.6
)
)
=
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
]
(
b
y
(
4.7
)
)
=
E
π
′
[
R
t
+
1
+
γ
E
[
R
t
+
2
+
γ
v
π
(
S
t
+
2
)
∣
S
t
+
1
,
A
t
+
1
=
π
′
(
S
t
+
1
)
]
∣
S
t
=
s
]
=
E
π
′
[
R
t
+
1
+
γ
R
t
+
2
+
γ
2
v
π
(
S
t
+
2
)
∣
S
t
=
s
]
≤
E
π
′
[
R
t
+
1
+
γ
R
t
+
2
+
γ
2
R
t
+
3
+
γ
3
v
π
(
S
t
+
3
)
∣
S
t
=
s
]
⋮
≤
E
π
′
[
R
t
+
1
+
γ
R
t
+
2
+
γ
2
R
t
+
3
+
γ
3
R
t
+
4
+
⋯
∣
S
t
=
s
]
=
v
π
′
(
s
)
\begin{aligned} v_{\pi}(s) & \le q_{\pi}(s, \pi^{\prime}(s)) \\ &= \mathbb{E}[R_{t+1} + \gamma v_{\pi}(S_{t+1}) \mid S_t=s,A_t=\pi^{\prime}(s)] \qquad (by (4.6)) \\ &= \mathbb{E}_{\pi^{\prime}}[R_{t+1} + \gamma v_{\pi}(S_{t+1}) \mid S_t=s] \\ &\le \mathbb{E}_{\pi^{\prime}}[R_{t+1} + \gamma q_{\pi}(S_{t+1}, \pi^{\prime}(S_{t+1})) \mid S_t=s] \qquad (by (4.7)) \\ &= \mathbb{E}_{\pi^{\prime}}[R_{t+1} + \gamma \mathbb{E}[R_{t+2} + \gamma v_{\pi}(S_{t+2}) \mid S_{t+1},A_{t+1}=\pi^{\prime}(S_{t+1})] \mid S_t=s] \\ &= \mathbb{E}_{\pi^{\prime}}[R_{t+1} + \gamma R_{t+2} + \gamma^2 v_{\pi}(S_{t+2})\mid S_t=s] \\ &\le \mathbb{E}_{\pi^{\prime}}[R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \gamma^3 v_{\pi}(S_{t+3})\mid S_t=s] \\ & \vdots \\ &\le \mathbb{E}_{\pi^{\prime}}[R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \gamma^3 R_{t+4} + \cdots \mid S_t=s] \\ &= v_{\pi^{\prime}}(s) \end{aligned}
vπ(s)≤qπ(s,π′(s))=E[Rt+1+γvπ(St+1)∣St=s,At=π′(s)](by(4.6))=Eπ′[Rt+1+γvπ(St+1)∣St=s]≤Eπ′[Rt+1+γqπ(St+1,π′(St+1))∣St=s](by(4.7))=Eπ′[Rt+1+γE[Rt+2+γvπ(St+2)∣St+1,At+1=π′(St+1)]∣St=s]=Eπ′[Rt+1+γRt+2+γ2vπ(St+2)∣St=s]≤Eπ′[Rt+1+γRt+2+γ2Rt+3+γ3vπ(St+3)∣St=s]⋮≤Eπ′[Rt+1+γRt+2+γ2Rt+3+γ3Rt+4+⋯∣St=s]=vπ′(s)
对于一个新的策略
π
′
\pi^{\prime}
π′, 如果满足:
π
′
(
s
)
=
˙
a
r
g
m
a
x
a
q
π
(
s
,
a
)
=
a
r
g
m
a
x
a
E
[
R
t
+
1
+
γ
v
π
(
S
t
+
1
)
∣
S
t
=
s
,
A
t
=
a
]
(
4.9
)
=
a
r
g
m
a
x
a
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
π
(
s
′
)
]
\begin{aligned} \pi^{\prime}(s) &\ \dot{=}\ \mathop{argmax} \limits_a\ q_{\pi}(s, a) \\ & = \mathop{argmax} \limits_a\ \mathbb{E}[R_{t+1} + \gamma v_{\pi}(S_{t+1}) \mid S_t=s, A_t=a] \qquad (4.9) \\ & = \mathop{argmax} \limits_a\ \sum_{s^{\prime}, r} p(s^{\prime}, r | s, a)[r + \gamma v_{\pi}(s^{\prime})] \end{aligned}
π′(s) =˙ aargmax qπ(s,a)=aargmax E[Rt+1+γvπ(St+1)∣St=s,At=a](4.9)=aargmax s′,r∑p(s′,r∣s,a)[r+γvπ(s′)]
上面的
a
r
g
m
a
x
a
argmax_a
argmaxa表示能够使表达式最大化的a(如果相等则任取一个)。这个贪心策略根据
v
π
v_{\pi}
vπ向前单步搜索采取在短期内看上去最优的动作。这个贪心策略满足式(4.7)的策略提升定理,所以它跟原来的策略一样好,甚至更好。这种根据原策略的价值函数执行贪心算法,来构造一个更好策略的过程,被称为策略提升(policy improvement)。
如果新的策略
π
′
\pi^{\prime}
π′和旧的策略
π
\pi
π一样好,但不是更好,那么
v
π
=
v
π
′
v_{\pi} = v_{\pi^{\prime}}
vπ=vπ′, 从式(4.9)可得到,对于所有状态
s
∈
S
s \in \mathcal{S}
s∈S:
π
′
(
s
)
=
m
a
x
a
E
[
R
t
+
1
+
γ
v
π
′
(
S
t
+
1
)
∣
S
t
=
s
,
A
t
=
a
]
(
4.9
)
=
m
a
x
a
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
π
′
(
s
′
)
]
\begin{aligned} \pi^{\prime}(s) & = \mathop{max} \limits_a\ \mathbb{E}[R_{t+1} + \gamma v_{\pi^{\prime}}(S_{t+1}) \mid S_t=s, A_t=a] \qquad (4.9) \\ & = \mathop{max} \limits_a \sum_{s^{\prime}, r} p(s^{\prime}, r | s, a)[r + \gamma v_{\pi^{\prime}}(s^{\prime})] \end{aligned}
π′(s)=amax E[Rt+1+γvπ′(St+1)∣St=s,At=a](4.9)=amaxs′,r∑p(s′,r∣s,a)[r+γvπ′(s′)]
这和式(4.1)的贝尔曼最优方程完全相同,因此
v
π
′
v_{\pi^{\prime}}
vπ′一定是
v
∗
v_*
v∗,策略
π
′
\pi^{\prime}
π′和
π
\pi
π都是最优策略。策略提升一定会给我们一个严格最优的策略除非原来的策略已经是最优的了。
这里讨论的都是确定性策略,但是要记住随机提升定理在随机策略的情况下也是成立的。并且在类似式(4.9)中出现多个动作都可以得到最大值的情况时,在随机情况下不需要从中选一个。相反,在新的贪心策略中,每一个最优的动作都能以一定的概率被选中。
4.3 Policy Iteration
策略迭代(policy iteration):当一个策略
π
\pi
π,根据
v
π
v_{\pi}
vπ提升并得到了一个更好的策略
π
′
\pi^{\prime}
π′,我们可以计算
v
π
′
v_{\pi^{\prime}}
vπ′并提升它得到一个更好的策略
π
′
′
\pi^{\prime \prime}
π′′,因此,我们可以获得一系列单调改进的策略和价值函数:
π
0
⟶
E
v
π
0
⟶
I
π
1
⟶
E
v
π
1
⟶
I
π
2
⟶
E
⋯
⟶
I
π
∗
⟶
E
v
∗
\pi_0 \stackrel{E}{\longrightarrow} v_{\pi0} \stackrel{I}{\longrightarrow} \pi_1 \stackrel{E}{\longrightarrow} v_{\pi1} \stackrel{I}{\longrightarrow} \pi_2 \stackrel{E}{\longrightarrow} \cdots \stackrel{I}{\longrightarrow} \pi_* \stackrel{E}{\longrightarrow} v_*
π0⟶Evπ0⟶Iπ1⟶Evπ1⟶Iπ2⟶E⋯⟶Iπ∗⟶Ev∗
上式中的
⟶
E
\stackrel{E}{\longrightarrow}
⟶E是策略评估,
⟶
I
\stackrel{I}{\longrightarrow}
⟶I是策略提升。每一个策略都被保证比前一个策略更优(除非它前一个已经是最优的)。因为有限MDP只有有限种策略,这个过程在有限迭代里一定会收敛到最优策略和最优价值函数。
策略迭代的完整算法如下图所示:
4.4 Value Iteration
策略迭代的一个缺点是它使用了策略评估,而策略评估需要很多轮的迭代。
价值迭代(value iteration):可以被认为是策略评估只进行了一轮更新的策略迭代算法,它可以被记作结合了策略提升和截断策略评估的更新操作, 对于所有状态
s
∈
S
s \in \mathcal{S}
s∈S::
v
k
+
1
(
s
)
=
˙
m
a
x
a
E
[
R
t
+
1
+
γ
v
k
(
S
t
+
1
)
∣
S
t
=
s
,
A
t
=
a
]
=
m
a
x
a
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
k
(
s
′
)
]
(
4.10
)
\begin{aligned} v_{k+1}(s) &\ \dot{=}\ \mathop{max} \limits_a\ \mathbb{E}[R_{t+1} + \gamma v_{k}(S_{t+1}) \mid S_t=s, A_t=a] \\ & = \mathop{max} \limits_a \sum_{s^{\prime}, r} p(s^{\prime}, r | s, a)[r + \gamma v_{k}(s^{\prime})] \qquad (4.10) \end{aligned}
vk+1(s) =˙ amax E[Rt+1+γvk(St+1)∣St=s,At=a]=amaxs′,r∑p(s′,r∣s,a)[r+γvk(s′)](4.10)
对于任意
v
0
v_0
v0, 在保证
v
∗
v_*
v∗存在的条件下,序列
{
v
k
}
\{v_k \}
{vk}都可以收敛到
v
∗
v_*
v∗。
理解价值迭代的tips:
-
借助贝尔曼最优方程式(4.1),价值迭代将贝尔曼最优方程变为一条更新规则。除了从达到最大值的状态更新外,价值迭代更新与式(4.5)的策略评估更新一样
-
比较下面两个图的回溯图,左图是策略评估(原书59页),右图是价值迭代(原书图3.4左侧)
- 在每一次遍历中,价值迭代有效结合了策略评估的遍历和策略改进的遍历。一般来说,可以将截断策略迭代算法看做一系列的遍历序列,其中一些进行策略评估更新,而另一些进行价值迭代更新。
价值迭代如何终止呢?当一次遍历中价值函数仅有细微的变化时,就可以停止了。下面是一个包含这个停止条件的完整价值迭代算法。
4.5 Asynchronous Dynamic Programming
这章已经讨论过的DP方法的一个缺点是它需要遍历MDP的整个状态集。如果状态集很大,单次遍历的开销就非常大了。比如backgammon游戏有 1 0 20 10^{20} 1020个状态,即使每秒可以进行100万个状态的价值迭代更新,也需要花上1000年来进行一次扫描。
异步DP算法(Asynchronous DP algorithms)是一类就地迭代的DP算法,它不以系统遍历状态集的形式来组织算法,这些算法使用任意可用的状态值,以任意顺序来更新状态值。所以在某些状态的值更新一次之前,另一些状态的值可能已经更新好几次了。所以为了正确收敛,异步算法必须不断地更新所有状态的值:在某个计算节点后,它不能忽略任何一个状态。
比如使用异步价值迭代来更新式(4.10),在每一个步骤k上,只就地更新一个状态 s k s_k sk的值,如果 0 ≤ γ < 1 0 \le \gamma < 1 0≤γ<1,则只要所有状态都在序列 { s k } \{s_k\} {sk}中出现无数次,就能保证渐进收敛到 v ∗ v_* v∗。
当然,避免遍历并不一定意味着我们可以减少计算量。这只是意味着一个算法在提升一个策略前,不需要陷入任何漫长而无望的遍历。
- 我们可以尝试通过选择一些特定状态来更新,从而加快算法的速度。
- 我们可以调整更新的顺序,使价值信息能够更有效地在状态之间传播。
- 对于一些状态可能不需要像其他状态那样频繁地更新其价值函数;如果与最优行为无关,我们甚至可以完全跳过一些状态。后面第8章就会讨论这样的思路。
异步算法还有个好处:使计算和实时交互的结合变得更加容易。为了解决给定的MDP问题,我们可以在一个agent在MDP中进行真实交互的同时,执行迭代DP算法。agent的经验可用于确定DP算法要更新哪个状态。同时DP算法的最新值和策略信息可以指导agent的决策。
4.6 Generalized Policy Iteration
广义策略迭代(generalized policy iteration GPI):让策略评估和策略提升相互作用的一般思路,与这两个流程的粒度和其他细节无关。几乎所有方法都包括明确定义的策略和价值函数,如下图所示。策略总是基于特定的价值函数进行提升,价值函数也始终会向对应策略的真实价值函数收敛。当评估流程和提升流程都很稳定,不再变化,那么价值函数和策略必定是最优的。价值函数只有在与当前策略一致时才稳定,并且策略只有在对当前价值函数是贪心策略时才稳定,因此只有当一个策略发现它对自己的评估价值函数是贪心策略时,这两个流程才会稳定下来,这意味着式(4.1)的贝尔曼最优方程成立,这个策略和价值函数也都是最优的。
理解GPI的角度:
-
可以将GPI的评估和提升流程看做是竞争和合作。竞争是指它们朝着相反的方向前进:让策略对价值函数贪心通常会使价值函数与当前策略不匹配,而使价值函数与策略一致通常会导致策略不再贪心。从长远看,这两个过程会相互作用来找到一个联合解决方案:最优价值函数和最优策略。
-
可以将GPI的评估和提升流程视为两个约束或目标之间的相互作用的流程,如下图所示的二维空间中的两条线。每个流程都把价值函数或策略推向其中的一条线,这条线代表了对于两个目标中的某一个目标的解决方案。图中的箭头对应于策略迭代的行为,即每个箭头都表示系统每次都会完全地达到其中一个目标。
4.7 Efficiency of Dynamic Programming
DP算法也许对一些规模非常大的问题不太适用,但是相比于其他解决MDPs的方法,DP方法实际上效率很高。如果忽略掉一些技术上的细节,在最坏情况下,DP方法找到最优策略的时间与状态和动作的数量是呈多项式级关系的。
DP算法有时会由于维度灾难(the curse of dimensionality)而被认为缺乏实用性。维度灾难是指状态总数量随着状态变量的增加而指数级上升。状态集合太大的确会带来一些困难,但是这些是问题本身的困难,而非DP作为一种解法所带来的困难。实际上,相比于直接搜索和线性规划,DP更加适合于解决大规模状态空间的问题。
在实际运用中,采用今天的计算机实现DP算法,可以解决拥有数百万个状态的MDPs,策略迭代和价值迭代都被广泛采用,并且目前没有定论说哪种方法更好。并且这些方法通常比理论最坏的运行情况收敛的更快,尤其是使用了好的初始价值函数或策略的时候。
对于那些有很大状态空间的问题,通常会使用异步DP算法。
4.8 Summary
本章熟悉了利用动态规划来解决有限MDPs问题。关键概念:
- 策略评估
- 策略提升
- 策略迭代
- 价值迭代
- 期望更新
- 广义策略迭代GPI
- 异步DP算法
自举法(bootstrapping):DP算法有一个特殊性质,所有的方法都是根据对后继状态价值的估计,来更新对当前状态价值的估计。也就是它们根据其他估计来更新自己的估计,这种思想就被称作自举法。