强化学习【三】:动态规划问题

·目录

Policy Evaluation(策略评估)

Iterative Policy Evaluation (迭代策略估计)

例子:方格游戏

策略迭代 policy iteration

策略改进 Policy Improvement

Modified Policy Iteration

广义的策略迭代

值迭代   Value Iteration

同步DP: Synchronous

异步DP :

In-place DP

Prioritised Sweeping:优先级sweeping

real-time DP : 实时动态规划

Full-Width Backups

sample backups

Approximate DP

值函数空间 Value Function Space

压缩映射

值函数的无穷范数  ∞-Norm

Bellman期望备份是一种 Contraction

Contraction Mapping Theorem 压缩映射定理

策略估计和策略迭代的收敛

值迭代的收敛



Dynamic :sequential or temporal ;问题与时间/顺序有关

Programming :

动态规划是求解复杂问题的一类方法:它有两个特性:

  • 最优子结构Optimal substructure:问题的最优解可以分解为子问题的最优解
  • 重叠子问题Overlapping subproblems: 子问题重复出现多次,因此可以将其存储起来并反复利用。

而MDP【马尔科夫决策过程,Markov decision processes】 满足上述两点,

  • Bellman 方程给出了MDP的递归分解方法
  • 值函数 存储并反复利用 解

动态规划假设对MDP的结构、动态变化&奖励,也就是完全了解环境的运行原理。

有两类问题,分别是预测和控制

(1)预测:输入 MDP和 \large \pi 或 MRP,输出值函数。

(2)控制:输入 MDP,输出最优值函数和最优策略。

 

动态规划的其他应用:Scheduling algorithms调度算法,字符串算法(序列对齐sequence alignment),图论算法(最短路径),图模型( Viterbi算法),生物信息(晶格模型);这些字符串、晶格、图通常具有最优子结构。


Policy Evaluation(策略评估)

Iterative Policy Evaluation (迭代策略估计)

  用于解决问题:评估一个给定的策略\large \pi

从任意一个值(通常取0)出发,在每一步都运用贝尔曼方程往前看一步,来得到新的值函数,最终得到 \large $$ v_{1} \rightarrow v_{2} \rightarrow \ldots \rightarrow v_{\pi} $$

每当进行一次迭代时,都要考虑到MDP中的所有状态;即 同步备份【synchronous backups】,最终值函数会收敛到\large v_{\pi }

它 使用贝尔曼期望方程迭代更新值函数,公式如下:


  那些有一个中止状态的任务被称为episodic tasks。

例子:方格游戏

估计一个方格上的随机策略:假设可采取的动作有东南西北四个方向,方格上的两个阴影区域代表终点,对于下图的这个没有折扣因子的 episodic MDP (γ = 1) ,有14个非终结状态1,2,...,14,一个终止状态(在图中用了两个方框表示,但它们是一个状态。)移动到方格之外的动作不会改变状态。在到达终止状态之前,每移动一步带来的回报是-1,agent遵循如下的均匀随机策略(其中e,s,w,n分别代表东、南、西、北四个方向):\large $$ \pi(n | \cdot)=\pi(e | \cdot)=\pi(s | \cdot)=\pi(w | \cdot)=0.25 $$

k取无穷大时,值函数会稳定下来,收敛到最终表格所示的值,对表格中的值求平均说明:如果采取随机的动作,那么走到最终状态所花的时间步大致是多少。-——大致是20.

 

上图中 右边的那个带箭头方向的一栏告诉我们如何选择更好的策略。

 

从k= 1到K=2处, -1.7 = -1.0 +0.25*(-1.0 -1.0 -1.0 + 0)=-1.75 ,也就是说,1.7那个位置对应的上一步的值为-1.0 ,而它往四个方向移动的值分别为三个-1.0 和0 ,为0是因为有一个会移到阴影框中,而移到方格之外的那次不改变它的值就还是-1.0.

同理可验证,从k=2 到k=3,    在下图的红色框中,它的四个移动后的状态是4个标号的蓝色框这样,这几个位置在k=2时的值是-2.0,-2.0,-2.0,和一个0.0 .再更新value时由于每转移一步的return都是-1, 所以要加上-1 .

           look one-step ahead!

 

 

策略迭代 policy iteration

怎么优化一个策略?  不断地 evaluate再 greedy !用贪心算法。策略的评估和改进交替进行。

先用值函数评估一个给定的策略\large \pi\large $$ v_{\pi}(s)=\mathbb{E}\left[R_{t+1}+\gamma R_{t+2}+\ldots | S_{t}=s\right] $$

再对 策略的值函数 用贪婪法优化策略 :  \large $$ \pi^{\prime}=\operatorname{greedy}\left(v_{\pi}\right) $$

策略迭代过程总能收敛到最优值函数 \large \pi _{*}

 

策略改进 Policy Improvement

不仅可以用状态值函数,也可以用动作-值函数来更新策略!当更新停止后,状态值函数、动作值函数和策略函数均为最优。

考虑一个确定性策略:\large $$ a=\pi(s) $$ ,可以acting greedily 来改进策略: \large $$ \pi^{\prime}(s)=\underset{a \in \mathcal{A}}{\operatorname{argmax}} q_{\pi}(s, a) $$

      这样能改进 任一状态s在一个时间步上的值: \large $$ q_{\pi}\left(s, \pi^{\prime}(s)\right)=\max _{a \in \mathcal{A}} q_{\pi}(s, a) \geq q_{\pi}(s, \pi(s))=v_{\pi}(s) $$

      因此也优化了值函数  \large $$ V_{\pi^{\prime}}(s) \geq v_{\pi}(s) $$

       \large $\begin{aligned} v_{\pi}(s) & \leq q_{\pi}\left(s, \pi^{\prime}(s)\right)=\mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma v_{\pi}\left(S_{t+1}\right) | S_{t}=s\right] \\ & \leq \mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma q_{\pi}\left(S_{t+1}, \pi^{\prime}\left(S_{t+1}\right)\right) | S_{t}=s\right] \\ & \leq \mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma R_{t+2}+\gamma^{2} q_{\pi}\left(S_{t+2}, \pi^{\prime}\left(S_{t+2}\right)\right) | S_{t}=s\right] \\ & \leq \mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma R_{t+2}+\ldots | S_{t}=s\right]=v_{\pi^{\prime}}(s) \end{aligned}$

如果停止了优化改进,那么 \large $ q_{\pi}\left(s, \pi^{\prime}(s)\right)=\max _{a \in \mathcal{A}} q_{\pi}(s, a)=q_{\pi}(s, \pi(s))=v_{\pi}(s)$

那么也满足了贝尔曼最优方程: \large $ v_{\pi}(s)=\max _{a \in \mathcal{A}} q_{\pi}(s, a)$

因此对所有状态  \large $ s \in \mathcal{S}$\large $ v_{\pi}(s)=v_{*}(s)$,所以 \large \pi  是一个最优策略。

 

Modified Policy Iteration

在前面的基础上,加上迭代停止条件。

策略估计需要收敛到 \large $ v_{\pi} 吗?

或者需要引入一个停止条件吗(比如,值函数的 \large \epsilon收敛)?

或者在策略估计迭代k次后停止迭代? 比如之前的方格游戏在k=3时就足以找出最优策略。

为什么不在每轮迭代都更新策略,也就是说,在k=1之后停止  ——> 这样做就相当于值迭代了。

 

广义的策略迭代


任何一个最优策略可以分解为两个部分:

  • 一个最优的 first action  \large $ A_{*}$ ;
  •  Followed by an optimal policy from successor state  \large $ S^{\prime}$

当且仅当    对任一状态 \large $ s^{\prime}$ 到状态s(经有限步后)都是可达的。。。策略才能从状态s处开始找出最优解。

如果我们知道子问题的解\large $ v_{*}\left(s^{\prime}\right)$  ,那么可以通过向前看一步 【one-step lookahead】 来找出 \large $ v_{*}(s)               

                       \large $ v_{*}(s) \leftarrow \max _{a \in \mathcal{A}} \mathcal{R}_{s}^{a}+\gamma \sum_{s^{\prime} \in \mathcal{S}} \mathcal{P}_{s s^{\prime}}^{a} v_{*}\left(s^{\prime}\right)$

值迭代的思想:不断地重复更新,apply these updates iteratively 。 值迭代方法对于loopy, stochastic MDPs仍然可用。

对于没有终止状态的MDP,通过乘以折扣因子,仍然可以用动态规划求解/。

直觉上怎么理解它的原理:  start with final rewards and work backwards 。从最终的回报开始,用逆序解法【回溯】。下面以最短路径为例:箭头表示的最短路径不唯一。


值迭代   Value Iteration

  • 用于解决问题:找出最优策略 \large \pi 【已知环境的运行原理】
  • 解法:迭代使用贝尔曼最优方程。
  • \large $ v_{1} \rightarrow v_{2} \rightarrow \ldots \rightarrow v_{*} $
  • 再用同步评估【 synchronous backups,如下图描述。】这样可以更快收敛到最优解。

  • 与策略迭代的不同是,他没有具体的策略,中间过程产生的值函数可能不与任一策略相关。

 

同步DP: Synchronous

 

  • 算法是基于状态-值函数 \large v_{\pi }(s) 或者 \large v_{* }(s),
  • 对于有m个和n个状态的情形,每次迭代的复杂度为 \large O(mn^{2})
  • 算法也同样适用于\large q_{\pi }(s,a) 或者\large q_{ * }(s,a) :每次迭代的复杂度为\large O(m^{2 } n^{2} )
  • 目前为止所讲的动态规划都是同步动态规划,它使用了  synchronous backups, 也就是所有状态都并行备份了,一次性更新所有S的value。

异步DP :

只要持续地选择所有的状态,不论以怎样的顺序选择,孙发会更高效地收敛到最优值函数。

显著地减少了计算量,如果 all states continue to be selected 则算法保证收敛。

异步动态规划的三种类型:In-place dynamic programming、 Prioritised sweeping 、Real-time dynamic programming

In-place DP

同步动态规划会保存两份值函数的copies, 且对所有S中的状态s,

但 In-place 值迭代只保存一份值函数的copies, 且对所有S中的状态s,

i.e.(由于本轮的value本就是上一轮优化的结果 ),不对上一轮的value进行备份,直接使用这一周期的value)

 

Prioritised Sweeping:优先级sweeping

使用贝尔曼误差的大小 衡量 值函数与最优的差距,每次只备份使贝尔曼误差最大的状态,然后更新这个状态,再计算相应的贝尔曼误差。贝尔曼误差可以定义如下(不唯一):

  •  i.e.计算优化目标值和现实值之差,对多个S计算后排成一列,差值大的在前,依次优化对应的s的value。
  • 这种方法需要已知reverse dynamics (predecessor states)的信息,可以通过 maintaining a priority queue来高效地实现。

real-time DP : 实时动态规划

  • real-time 实际上是 real time step【在环境中运行一个agent,选择那些被agent真正访问过的状态,来搜集到真是实样本】:,只更新经历过的S,不管其它的。
  • 与agent有关的只有状态,因此用agent的经验来指导状态的选择,在每个时间步\large S_{t} \, ,\, A_{t} \, ,\, R_{t+1} \, 之后,更新\large S_{t}

 

Full-Width Backups

     DP使用Full-Width Backups,也就是在每次同步or异步备份时,会考虑到所有的动作和所有的后续状态,并使用MDP的转移和回报函数的信息。

DP非常适合中等规模的问题求解,也就是状态数为百万级的。对于大规模问题DP会 有Bellman维灾难的问题。也就是状态数目\large n = \left | S \right |随着状态变量的数目增加承指数增长。即便是一次备份的成本也会很高。

sample backups

在后续课程里会考虑用样本备份:用样本回报和样本转移 \large < S,A,R,S^{{}'}> 而不是用回报函数R和转移概率阵P。

它的优势在于:

  • model-free :不需要MDP的先验知识。
  • 通过采样解决了 维灾难【 curse of dimensionality】
  • 每次备份的花销是常数级,与状态数目无关。

Approximate DP

它使用一个函数近似器 \large \hat{\textup{v}}(s,\mathbf{w}) 来近似值函数,对\large \hat{\textup{v}}(\bullet ,\mathbf{w})运用DP求解,比如,

  • 在每/(第k)轮 迭代时重复用 Fitted Value Iteration,
  • 从S中采样得到状态 \large \tilde{S}\subseteq S,
  • 对每一个状态 \large s\in \tilde{S} 使用贝尔曼最优等式【Bellmanoptimality equation】估计目标值。

           

  • 使用目标值\large \left \{ \left \langle s\, , \tilde{\textup{v}_{k} } (s)\, \right \rangle \right \}   训练下一个值函数\large \hat{\textup{v}}(\cdot \: ,\: \mathbf{w}_{k+1})

 

值函数空间 Value Function Space

值函数上的向量空间 \large V\large \left | S \right |维的,这个空间中的每个店都对应一个值函数\large \textup{v}\left ( s \right ),在这个向量空间中, Bellman backup 使得这些值函数更近,因此备份最终会收敛到唯一解。

压缩映射

值函数的无穷范数  ∞-Norm

    对于状态-值函数u和v的距离,我们用无穷范数来衡量:也就是状态值的largest difference

Bellman期望备份是一种 Contraction

定义一个贝尔曼期望备份算子【Bellman expectation backup operator】,它是 \large \gamma -contraction ,能使值函数至少以\large \gamma 的速度互相靠拢。

Contraction Mapping Theorem 压缩映射定理

这个定理可以回答一下问题:

策略估计和策略迭代的收敛

由于 贝尔曼期望算子 \large T^{\pi }有唯一 一个固定点,并且 【由贝尔曼期望方程可知】\large \textup{v}_{\pi }\large T^{\pi }的一个固定点,再根据压缩映射定理,迭代策略估计 会收敛到 \large \textup{v}_{\pi } , 而 策略迭代会收敛到 \large \textup{v}_{*} .

 

定义一个贝尔曼最优备份算子【Bellman optimality backup operator】,

它是 \large \gamma -contraction ,能使值函数至少以\large \gamma 的速度互相靠拢。【证明过程与前面的类似】

值迭代的收敛

由于 贝尔曼最优 算子 \large T^{ *}有唯一 一个固定点,并且 【由贝尔曼最优方程 可知】\large \textup{v}_{* }\large T^{ *}的一个固定点,再根据压缩映射定理,值迭代会收敛到 \large \textup{v}_{*} .

参考:【1】David silver 强化学习公开课的屁屁踢

【2】 David silver 强化学习公开课笔记(三):Planning by Dynamic Programming

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章