《强化学习》第四章 动态规划


动态规划(Dynamic Programming,DP)是一类 优化方法,在给定一个用马尔科夫决策过程(MDP)描述的 完备环境模型的情况下,其可以计算 最优的策略

本章中,我们假设环境是一个有限MDP。也就是说,我们假设状态集合S、动作集合A和收益集合R是有限的,并且整个系统的动态特性由对于任意 s ∈ S 、 a ∈ A ( s ) 、 r ∈ R 和 s ′ ∈ S + ( S + s \in S、a \in A(s)、r \in R 和s' \in S^+(S^+ sSaA(s)rRsS+(S+表示在分幕式任务下S加上一个终止状态)的四参数概率分布p(s’,r|s,a)给出。

在强化学习中,DP的核心思想是使用价值函数来结构化地组织对最优策略的搜索。在本章中,我们讨论如何使用DP来计算第3章中定义的价值函数。如前所述,一旦我们得到了满足贝尔曼最优方程的价值函数 v ∗ v_* v q ∗ q_* q,得到最优策略就很容易了。对于任意 s ∈ S 、 a ∈ A ( s ) 、 r ∈ R 和 s ′ ∈ S + s \in S、a \in A(s)、r \in R 和s' \in S^+ sSaA(s)rRsS+,有
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 ′ ) ] \begin{aligned} v_*(s)&=max_a\mathbb{E}[R_t+1+\gamma v_*(S_{t+1})|S_t=s,A_t=a] \\&=max_a\sum_{s',r}p(s',r|s,a)[r+\gamma v_*(s')] \end{aligned} v(s)=maxaE[Rt+1+γv(St+1)St=s,At=a]=maxas,rp(s,rs,a)[r+γv(s)]

q ∗ ( s , a ) = E [ R t + 1 + γ m a x a ′ q ∗ ( S t + 1 , a ′ ) ∣ S t = a , A t = a ] = ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ m a x a ′ q ∗ ( s ′ , a ′ ) ] , \begin{aligned} q_*(s,a)&=\mathbb{E}[R_{t+1}+\gamma max_{a'}q_*(S_{t+1,a'})|S_t=a,A_t=a] \\&=\sum_{s',r}p(s',r|s,a)[r+\gamma max_{a'}q_*(s',a')], \end{aligned} q(s,a)=E[Rt+1+γmaxaq(St+1,a)St=a,At=a]=s,rp(s,rs,a)[r+γmaxaq(s,a)],
由上可见,通过将贝尔曼方程转化成近似逼近理想价值函数的递归更新公式,我们就得到了DP算法

4.1 策略评估(预测)

首先,我们思考对于任意一个策略π,如何计算其状态价值函数 v π v_\pi vπ,这在DP文献中被称为策略评估。我们有时也称其为预测问题。回顾第3章的内容,对于任意 s ∈ S s \in S sS
v π ( s ) ≐ E π [ G t ∣ S t = s ] = E π [ R t + 1 + γ G t + 1 ∣ S t = s ] = E π [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s ] = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v π ( s ′ ) ] ,  for all  s ∈ S \begin{aligned} v_{\pi}(s) & \doteq \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] \\ &=\mathbb{E}_{\pi}\left[R_{t+1}+\gamma v_\pi(S_{t+1}) \mid S_{t}=s\right] \\ &=\sum_{a} \pi(a \mid s) \sum_{s^{\prime}, r} p\left(s^{\prime}, r \mid s, a\right)\left[r+\gamma v_{\pi}\left(s^{\prime}\right)\right], \quad \text { for all } s \in \mathcal{S} \end{aligned} vπ(s)Eπ[GtSt=s]=Eπ[Rt+1+γGt+1St=s]=Eπ[Rt+1+γvπ(St+1)St=s]=aπ(as)s,rp(s,rs,a)[r+γvπ(s)], for all sS
理论上, v π ( s ) v_\pi(s) vπ(s)可以被直接求解,但是计算过程有些烦琐。所以我们使用迭代法来解决此问题。下一轮迭代的近似使用 v π v_\pi vπ的贝尔曼方程进行更新,对于任意 s ∈ S s \in S sS
v k + 1 ( s ) ≐ E π [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s ] = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v k ( s ′ ) ] \begin{aligned} v_{k+1}(s) & \doteq \mathbb{E}_{\pi}\left[R_{t+1}+\gamma v_\pi(S_{t+1}) \mid S_{t}=s\right] \\ &=\sum_{a} \pi(a \mid s) \sum_{s^{\prime}, r} p\left(s^{\prime}, r \mid s, a\right)\left[r+\gamma v_{k}\left(s^{\prime}\right)\right] \end{aligned} vk+1(s)Eπ[Rt+1+γvπ(St+1)St=s]=aπ(as)s,rp(s,rs,a)[r+γvk(s)]
这个算法被称作迭代策略评估

为了从 v k v_k vk得到下一个近似 v k + 1 v_{k+1} vk+1​,迭代策略评估对于每个状态s采用相同的操作:根据给定的策略,得到所有可能的单步转移之后的即时收益和s的每个后继状态的旧的价值函数,利用这二者的期望值来更新s的新的价值函数。我们称这种方法为期望更新。期望更新可以有很多种不同的形式,具体取决于使用状态还是"状态-动作"二元组来进行更新,或者取决于后继状态的价值函数的具体组合方式。在DP中,这些方法都被称为期望更新,这是因为这些方法是基于所有可能后继状态的期望值的,而不是仅仅基于后继状态的一个样本

为了用顺序执行的计算机程序实现迭代策略评估(4式),我们需要使用两个数组:一个用于存储旧的价值函数 v k ( s ) v_k(s) vk(s);另一个存储新的价值函数 v k + 1 ( s ) v_{k+1}(s) vk+1(s)。这样,在旧的价值函数不变的情况下,新的价值函数可以一个接一个地被计算出来。同样,也可以简单地使用一个数组来进行“就地”更新,即每次直接用新的价值函数替换旧的价值函数。在这种情况下,根据状态更新的顺序,(4)式的右端有时会使用新的价值函数,而不是旧的价值函数。这种就地更新的算法依然能够收敛到 v π v_\pi vπ。事实上,由于采用单数组的就地更新算法,一旦获得了新数据就可以马上使用,它反而比双数组的传统更新算法收敛得更快。一般来说,一次更新是对整个状态空间的一次遍历。对于就地更新的算法,便利的顺序对收敛的速率有着很大的影响。在之后我们讨论DP算法时,一般指的是就地更新的版本。

例 4.1

考虑下方的一个4×4的网格图
在这里插入图片描述

非终止状态集合 S = 1 , 2 , . . . , 14 \mathcal{S}={1,2,...,14} S=1,2,...,14。每个状态有四种可能的动作, A = u p , d o w n , r i g h t , l e f t \mathcal{A}={up,down,right,left} A=up,down,right,left。每个动作会导致状态转移,但当动作会导致智能体移出网格时,状态保持不变。比如, p ( 6 , − 1 ∣ 7 , d o w n ) = 1 , p ( 7 , − 1 ∣ 7 , r i g h t ) = 1 p(6,-1|7,down)=1,p(7,-1|7,right)=1 p(6,17,down)=1,p(7,17,right)=1和对于任意 r ∈ R r \in \mathcal{R} rR,都有 p ( 10 , r ∣ 5 , r i g h t ) = 0 p(10,r|5,right)=0 p(10,r5,right)=0。这是一个无折扣的分幕式任务。在到达终止状态之前,所有动作的收益均为-1。终止状态在图中以阴影显示(尽管图中显示了两个格子,但实际仅有一个终止状态)。对于所有的状态s、s’与动作a,期望的收益函数均为 r ( s , a , s ′ ) = − 1 r(s,a,s')=-1 r(s,a,s)=1。假设智能体采取等概率随机策略(所有动作等可能执行)。图4.1(左)显示了在迭代策略评估中价值函数序列{ v k v_k vk}的收敛情况。最终的近似估计实际上就是 v π v_\pi vπ,其值为每个状态到终止状态的步数的期望值,取负。

在这里插入图片描述

图4.1 小型网格上迭代策略评估的收敛情况。左栏是随机策略的状态价值函数的近似值序列(所有操作的可能性相同)。右列是与价值函数估计相对应的贪心策略序列(箭头所指是所有能到达最大值的操作,其数字四舍五入为两位有效数字)。最后的策略只能保证随机策略的改进,但在这种情况下,第三次迭代后,所有策略都是最优的

如果觉得书上讲得比较抽象,只需要看一下GitHub上实现的本书关于gridword的程序,通过debug一步步执行,就可以有一个直观的了解。

练习 4.1

在例4.1 中,如果π是等概率随机策略,那么 q π ( 11 , d o w n ) q_\pi(11,down) qπ(11,down)​是多少? q π ( 7 , d o w n ) q_\pi(7,down) qπ(7,down)​呢?

答:结合图4.1,和公式 q π ( s , a ) = ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + v π ( s ′ ) ] q_\pi(s,a)=\sum_{s',r}p(s',r|s,a)[r+v_\pi(s')] qπ(s,a)=s,rp(s,rs,a)[r+vπ(s)]

q π ( 11 , d o w n ) = 1 × ( − 1 + 0 ) = − 1 , q π ( 7 , s o w n ) = 1 × ( − 1 + v π ( 11 ) ) = − 1 − 14 = 15 q_\pi(11,down)=1 \times(-1+0)=-1,q_\pi(7,sown)=1 \times (-1+v_\pi(11))=-1-14=15 qπ(11,down)=1×(1+0)=1,qπ(7,sown)=1×(1+vπ(11))=114=15

练习4.2

在例4.1中, 假设一个新状态15加入到状态13的下方。从状态15开始,采取策略left、up、right和down,分别到达状态12、13、14和15。假设从原来的状态转出的方式不变(也就是说13采取down仍然在13的位置),那么 v π ( 15 ) v_\pi(15) vπ(15)在等概率随机策略下是多少?如果状态13的动态特性产生变化,使得采取动作down时会到达这个新状态15,这时候 v π ( 15 ) v_\pi(15) vπ(15)在等概率随机策略下是多少?

答:根据图4.1左列最后一个收敛的 v k v_k vk子图, v π ( 15 ) = − 1 − 22 − 1 − 20 − 1 − 14 − 1 + v π ( 15 ) 4 v_\pi(15)=\frac{-1-22-1-20-1-14-1+v_\pi(15)}{4} vπ(15)=41221201141+vπ(15),解得 v π ( 15 ) = − 20 v_\pi(15)=-20 vπ(15)=20

当状态13的动态特性产生变化,重新计算 v π ( 13 ) v_\pi(13) vπ(13):

v π ( 13 ) = 1 4 ( − 1 − 22 − 1 − 20 − 1 − 14 − 1 − 20 ) = − 20 v_\pi(13)=\frac{1}{4} (-1-22-1-20-1-14-1-20)=-20 vπ(13)=41(122120114120)=20,保持不变

(标答:但你需要验证所有状态下的贝尔曼方程)

练习 4.3

对于动作价值函数 q π q_\pi qπ以及其逼近序列函数 q 0 , q 1 , q 2 , . . . , q_0,q_1,q_2,..., q0,q1,q2,...,类似于式(4)的公式是什么?

答:上一章练习3.13回答过 q π q_\pi qπ的贝尔曼方程,

q k + 1 ( s , a ) = ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ ∑ a ′ π ( a ′ ∣ s ′ ) q k ( s ′ , a ′ ) ] q_{k+1}(s,a)=\sum_{s',r}p(s',r|s,a)[r+\gamma \sum_{a'} \pi(a'|s')q_k(s',a')] qk+1(s,a)=s,rp(s,rs,a)[r+γaπ(as)qk(s,a)]

(标答也许有点小错误,策略函数应该是s’而不是s)

4.2 策略改进

对于某个状态s,选择一个不同于给定的策略的动作 a ≠ π ( s ) a \neq \pi(s) a=π(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 ′ ) ] \begin{aligned} q_\pi(s,a) &\doteq \mathbb{E}[R_{t+1}+\gamma v_\pi(S_{t+1})|S_t=s,A_t=a)] \\&=\sum_{s',r}p(s',r|s,a)[r+\gamma v_\pi(s')] \end{aligned} qπ(s,a)E[Rt+1+γvπ(St+1)St=s,At=a)]=s,rp(s,rs,a)[r+γvπ(s)]
(这个公式以前出现过)

这个值是大于还是小于 v π ( s ) v_\pi(s) vπ(s)?要不要换策略?

上述情况是策略改进定理的一个特例。一般来说,如果π和π’是任意的两个确定策略,对任意 s ∈ S s \in S sS,
q π ( s , π ′ ( s ) ) ≥ v π ( s ) . q_\pi(s,\pi'(s)) \geq v_\pi(s). qπ(s,π(s))vπ(s).
那么我们称策略π’相比于π更好或一样好。对任意 s ∈ S s \in S sS,有期望回报
v π ′ ( s ) ≥ v π ( s ) . v_{\pi'}(s) \geq v_\pi(s). vπ(s)vπ(s).
当等式不成立,π’严格优于π 。

对于所有状态和所有可能的动作,在每个状态下根据 q π ( s , a ) q_\pi(s,a) qπ(s,a)选择一个最优的。换言之,考虑一个新的贪心策略 π ′ \pi' π,满足
π ′ ( 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 ) ] = a r g m a x a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v π ( s ′ ) ] , \begin{aligned} \pi'(s)&=argmax_a q_\pi(s,a) \\&=argmax_a \mathbb{E}[R_{t+1}+\gamma v_\pi(S_{t+1}|S_t=s,A_t=a)] \\&=argmax_a \sum_{s',r}p(s',r|s,a)[r+\gamma v_\pi(s')], \end{aligned} π(s)=argmaxaqπ(s,a)=argmaxaE[Rt+1+γvπ(St+1St=s,At=a)]=argmaxas,rp(s,rs,a)[r+γvπ(s)],
这种根据原策略的价值函数执行贪心算法,来构造一个更好策略的过程,我们称为策略改进

通过(8)式可以得到,对任意 s ∈ S s \in \mathcal{S} sS
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 ′ ) ] , \begin{aligned} v_\pi'(s)&=max_a \mathbb{E}[R_{t+1}+\gamma v_{\pi'}(S_{t+1}|S_t=s,A_t=a)] \\&=max_a \sum_{s',r}p(s',r|s,a)[r+\gamma v_{\pi'}(s')], \end{aligned} vπ(s)=maxaE[Rt+1+γvπ(St+1St=s,At=a)]=maxas,rp(s,rs,a)[r+γvπ(s)],
但这和贝尔曼最优方程完全相同((1)式),因此 v π ′ v_{\pi'} vπ一定与 v ∗ v_* v相同,而且π与π’均必须为最优策略。因此在除了原策略即为最优策略的情况下,策略改进一定会给出一个更优的结果。

到目前为止,我们考虑的都是一种特殊情况,即确定性策略。一般来说,一个随机策略π指定了在状态s采取a的概率 π ( a ∣ s ) \pi(a|s) π(as)。我们不会再对此做详细说明,但事实上本节的方法可以很容易地扩展到随机策略中。特别地,策略改进定理在随机策略的情况下也是成立的。

4.3 策略迭代

一旦一个策略π根据 v π v_\pi vπ产生了一个更好的策略 π ′ \pi' π,我们就可以通过计算 v π ′ v_{\pi'} vπ来得到一个更优的策略π‘’。这样一个链式的方法可以得到一个不断改进的策略和价值函数的序列

π 0 ⟶ E v π 0 ⟶ I π 1 ⟶ E v π 1 ⟶ I π 2 ⟶ E ⋯ ⟶ I π ∗ ⟶ E v ∗ \pi_{0} \stackrel{\mathrm{E}}{\longrightarrow} v_{\pi_{0}} \stackrel{\mathrm{I}}{\longrightarrow} \pi_{1} \stackrel{\mathrm{E}}{\longrightarrow} v_{\pi_{1}} \stackrel{\mathrm{I}}{\longrightarrow} \pi_{2} \stackrel{\mathrm{E}}{\longrightarrow} \cdots \stackrel{\mathrm{I}}{\longrightarrow} \pi_{*} \stackrel{\mathrm{E}}{\longrightarrow} v_{*} π0Evπ0Iπ1Evπ1Iπ2EIπEv

这里 ⟶ E \stackrel{\mathrm{E}}{\longrightarrow} E代表策略评估,而 ⟶ I \stackrel{\mathrm{I}}{\longrightarrow} I代表策略改进。每一个策略都能保证比前一个更优(除非前一个已经是最优的)。由于一个有限MDP必然只有有限种策略,所以在有限次的迭代后,这种方法一定收敛到一个最优的策略与最优价值函数。

这种寻找最优策略的方法叫做策略迭代,下面给出了完整的算法描述。注意,每一次策略评估都是一个迭代计算过程,需要基于前一个策略的价值函数开始计算。这通常会使得策略改进的收敛速度大大提高(很可能是因为从一个策略到另一个策略时,价值函数的改变比较小)。

策略迭代令人惊讶的是,它在几次迭代中就能收敛,如杰克租车问题和图4.1.图4.1的左下图显示了等概率随机策略的价值函数,而右下图则是这种价值函数的贪心策略。策略改进定理保证了每一个新策略都比原随机策略更优。

例 4.2 杰克租车问题

杰克管理一家有两个地点的租车公司,租出一辆车获得10美元收益。租出去的汽车在还车的第二天变得可用。为了保证每辆车在需要的地方使用,杰克在夜间在两个地点之间移动车辆,移动车辆的代价为2美元。我们假设每个地点租车与还车的数量是一个泊松随机变量,即数量为n的概率为 λ n n ! e − λ \frac{\lambda^n}{n!}e^{-\lambda} n!λneλ,其中 λ \lambda λ是期望值。假设租车的 λ \lambda λ是在两个地点分别为3和4,而还车的 σ \sigma σ分别为3和2。为了简化问题,我们假设任何一个地点有不超过20辆车,即额外的车会被直接退到全国总公司,所以在这个问题中就意味着自动消失),并且每天最多移动5辆车。我们令折扣率 γ = 0.9 \gamma=0.9 γ=0.9,并将它描述为一个持续的有限MDP,其中时刻按天计算,状态为每天结束时每个地点的车辆数,动作则为夜间在两个地点间移动的车辆数。图4.2显示了策略迭代的策略序列,该策略从不移动任何车辆开始。

在这里插入图片描述

图 4.2 在杰克租车问题中,策略迭代得到的策略序列以及最终的状态价值函数。前五幅图显示了在一天结束时,在每种状态下(即两地分别的车辆数),从第一地点移动到第二地点的车辆数(负责表示从第二地点转移到第一地点),即采取的动作。每个后继策略都是对之前策略的严格改进,并且最后的策略是最优的。

在这里插入图片描述

练习 4.4

上面这个策略迭代算法存在一个小问题,即如果在两个或多个同样好的策略之间不断切换,则它可能永远不会终止。所以上面的算法对于教学没有问题,但不适用于实际应用。请修改伪代码以保证其收敛。

答:我觉得是在策略改进这部分,加上策略评估。通过 △ \triangle 来判断迭代停止。

标答:

一个问题是, a r g m a x a argmax_a argmaxa打破了策略之间的联系,这意味着相同的值函数可以产生不同的策略。
解决此问题的方法是更改算法,以便在每个步骤上执行整组最大操作,并查看此集是否稳定,并查看策略在从此集合中选择操作方面是否稳定。

练习 4.5

如何为动作价值定义策略迭代?请用类似于这里给出的关于 v ∗ v_* v的算法写出关于 q ∗ q_* q的完整算法。请特别注意这个练习,因为本书其他部分会使用到这个算法。

标答:

我们知道:

v π ( s ) = ∑ a ∈ A ( s ) π ( a ∣ s ) q π ( s , a ) v_\pi(s)=\sum_{a \in A(s)} \pi(a|s) q_\pi(s,a) vπ(s)=aA(s)π(as)qπ(s,a)​,

所以

q π ( s , π ′ ( s ) ) ≥ ∑ a ∈ A ( S ) π ( a ∣ s ) q π ( s , a ) q_\pi(s,\pi'(s)) \geq \sum_{a \in A(S)} \pi(a|s) q_\pi(s,a) qπ(s,π(s))aA(S)π(as)qπ(s,a)

现在要做的就是用更新替换动作值更新,并使策略相对于上次迭代的动作值变得贪婪。 还需要确保 a r g m a x a argmax_a argmaxa始终如一地完成。(?)

练习 4.6

假设只能考虑 ϵ \epsilon ϵ-柔性策略,即在每个状态s中选择每个动作的概率至少为 ϵ / ∣ A ( s ) ∣ \epsilon/|A(s)| ϵ/A(s)。请定性描述在 v ∗ v_* v的策略迭代算法中,步骤3、步骤2和步骤1所需的更改。

标答:

  1. 不需要改变(但是需要将策略变为随机的而不是确定的)
  2. 需要将贝尔曼方程完善为: v ( s ) ← ∑ a ∈ A ( s ) π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v ( s ′ ) ] v_(s)\leftarrow \sum_{a \in A(s)} \pi(a|s) \sum_{s',r} p(s',r|s,a)[r+\gamma v(s')] v(s)aA(s)π(as)s,rp(s,rs,a)[r+γv(s)]
  3. 构造一个对贪婪行为施加权重但ε-soft的贪婪策略。注意 a r g m a x argmax argmax的一致性。(?)

练习 4.7(编程)

编写一个策略迭代的程序,并解决下面这个更改过的杰克租车问题。杰克的一个员工在第一个地点工作,每晚坐公交车到第二个地点附近的家。她乐于免费将一辆车从第一个地点移动到第二个地点。其他额外的车辆移动,包括反方向的任何移动仍然耗费2美元。另外,杰克的停车空间是有限的,如果在某一个地点过夜的车辆(车辆移动后)超过10辆,他需要在另一个停车场支付4美元(无论停多少辆车)来停车。这种非线性、动态性的情况经常出现在实际问题中,且这类问题很难用动态规划以外的方法解决。为了检查你的程序,请先复现原问题的解。

答:源程序是通过设置初始状态函数值为20×20的0矩阵,策略也为一个20×20的0矩阵。首先进行策略估计,即计算每个状态采取当前策略的价值函数,更新每个状态的价值函数,直到价值函数收敛。然后进行策略更新,对每个状态,依次采取策略,计算该策略下的价值函数,取价值函数最大的那个策略,作为新的策略,直到每个状态的最优策略都计算完毕。如果当前策略矩阵和上一次策略更新后的矩阵不同,进行下一次迭代,否则,已经找到最优策略和最优价值函数。

下一次迭代时,由于策略已经改变,重新计算价值函数,直到价值函数的变化值小于某个非常小的数,然后进入到策略更新的阶段,对每个状态,重新计算不同策略的价值函数,取价值函数值最大的策略为当前状态对应的最优策略,得到一个新的策略矩阵,查看是否与上一次策略矩阵相同,相同则停止迭代,不相同则进行下一次迭代。

结果:

当租车需求服从泊松分布,而还车需求是确定的,画出热图:

在这里插入图片描述

当租车需求的还车需求都服从泊松分布,运行时间太长…以后再更新吧

4.4 价值迭代

策略迭代的一个缺点是每一次迭代都涉及了策略评估,这本身就是一个需要多次遍历状态集合的迭代过程。如果策略评估是迭代进行的,那么收敛到 v π v_\pi vπ​理论上在极限处才成立。图4.1的例子很明显地说明,我们可以提前截断策略评估过程。在这个例子中,前三轮策略评估之后的迭代对其贪心策略没有任何影响。

事实上,有多种方式可以截断策略迭代中的策略评估步骤,并且不影响其收敛。一种重要的特殊情况是,在一个遍历后即刻停止策略评估(对每个状态进行一次更新)。该算法被称为价值迭代。可以将此表示为结合了策略改进与截断策略评估的简单更新公式。对任意 s ∈ S s \in \mathcal{S} sS,
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 ′ ) ] \begin{aligned} v_{k+1}(s)&\doteq \underset{a}{max}\mathbb{E}[R_{t+1}+\gamma v_k(S_{t+1}|S_t=s,A_t=a)] \\&=\underset{a}{max} \sum_{s',r}p(s',r|s,a)[r+\gamma v_k(s')] \end{aligned} vk+1(s)amaxE[Rt+1+γvk(St+1St=s,At=a)]=amaxs,rp(s,rs,a)[r+γvk(s)]
可以证明,对任意 v 0 v_0 v0,在 v ∗ v_* v存在的条件下,序列$ {v_k} 都 可 以 收 敛 到 都可以收敛到 v_*$。

另一种理解价值迭代的方法是借助贝尔曼最优方程(见式4.1)。值得注意的是,价值迭代仅仅是将贝尔曼最优方程变为一条更新规则。另外除了从达到最大值的状态更新以外,价值迭代与策略评估的更新公式(5式)几乎完全相同。另一种观察它们紧密关系的方法是比较第57页算法的回溯图(策略评估)和图3.4(左图)(价值迭代)。它们是计算 v π v_\pi vπ v ∗ v_* v的自然的回溯操作。

在这里插入图片描述

$v_\pi$的回溯图

在这里插入图片描述

$v_*$的回溯图

最后,我们考虑价值迭代如何终止。和策略评估一样,理论上价值迭代需要迭代无限次才能收敛到 v ∗ v_* v。事实上,如果一次遍历中价值函数仅仅有细微的变化,那么我们就可以停止。下面给出了一个使用该终止条件的完整算法。

在每一次遍历中,价值迭代都有效结合了策略评估的遍历和策略改进的遍历。在每次策略改进遍历的迭代中间进行多次策略评估遍历经常收敛得更快。一般来说,可以将截断策略迭代算法看作一系列的遍历序列,其中某些进行策略评估更新,而另一些则进行价值迭代更新。由于式(10)中max操作是这两种更新方式惟一的区别,这就意味着我们仅仅需要将max操作加入部分的策略评估遍历过程中即可。这些算法在带折扣的有限MDP中均会收敛到最优策略。

在这里插入图片描述

例 4.3 赌徒问题

一个赌徒下注猜测一系列抛硬币实验的结果。如果硬币正面朝上,他获得这一次下注的钱;如果背面朝上则失去这一次下注的钱。这个游戏在赌徒达到获利目标100美元或者全部输光时结束。每一次抛硬币,赌徒必须从他的赌资中选取一个整数来下注。可以将这个问题表示为一个非折扣的分幕式有限MDP。**状态为赌徒的赌资 s ∈ 1 , 2 , . . . , 99 s \in {1,2,...,99} s1,2,...,99,动作为赌徒下注的金额 a ∈ 0 , 1 , . . . , m i n ( s , 100 − s ) a \in {0,1,...,min(s,100-s)} a0,1,...,min(s,100s)。收益一般情况下均为0,只有在赌徒达到获利100美元的终止状态时为+1。状态价值函数给出了在每个状态下赌徒获胜的概率。这里的策略是赌资到赌注的映射。最优策略将会最大化这个概率。**令 p h p_h ph为抛硬币正面向上的概率。如果 p h p_h ph已知,那么整个问题可以由价值迭代或其他类似算法解决。图4.3显示了在价值迭代遍历过程中价值函数的变化,以及在 p h = 0.4 p_h=0.4 ph=0.4时最终找到的策略。这个策略是最优的,但并不是唯一的。事实上存在一系列的最优策略,具体取决于在argmax函数相等时的动作选取。你能猜测一下这一系列的最优策略是什么样子吗?

在这里插入图片描述

图4.3 赌徒问题的解决方法$ (p_h=0.4)$。上图显示了价值迭代连续遍历得到的价值函数。下图显示了最后的策略。

猜测:

π ( a ∣ s ) \pi_(a|s) π(as)

π 1 ( 赌 注 1 ∣ 赌 资 99 ) \pi_1(赌注1|赌资99) π1(199)

π 2 ( 赌 注 50 ∣ 赌 资 50 ) \pi_2(赌注50|赌资50) π2(5050)

π 3 ( 赌 注 25 ∣ 赌 资 25 ) \pi_3(赌注25|赌资25) π3(2525)

练习4.8

为什么赌徒问题的最优策略是一个如此奇怪的形式?特别是,当赌资为50时,他会选择全部投注,而当赌资为51时却不是这样。为什么这是一个好的策略?

答:是不是因为题目设置的终止状态为100美元(而不是大于100美元?)

根据程序运算结果,赌资为50时,全部投注的动作状态价值为: 0.4 × 1 + 0.6 × 0 = 0.4 0.4 \times 1+0.6 \times 0=0.4 0.4×1+0.6×0=0.4,如果是其他赌注,比如1,动作状态价值为 0.4 × 0.40775 + 0.6 × 0.37622 = 0.388832 0.4 \times 0.40775 + 0.6 \times 0.37622=0.388832 0.4×0.40775+0.6×0.37622=0.388832​,对于其他赌注也是如此,都会小于0.4,所以选择全部投注。

赌资为51时,最大赌注(不能全部投注,根据规则最多投注49)的动作状态价值为 0.4 × 1 + 0.6 × 0.00516 = 0.403096 0.4 \times 1+0.6 \times 0.00516=0.403096 0.4×1+0.6×0.00516=0.403096​,而赌资1的动作状态价值为 0.4 × 0.4 + 0.6 × 0.40774 = 0.404644 0.4 \times 0.4+0.6 \times 0.40774=0.404644 0.4×0.4+0.6×0.40774=0.404644​,比最大赌注的要大,所以它不会全部投注。

标答:

因为硬币有偏,我们想要最小化抛硬币的次数(why?)。当赌资为50,我们获胜的概率是0.4。在51点,如果我们押小赌注,我们可以得到52点,但如果我们输了,我们仍然只能回到50点,我们再次回到50点的概率是0.4(不是0.6吗?)。(关于这个问题有一篇论文叫做《如果你必须的话,如何赌博》。)

练习 4.9(编程)

编写程序,使用价值迭代解决当 p h = 0.25 p_h=0.25 ph=0.25​和 p h = 0.55 p_h=0.55 ph=0.55​时的赌徒问题。在编程时,你可以为了方便加入赌资为0和100的两个虚拟状态,其值分别为0与1(什么值?)。将你的结果如图4.3一样图形化给出。当 θ − > 0 \theta ->0 θ>0​时,你的结果是否稳定?

答: p h = 0.25 p_h=0.25 ph=0.25

在这里插入图片描述

p h = 0.55 p_h=0.55 ph=0.55

在这里插入图片描述

可以看出迭代了很多次…

上面设置的 θ = 1 0 − 9 \theta=10^{-9} θ=109,比较接近0了,试了 p h = 0.6 p_h=0.6 ph=0.6,和 p h = 0.55 p_h=0.55 ph=0.55差不多。

练习 4.10

与价值迭代更新公式(4.10)类似的动作价值函数 q k + 1 ( s , a ) q_{k+1}(s,a) qk+1(s,a)更新公式是什么?

标答:

q k + 1 ( s , a ) = m a x a ′ ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ q k ( s ′ , a ′ ) ] q_{k+1}(s,a)=max_{a'}\sum_{s',r}p(s',r|s,a)[r+\gamma q_k(s',a')] qk+1(s,a)=maxas,rp(s,rs,a)[r+γqk(s,a)]

4.5 异步动态规划

我们之前讨论过的DP方法的一个主要缺点是,它们涉及对MDP的整个状态集的操作,也就是说,它们需要对整个状态集进行遍历。如果状态集很大,那么即使是单次遍历也会十分昂贵。比如,西洋双陆棋有 1 0 20 10^{20} 1020多个状态。即使我们可以每秒对100万个状态进行价值迭代更新,完成一次遍历仍将需要一千多年的时间…

异步DP算法是一类就地迭代的DP算法,其不以系统遍历状态集的形式来组织算法。**这些算法使用任意可用的状态值,以任意顺序来更新状态值。**在某些状态的值更新一次之前,另一些状态的值可能已经更新了好几次。然而,为了正确收敛,异步算法(是不是写错了,是同步算法吧?)必须要不断地更新所有状态的值:在某个计算节点后,它不能忽略任何一个状态。在选择要更新的状态方面,异步DP算法具有极大的灵活性。

我们可以试着通过选择一些特定状态来更新,从而加快算法的速度。我们也可以试着调整更新的顺序,使得价值信息更有效地在状态间传播。如果某些状态与最优行为无关,我们甚至可以跳过它。

异步算法还使计算和实时交互的结合变得更加容易。为了解决给定的MDP问题,我们可以在一个智能体实际在MDP中进行真实交互的同时,执行迭代DP算法。这个智能体的经历可用于确定DP算法要更新哪个状态。与此同时,DP算法的最新值和策略信息可以指导智能体的决策。比如,我们可以在智能体访问状态时将其更新。这使得将DP算法的更新聚焦到部分与智能体最相关的状态集成为可能。这种聚焦是强化学习中不断重复的主题。

4.6 广义策略迭代

策略迭代包括两个同时进行的相互作用的流程,一个使得价值函数与当前策略一致(策略评估),另一个根据当前价值函数贪心地更新策略(策略改进)。在策略迭代中,这两个流程交替进行,每个流程都在另一个开始前完成。但这也不是必须的,例如,我们可以在每两次策略改进之间执行一次策略评估迭代,而不是一直迭代到收敛。在异步DP方法中,评估和改进流程则以更细的粒度交替进行。在某些特殊情况下,甚至有可能仅有一个状态再评估流程中得到更新,然后马上就返回到改进流程。但只要两个流程持续更新所有状态,那么最后的结果通常是相同的,即收敛到最优价值函数和一个最优策略。

我们用广义策略迭代(GPI)一词来指代让策略评估和策略改进相互作用的一般思路,与这两个流程的粒度和其他细节无关。几乎所有的强化学习方法都可以被描述为GPI。也就是说,几乎所有方法都包含明确定义的策略和价值函数,且如下图所示,策略总是基于特定的价值函数进行改进,价值函数也始终会向对应特定策略的真实价值函数收敛。

在这里插入图片描述
可以将GPI的评估和改进流程看作竞争与合作。竞争表现为让策略对价值函数贪心通常会使价值函数与当前策略不匹配,而使价值函数与策略一致通常导致该策略不再最优(贪心)。然而从长远看,这两个流程会相互作用以找到一个联合解决方案:最优价值函数和一个最优策略。

我们也可以将GPI的评估和改进流程视为两个约束或目标之间的相互作用的流程,如下图所示的二维空间中的两条线。

在这里插入图片描述

4.7 动态规划的效率

DP算法也许对一些规模很大的问题并不是非常适用,但是和其他解决马尔科夫决策过程的方法相比,DP算法实际上效率很高。对于那些极大规模的问题,只有动态规划算法是可行的。

DP算法有时会由于维度灾难而被认为缺乏实用性。维度灾难指的是,状态的总数量经常随着状态变量的增加而指数级上升。(状态是一个向量,而状态变量是当中的元素?)状态集合太大的确会带来一些困难,但是这些是问题本身的困难,而非DP作为一种解法所带来的困难。事实上,相比于直接搜索(穷举每一种策略)和线性规划,DP更加适合于解决大规模状态空间的问题。

对于那些有很大状态空间的问题,我们通常使用异步DP算法。同步的算法仅仅完成一次遍历,就需要计算和存储每一个状态。对于某些问题来说,如此大的存储与计算量是不切实际的。但这些问题仍然是可解的,因为往往只有相对较少的状态会沿着最优解的轨迹出现。可以在这样的情况下应用异步方法以及GPI的一些变种,它们可能比同步方法更快地找到好的甚至最优的策略。

4.8 本章小结

在这一章中,我们熟悉了利用动态规划方法解决有限马尔科夫决策过程的基本思想和算法。策略评估通常指的是对一个策略的价值函数进行迭代计算。策略改进指的是给定某个策略的价值函数,计算一个改进的策略。将这两种计算统一在一起,我们得到了策略迭代价值迭代,这也是两种最常用的DP算法。这两种方法中的任意一种都可以在给定马尔科夫决策过程完整信息的条件下,计算出有限马尔科夫决策过程的最优策略和价值函数

传统的DP方法要遍历曾哥状态集合,并对每一个状态进行期望更新操作。每一次操作都基于所有可能的后继状态的价值函数以及它们可能出现的概率,来更新一个状态的价值。期望更新与贝尔曼方程关系密切:只不过是将那些等式变为赋值语句而已。当更新对结果不再产生数值上的变化时,就表示已经收敛并满足对应的贝尔曼方程。我们有四个基本价值函数( v ∗ , v π , q π 和 q ∗ v_*,v_\pi,q_\pi和q_* v,vπ,qπq),也有四个相应的贝尔曼方程和四个对应的期望更新。它们对应的回溯图就是DP更新操作的一种直观的表达。

广义策略迭代(GPI)的视角来分析,我们可以对DP算法和几乎所有的强化学习算法的本质有更深的理解。GPI的主要思想是采用两个相互作用的流程围绕着近似策略和近似价值函数循环进行。一个流程根据给定的策略进行策略评估,使得价值函数逼近这个策略的真实的价值函数。另一个流程根据给定的价值函数进行策略改进,在假设价值函数固定的条件下,使得这个策略更好。尽管每一个流程都改变了另一个流程,但它们的相互作用总体上可以一起找到一个联合的解:不会被任意一个流程改变的策略和价值函数,即最优解。在某些情况下,GPI可以被证明是收敛的,尤其是我们在本章中提到的传统DP算法。在其他情况下,收敛性并不能被证明,但是广义策略迭代的思想仍然可以加深我们对这个方法的理解。

有时我们并不需要用DP算法来遍历整个状态集合。异步DP算法就是一种以任意顺序更新状态的就地迭代方法,更新顺序甚至可以随机确定并可以使用过时的信息。其中许多方法可以被看做GPI的细粒度形式。

最后,我们注意到DP算法的一个特殊性质。所有的方法都依据对后继状态价值的估计,来更新对当前状态价值的估计。也就是说,他们基于其他估计来更新自己的估计。我们不像DP一样需要完整而准确的环境模型的算法也是如此。

个流程,但它们的相互作用总体上可以一起找到一个联合的解:不会被任意一个流程改变的策略和价值函数,即最优解。在某些情况下,GPI可以被证明是收敛的,尤其是我们在本章中提到的传统DP算法。在其他情况下,收敛性并不能被证明,但是广义策略迭代的思想仍然可以加深我们对这个方法的理解。

有时我们并不需要用DP算法来遍历整个状态集合。异步DP算法就是一种以任意顺序更新状态的就地迭代方法,更新顺序甚至可以随机确定并可以使用过时的信息。其中许多方法可以被看做GPI的细粒度形式。

最后,我们注意到DP算法的一个特殊性质。所有的方法都依据对后继状态价值的估计,来更新对当前状态价值的估计。也就是说,他们基于其他估计来更新自己的估计。我们不像DP一样需要完整而准确的环境模型的算法也是如此。

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值