强化学习入门3—动态规划

326 阅读6分钟

这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战

本文为强化学习入门系列的第三篇,主要介绍如何通过动态规划来求解贝尔曼最优方程。

我们知道最优策略 π\pi 对应的就是最优价值函数,而其求解分为策略迭代、价值迭代两种方法。本节将详细介绍这两种方法。

本节所讨论的MDP都是已知的MDP。已知的意思就是环境的动态特性是已知的,也就是 p(s,as,a)p(s',a | s,a) 这个概率密度函数是确定的。

策略迭代

策略迭代可以分为策略评估和策略改进两步骤。策略评估就是给定一个策略 π\pi 求解状态价值函数 vπ(s)v_{\pi}(s) ,而策略改进就是寻求一个更优的策略 π\pi',使得 vπ(s)>vπ(s)v_{\pi'}(s)>v_{\pi}(s)

策略评估 Policy Evaluation

解析解推导

策略评估就是给定一个策略 π\pi 求解贝尔曼方程 vπ(s)v_{\pi}(s) 。我们知道贝尔曼方程有如下形式:

vπ(s)=aπ(as)s,rp(s,rs,a)[r+γvπ(s)]    ,sSv_{\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),vπ(s)v_{\pi}(s),v_{\pi'}(s) 看成未知的,那其实可看出 vπ(s),vπ(s)v_{\pi}(s),v_{\pi'}(s) 之间是线性关系。因为状态 ss 是有多个,所以 vπ(s)v_{\pi}(s) 可写成向量形式:

vπ(s)=[vπ(s1)vπ(s2)...vπ(sS)]S×1v_{\pi}(s)= \begin{bmatrix} v_{\pi}(s_1)\\v_{\pi}(s_2)\\...\\v_{\pi}(s_S) \end{bmatrix}_{|S|\times1}

那问题实际上就是求解一个有 S|S| 个未知量的线性方程组。我们用矩阵来表示 vπ(s),vπ(s)v_{\pi}(s),v_{\pi'}(s) 之间的关系,显然矩阵应该是 S×SS\times S 维的。那接下来我们进一步化简方程组,方程组可拆开成如下两部分:

vπ(s)=aπ(as)s,rp(s,rs,a)r+aπ(as)s,rp(s,rs,a)γvπ(s)    ,sSv_{\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

观察式子左边项,其实ss'可以被积分掉,也就变成 rp(rs,a)r\sum_{r}p(r|s,a)r ,这就是一个期望的形式,把它定义成一个奖励函数 r(s,a)r(s,a),表示给定策略 π\pi 下,状态 ss 下采取动作 aa 时的期望奖励。那左边项就变成 aπ(as)r(s,a)\sum_a \pi(a|s)\cdot r(s,a)。我们知道 π\pi 是关于a的一个概率分布,那对a积分,则可以把a消掉,左边项最终可以写成 rπ(s)r_{\pi}(s)rπ(s)r_{\pi}(s) 是一个 S×1|S|\times 1 的矩阵。

再来观察式子右边项,γ\gamma 是一个常数,把r积分掉,则变成 γasπ(as)p(ss,a)vπ(s)\gamma \sum_a \sum_{s'}\pi(a|s)p(s'|s,a)v_{\pi}(s'),令 Pπ(s,s)=asπ(as)p(ss,a)P_{\pi}(s,s')=\sum_a \sum_{s'}\pi(a|s)p(s'|s,a),表示状态 s,ss,s' 之间的转移概率矩阵,维度为 S×S|S|\times |S|。那么右边项最终可写成 γPπ(s,s)vπ(s)\gamma P_{\pi}(s,s')v_{\pi}(s')

最后,式子化简为:

vπ(s)=rπ(s)+γPπ(s,s)vπ(s)vπ(si)=rπ(si)+γj=1SPπ(si,sj)vπ(sj)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π=(IγPπ)1rπv_{\pi}=(I-\gamma P_{\pi})^{-1}r_{\pi}

这个就是解析解。显然是一个 S×1|S|\times 1 维的矩阵。由于涉及到矩阵运算,时间复杂度为 O(S3)O(|S|^3)

数值解推导

解析解涉及矩阵运算,计算量较大,我们可以通过迭代求数值解。我们构造一个数列 {vk(s)},k[1,]\{v_k(s)\},k\in[1,\infty]。其中 vkv_k 时包含 S|S| 个状态价值函数的函数向量。vkvk+1v_k、v_{k+1} 根据贝尔曼方程我们可以写出其迭代关系:

vk+1(s)=Eπ[Rt+1+γGt+1    St=s]=Eπ[Rt+1+γvk(s)    St=s]=aπ(as)s,rp(s,rs,a)[r+γvk(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}

其实 v1,v2,...,vkv_1,v_2,...,v_{k} 是通过迭代求得的价值函数的近似解,我们的目标就是使其收敛到 vπv_{\pi}。这个v1v_1是先通过随机动作来确定的,也就是一个随机的初始函数向量。

数值解推导过程图解.jpg

策略改进

当我们能估计 π\pi' 时,我们想知道与当前策略 π\pi 哪个好,就需要比较 vπ,vπv_{\pi},v_{\pi'}。这就引出了策略改进定理。

策略改进定理 policy improvement theorem

【定义】给定 π,π\pi,\pi',如果对于任意状态s,有 qπ(s,π(s))vπ(s)q_{\pi}(s,\pi'(s))\geq v_{\pi}(s),则 sS,vπ(s)vπ(s)\forall s\in S,v_{\pi'}(s)\geq v_{\pi}(s)

这个定理把原先需要求两个状态价值函数变成只需求一个 vπ(s)v_{\pi}(s) 就好。

那如何证明?

我们先回顾动作价值函数:

qπ(s,a)=E[Rt+1+γvπ(St+1)    St=s,At=a]=s,rp(s,rs,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')]

值得注意的是,Rt+1R_{t+1}π\pi 其实是无关的,因为在(s,a)时,平均奖励 Rt+1R_{t+1} 已经获得了,而 π\pi 影响的是下一时刻的状态 st+1s_{t+1} 对于动作的选择,Rt+2R_{t+2}π\pi 才有关。

我们把 π(s)\pi'(s) 代入动作 aa,表示 tt 时刻的动作是由 π\pi' 确定的,下一时刻的动作还是由 π\pi 确定,所以 Rt+1R_{t+1}π\pi' 有关,之后的奖励和 π\pi 有关,推导过程如下:

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+γ2qπ(St+2,π(St+2))    St=s]Eπ[Rt+1+γRt+2+γ2Rt+3+...+...    St+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}

有了这一定理,我们怎么寻找最优的策略?一种比较直观的方法就是贪心方法。

对每个状态s,都选取其动作价值函数最大的的策略 π\pi',即

sS,π(s)=argmaxaqπ(s,a)==argmaxas,rp(s,rs,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')]

根据策略改进定理,如果 qπ(s,π(s))vπ(s)q_{\pi}(s,\pi'(s))\geq v_{\pi}(s),则更新策略。直到某一时刻下 vπ(s)=vπ(s)v_{\pi'}(s)= v_{\pi}(s) 时,则算法已收敛,这时也满足贝尔曼最优方程,此时的策略就是我们的最优策略。

简单的流程图如下:

策略迭代流程图.jpg

价值迭代

在策略迭代中,我们每轮迭代的步骤是:先根据 π\pi 评估 vπ(s)v_{\pi}(s),再采用贪心方法改进策略。但是在策略评估时,为了使价值函数收敛到 vπv_{\pi} 我们需要对所有状态都迭代若干次直到价值函数收敛,这就造成迭代中套娃迭代,计算非常麻烦。

那能不能减少迭代呢?有一个方法就是,在评估时只进行一次迭代,也就是对所有状态只扫描一次,接着进行策略改进。

vk+1(s)=maxaEπ[Rt+1+γGt+1    St=s]=maxaEπ[Rt+1+γvk(s)    St=s]=maxaaπ(as)s,rp(s,rs,a)[r+γvk(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}

那这个其实就是贝尔曼最优方程。这样子就不需要反复迭代来求解 vπ(s)v_{\pi}(s)了。

从过程来理解价值迭代与策略迭代的不同

  • 价值迭代的过程是: v1v2v3...vv_1\rightarrow v_2\rightarrow v_3\rightarrow ...\rightarrow v_*

  • 策略迭代的过程是: π1vπ1π2vπ2π3vπ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_{*}

显然,策略迭代需要先求精确的状态价值函数 ,然后不停更新策略。一次更新是对整个状态空间进行遍历。而价值迭代是在一次遍历后立即停止策略评估,这样对每个状态只进行一次更新,计算的是近似的价值函数。

价值迭代虽然计算简化,但仍需遍历一次状态空间,这种方法其实也称为同步动态规划(Synchronous DP)

事实上,还有一种更为简化的方法叫做就地策略迭代。属于异步动态规划Asynchronous DP方法。即我们并不需要保持所有状态更新的同步,在某次更新中,不对状态集合 S 中的每一个状态都更新,而只随机选取其中的某一个状态的价值函数进行更新,其他状态保持不变 。这样减小计算,可以更快的达到收敛。

小结

本节介绍了如何用动态规划求解最优策略。动态规划是属于在model-based的情况下的算法,因为我们已经假定了环境的动态特性是已知的。动态规划分为策略迭代和价值迭代。策略迭代又分为两个步骤,一个是策略评估,一个是策略改进。策略评估用于计算给定策略的价值函数,属于精确计算。策略改进利用策略改进定理比较两个策略的价值函数,从而对策略进行更新。策略评估需要迭代计算,而策略迭代本身也是个迭代的过程,涉及到迭代中的迭代,造成计算非常复杂,于是就有了价值迭代。价值迭代可看出是特殊的策略迭代,其主要思想是在计算价值函数时只迭代一步,近似计算价值函数。价值迭代也称为同步动态规划。尽管计算简化,但价值迭代中对状态空间的每个状态都要更新一次,仍需遍历一次状态空间。为此,就有人提出异步的迭代思路——就地策略迭代。即我们并不需要保持所有状态更新的同步,在某次更新中,不对状态集合 S 中的每一个状态都更新,而只随机选取其中的某一个状态的价值函数进行更新,其他状态保持不变 。

参考

[1] sutton.Barto.《强化学习(第二版)》

[2] 动态规划——强化学习第四章 - 知乎 (zhihu.com)

[2] 【机器学习】白板推导系列(三十五) ~ 强化学习之动态规划_bilibili