【统计强化学习】MDP上的规划

本系列文章主要参考UIUC姜楠老师开设的cs542


规划(Planning)问题是基于给定的已知的 MDP M = ( S , A , P , R , γ ) M=(\mathcal{S}, \mathcal{A}, P, R, \gamma) M=(S,A,P,R,γ),计算最优策略 π M ∗ \pi_M^* πM,这里讨论 Q ∗ Q^* Q 的计算。本章将介绍用来求解规划问题的策略迭代算法、值迭代算法、以及线性规划算法。

策略迭代

策略迭代算法为从任意初始策略 π 0 \pi_0 π0 开始,不断重复下述步骤:
π k = π Q π k − 1 \pi_k = \pi_{Q^{\pi_{k-1}}} πk=πQπk1

即在每次迭代中,先进行策略评估,即基于公式 V π = ( I ∣ S ∣ − γ P π ) − 1 R π V^\pi = (\bold{I}_{|\mathcal{S}|} - \gamma P^\pi)^{-1} R^\pi Vπ=(ISγPπ)1Rπ 计算策略 π k − 1 \pi_{k-1} πk1 下的动作值函数,更一般地,是使用贝尔曼算子不断更新当前的动作值函数,直至收敛到不动点,并使用这个不动点来作为当前策略对应的动作值函数,即 lim ⁡ N → ∞ ( T π ) N V = V π \lim_{N \rightarrow \infty} (\mathcal{T}^\pi)^N V = V^\pi limN(Tπ)NV=Vπ;然后进行策略改进,即基于公式 π ( s ) = arg ⁡ max ⁡ a ∈ A Q ( s , a ) \pi(s) = \arg\max_{a \in \mathcal{A}} Q(s,a) π(s)=argmaxaAQ(s,a) 计算该动作值函数下的策略。

首先介绍策略改进定理(Policy improvement theorem),以证明策略迭代算法的收敛性:在策略迭代算法中,对于所有 k ≥ 1 k\ge1 k1 以及 s ∈ S s\in\mathcal{S} sS a ∈ A a\in\mathcal{A} aA,都有 V π k ( s ) ≥ V π k − 1 ( s ) V^{\pi_k}(s) \ge V^{\pi_{k-1}}(s) Vπk(s)Vπk1(s) 成立,并且直至 π ∗ \pi^* π 被找到之前,每次迭代中都能保证有至少一个状态是严格大于的。

因此,策略迭代算法的终止条件为 Q π k = Q π k − 1 Q^{\pi_k}=Q^{\pi_{k-1}} Qπk=Qπk1。另外,可以证明策略迭代算法最多只需要迭代 ∣ A ∣ ∣ S ∣ |\mathcal{A}|^{|\mathcal{S}|} AS 次:若前一次迭代的策略和后一次迭代的策略一样,那么迭代收敛,最优策略被找到;由于每次迭代值函数都不会变得更差,因此当前迭代中获取的策略与之前迭代过程中得到的策略都不同;因此,策略空间的大小即为最坏情况下的策略迭代算法收敛所需要的迭代次数。

下面将从两个角度来证明策略改进定理。对于第一个角度,这里先引入优势这个概念:给定策略 π \pi π,在状态 s s s 下动作 a a a 的优势定义为 A π ( s , a ) : = Q π ( s , a ) − V π ( s ) A^\pi(s,a):=Q^\pi(s,a)-V^\pi(s) Aπ(s,a):=Qπ(s,a)Vπ(s)。因此策略 π ′ \pi' π 相比于策略 π \pi π 的优势为 A π ( s , π ′ ) : = A π ( s , π ′ ( s ) ) A^\pi(s,\pi'):=A^\pi(s,\pi'(s)) Aπ(s,π):=Aπ(s,π(s))。另外,优势函数还有一个性质是 A π ( s , π ( s ) ) = 0 A^\pi(s,\pi(s))=0 Aπ(s,π(s))=0。由于策略改进过程是将当前的动作值函数中值最大的动作来更新策略,所以迭代后策略相比于迭代前策略的优势函数是非负的。另一方面,由于迭代前后的策略值函数的差异可以通过优势函数线性组合表示,因此 V π k ( s ) − V π k − 1 ( s ) V^{\pi_k}(s) - V^{\pi_{k-1}}(s) Vπk(s)Vπk1(s) 就可以被分解成多个非负项之和,即策略迭代过程中值函数是只增不减的,从而证明了策略改进定理。下面证明值函数的差异能够用优势函数线性组合来表示。

这里引入引理 Performance Difference Lemma:对于任意 π \pi π π ′ \pi' π,以及任意状态 s ∈ S s\in\mathcal{S} sS,有:
V π ′ ( s ) − V π ( s ) = 1 1 − γ E s ′ ∼ d π ′ , s [ A π ( s ′ , π ′ ) ] V^{\pi'}(s) - V^\pi(s) = \frac{1}{1 - \gamma} \mathbb{E}_{s' \sim d^{\pi',s}}[A^\pi(s',\pi')] Vπ(s)Vπ(s)=1γ1Esdπ,s[Aπ(s,π)]

其中 d π ′ , s d^{\pi',s} dπ,s 表示给定策略 π ′ \pi' π 以及初始状态 s s s 下的 normalized discounted state occupancy。证明该引理的过程如下。考虑一个策略序列 { π i } i ≥ 0 \{\pi_i\}_{i\ge0} { πi}i0,对于任意 i i i π i \pi_i πi 表示在前 i i i 个时间步按策略 π ′ \pi' π 选择动作,之后就按策略 π \pi π 选择动作。有 π 0 = π \pi_0=\pi π0=π π ∞ = π ′ \pi_\infty=\pi' π=π。则上式可写成:
V π ′ ( s ) − V π ( s ) = ∑ i = 0 ∞ ( V π i + 1 ( s ) − V π i ( s ) ) V^{\pi'}(s) - V^\pi(s) = \sum_{i=0}^\infty (V^{\pi_{i+1}}(s) - V^{\pi_i}(s)) Vπ(s)Vπ(s)=i=0(Vπi+1(s)Vπi(s))

此时,对于右式中的每一项, π i \pi_i πi π i + 1 \pi_{i+1} πi+1 的前 i i i 步都是按策略 π ′ \pi' π 选择动作,所以在两个策略下轨迹的前 i + 1 i+1 i+1 步的状态都是一致的,在 i + 1 i+1 i+1 步的状态上才选择不同的动作,而此时不同的动作就导致后续转移到的状态的概率分布发生变化,因此有以下推导:
V π i + 1 ( s ) − V π i ( s ) = γ i ∑ s ′ P [ s i + 1 = s ′ ∣ s i = s , π ′ ] ( Q π ( s ′ , π ′ ) − Q π ( s ′ , π ) ) V^{\pi_{i+1}}(s) - V^{\pi_i}(s) = \gamma^i\sum_{s'}\mathbb{P}[s_{i+1}=s'|s_i=s,\pi'](Q^\pi(s',\pi')-Q^\pi(s',\pi)) Vπi+1(s)Vπi(s)=γisP[si+1=ssi=s,π](Qπ(s,π)Qπ(s,π))

由于前 i i i 步的状态相同,所以可以消掉轨迹的前 i i i 步计算。而由于第 i + 1 i+1 i+1 步策略开始变化,所以将 s i + 1 s_{i+1} si+1 记为 s ′ s' s,计算此步下不同状态转移情况的值。另外,由于此处离起始状态 s s s 相隔 i + 1 i+1 i+1 步,所以此处的值需要乘上 γ i \gamma^i γi 的折扣。遍历 i + 1 i+1 i+1 步下的所有状态 s ′ s' s,到达每个 s ′ s' s 的概率为 P [ s i + 1 = s ′ ∣ s i = s , π ′ ] \mathbb{P}[s_{i+1}=s'|s_i=s,\pi'] P[si+1=ssi=s,π],对于 π i + 1 \pi_{i+1} πi+1,在 i + 1 i+1 i+1 步下仍会根据 π ′ \pi' π 选择动作,所以后续轨迹的值为 Q π ( s ′ , π ′ ) Q^\pi(s',\pi') Qπ(s,π),表示在 s ′ s' s 下根据 π ′ \pi' π 执行动作,但是后续会根据 π \pi π 执行,所以后续的值可用 Q π Q^\pi Qπ 计算;同理,对于 π i \pi_i πi,在 i + 1 i+1 i+1 步下就转为根据 π \pi π 选择动作,所以可直接用 Q π ( s ′ , π ) Q^\pi(s',\pi) Qπ(s,π) 表示轨迹后续的值。因此代入上式,得:
V π ′ ( s ) − V π ( s ) = ∑ i = 0 ∞ γ i ∑ s ′ ∈ S P [ s i + 1 = s ′ ∣ s 1 = s , π ′ ] ( Q π ( s ′ , π ′ ) − Q π ( s ′ , π ) ) = ∑ i = 0 ∞ γ i ∑ s ′ ∈ S P [ s i + 1 = s ′ ∣ s 1 = s , π ′ ] ( Q π ( s ′ , π ′ ) − V π ( s ′ ) ) = ∑ i = 0 ∞ γ i ∑ s ′ ∈ S P [ s i + 1 = s ′ ∣ s 1 = s , π ′ ] A π ( s ′ , π ′ ) \begin{aligned} \\ V^{\pi'}(s) - V^\pi(s) &= \sum_{i=0}^\infty \gamma^i \sum_{s'\in\mathcal{S}} \mathbb{P}[s_{i+1}=s'|s_1=s,\pi'] (Q^\pi(s',\pi')-Q^\pi(s',\pi)) \\ &= \sum_{i=0}^\infty \gamma^i \sum_{s'\in\mathcal{S}} \mathbb{P}[s_{i+1}=s'|s_1=s,\pi'] (Q^\pi(s',\pi')-V^\pi(s')) \\ &=\sum_{i=0}^\infty \gamma^i \sum_{s'\in\mathcal{S}} \mathbb{P}[s_{i+1}=s'|s_1=s,\pi'] A^\pi(s',\pi') \end{aligned} \\

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值