前情回顾
在强化学习数学原理的第二章中,我们介绍了贝尔曼公式的由来,也知道了如何评价一个策略的好坏了,具体内容可以见强化学习的数学原理-02章 贝尔曼公式。在本章节中,我们会针对贝尔曼公式的一种特殊情况——贝尔曼最优公式进行深入理解。
最优策略(Optimal Policy)
一旦我们知道了如何评价一个策略的好坏,那么给我们两个策略,我们就能知道给定状态下哪一个策略更优。既然如此,我们是否总能挑出一个更优的策略?那么是否存在一种策略,使得在任意状态下,都没有比该策略更优的策略了?直观上是这样的,就像解决问题总会有一个最优的解法(前提是评估的方式是固定的)。那么在数学上,我们如何描述这件事呢?
事实上,由于我们是基于状态值函数
v
π
v_\pi
vπ来判断两个策略的优劣的,那么我们也应当用其来定义最优策略:
Π ∗ = { π | v π ( s ) ≥ v π ′ ( s ) , ∀ s ∈ S , ∀ π ′ ∈ Π } , π ∗ ∈ Π ∗ \Pi^* = \left\{ \pi \;\middle|\; v_\pi(s) \geq v_{\pi'}(s), \;\; \forall s \in \mathcal{S}, \forall \pi' \in \Pi \right\}, \quad \pi^* \in \Pi^* Π∗={π∣vπ(s)≥vπ′(s),∀s∈S,∀π′∈Π},π∗∈Π∗
最优策略实际上是一个策略的集合,因为最优解可能不止一个。对于任意的状态以及任意的策略,基于最优策略计算出的状态值总是大于或等于基于其他策略在相同状态下计算出的状态值。 我们用
π
∗
\pi^*
π∗表示从
Π
∗
\Pi^*
Π∗中采样出的一个最优策略样本。
为了更直观的理解最优策略,我们将会引入强化学习中另一个极其重要的概念——动作价值(Action Value)。
动作价值(Action Value)
动作价值是衡量Agent在某个状态下采取一个动作优劣的标量,它是基于固定的评估策略/环境模型(如在网格世界中,进入禁区时的环境奖励分布)。在数学上,一个Agent在状态 s t s_t st采取行动 a t a_t at的动作价值定义如下所示:
q π ( s t , a t ) = E [ G t ∣ S t = s t , A t = a t ] q_\pi(s_t,a_t) = E[G_t \mid S_t = s_t, A_t = a_t] qπ(st,at)=E[Gt∣St=st,At=at]
它与状态价值的定义非常类似,只是此时的Action固定了,但评估值都是折扣回报的数学期望。与State Value类似,我们可以推导出它的代数展开形式:
q π ( s t , a t ) = E ( R t ∣ S t = s t , A t = a t ) + γ E ( G t + 1 ∣ S t = s t , A t = a t ) = ∑ r p ( r ∣ S t = s t , A t = a t ) r + γ ∑ s t + 1 E ( G t + 1 ∣ S t + 1 = s t + 1 ) p ( S t + 1 = s t + 1 ∣ S t = s t , A t = a t ) = ∑ r p ( r ∣ s t , a t ) r + γ ∑ s t + 1 v π ( s t + 1 ) p ( s t + 1 ∣ s t , a t ) \begin{align}q_\pi(s_t,a_t) &= E(R_t \mid S_t = s_t,A_t=a_t) + \gamma E(G_{t+1} \mid S_t = s_t,A_t=a_t) \notag \\ &= \sum_r p(r \mid S_t = s_t, A_t = a_t)r + \gamma\sum_{s_{t+1}}E(G_{t+1} \mid S_{t+1} = s_{t+1})p(S_{t+1}=s_{t+1} \mid S_t =s_t,A_t = a_t) \notag \\ &= \sum_r p(r \mid s_t,a_t)r + \gamma \sum_{s_{t+1}}v_\pi(s_{t+1})p(s_{t+1}|s_t,a_t) \notag \end{align} qπ(st,at)=E(Rt∣St=st,At=at)+γE(Gt+1∣St=st,At=at)=r∑p(r∣St=st,At=at)r+γst+1∑E(Gt+1∣St+1=st+1)p(St+1=st+1∣St=st,At=at)=r∑p(r∣st,at)r+γst+1∑vπ(st+1)p(st+1∣st,at)
这里可以看到动作价值与状态价值是有联系的,也就反映了为什么动作价值也是基于策略
π
\pi
π的。
我们可以从以下的式子中更加具体的看到它们之间的关联,由第二章的推导我们有以下公式:
v π ( s t ) = ∑ a t π ( a t ∣ s t ) [ ∑ r p ( r ∣ s t , a t ) r + γ ∑ s t + 1 p ( s t + 1 ∣ s t , a t ) v π ( s t + 1 ) ] v_\pi(s_t) = \sum_{a_t}\pi(a_t \mid s_t)[\sum_r p(r \mid s_t,a_t)r + \gamma \sum_{s_{t+1}}p(s_{t+1} \mid s_t,a_t)v_\pi(s_{t+1})] vπ(st)=at∑π(at∣st)[r∑p(r∣st,at)r+γst+1∑p(st+1∣st,at)vπ(st+1)]
故而有:
v π ( s t ) = ∑ a t π ( a t ∣ s t ) q π ( s t , a t ) v_\pi(s_t) = \sum_{a_t}\pi(a_t \mid s_t)q_\pi(s_t,a_t) vπ(st)=at∑π(at∣st)qπ(st,at)
也就是说,状态的价值实际上就是对于每一个Action的动作价值按策略的概率求一个加权平均值。 也就是说,对于某个状态,策略 π \pi π会给不同的Action分配一个概率权重 p a ( a ∈ A , ∑ a ( p a ) = 1 ) p_a(a \in A,\sum_a(p_a) = 1) pa(a∈A,∑a(pa)=1),然后对这些动作的动作价值按策略分配的概率求加权平均值就得到了State Value。现在我们希望找到最优的策略,比较简单的想法是直接给动作价值最高的动作分配所有的概率,这样求出来的状态价值不就最大了吗。思路没错,只是我们需要澄清一下,为动作价值最高的Action分配所有的概率是最优策略的性质,但并非就是我们最终的算法,稍后我们会理解这一点。现在,我们继续分析最优策略的性质,假设动作价值最高的Action为 a ∗ a^* a∗, 最优策略的性质在数学上推导如下:
v π ( s t ) = ∑ a t π ( a t ∣ s t ) q π ( s t , a t ) ≤ ∑ a t π ( a t ∣ s t ) q π ( s t , a ∗ ) = q π ( s t , a ∗ ) v_{\pi}(s_t) = \sum_{a_t}\pi(a_t \mid s_t)q_\pi(s_t,a_t) \leq \sum_{a_t}\pi(a_t \mid s_t)q_\pi(s_t,a^*) = q_\pi(s_t,a^*) vπ(st)=at∑π(at∣st)qπ(st,at)≤at∑π(at∣st)qπ(st,a∗)=qπ(st,a∗)
也就是说,我们可以写出最优策略的概率分布,使得最优策略的状态价值达到最大值:
π ∗ ( A t = a t ∣ S t = s t ) = { 1 a t = a ∗ , 0 a t = o t h e r s \pi^*(A_t =a_t \mid S_t = s_t) = \{ \begin{array}{ll} 1 & a_t = a^*, \\ 0 & a_t = others \end{array} π∗(At=at∣St=st)={10at=a∗,at=others
贝尔曼最优公式(Bellman Optimal Equation)
现在我们将讨论本节最核心的问题:如何找到最优的策略?
这里我们需要理清楚,最优策略本身也是一种策略,既然是策略,那么就一定可以用状态价值函数评估它,那也就一定可以列出贝尔曼公式来解出状态值。在02章中,我们知道了贝尔曼公式的样子:
v π ( s t ) = ∑ a t π ( a t ∣ s t ) [ ∑ r p ( r ∣ s t , a t ) r + γ ∑ s t + 1 p ( s t + 1 ∣ s t , a t ) v π ( s t + 1 ) ] v_\pi(s_t) = \sum_{a_t}\pi(a_t \mid s_t)[\sum_r p(r \mid s_t,a_t)r + \gamma \sum_{s_{t+1}}p(s_{t+1} \mid s_t,a_t)v_\pi(s_{t+1})] vπ(st)=at∑π(at∣st)[r∑p(r∣st,at)r+γst+1∑p(st+1∣st,at)vπ(st+1)]
那么最优策略 π ∗ \pi^* π∗也一定满足这个公式,所以可以写成:
v π ∗ ( s t ) = ∑ a t π ∗ ( a t ∣ s t ) [ ∑ r p ( r ∣ s t , a t ) r + γ ∑ s t + 1 p ( s t + 1 ∣ s t , a t ) v π ∗ ( s t + 1 ) ] v_{\pi^*}(s_t) = \sum_{a_t}\pi^*(a_t \mid s_t)[\sum_r p(r \mid s_t,a_t)r + \gamma \sum_{s_{t+1}}p(s_{t+1} \mid s_t,a_t)v_{\pi^*}(s_{t+1})] vπ∗(st)=at∑π∗(at∣st)[r∑p(r∣st,at)r+γst+1∑p(st+1∣st,at)vπ∗(st+1)]
由于我们已经知道了最优策略会使得Action Value最高的Action赋予概率1,所以我们可以把公式改写为:
v π ∗ ( s t ) = max a t ( ∑ r p ( r ∣ s t , a t ) r + γ ∑ s t + 1 p ( s t + 1 ∣ s t , a t ) v π ∗ ( s t + 1 ) ) v_{\pi^*}(s_t) = \max_{a_t}(\sum_r p(r \mid s_t,a_t)r + \gamma \sum_{s_{t+1}}p(s_{t+1} \mid s_t,a_t)v_{\pi^*}(s_{t+1})) vπ∗(st)=atmax(r∑p(r∣st,at)r+γst+1∑p(st+1∣st,at)vπ∗(st+1))
此时我们发现我们已经不再需要策略 π ∗ \pi^* π∗了,所以公式可以写为:
v ( s t ) = max a t ( ∑ r p ( r ∣ s t , a t ) r + γ ∑ s t + 1 p ( s t + 1 ∣ s t , a t ) v ( s t + 1 ) ) v(s_t) = \max_{a_t}(\sum_r p(r \mid s_t,a_t)r + \gamma \sum_{s_{t+1}}p(s_{t+1} \mid s_t,a_t)v(s_{t+1})) v(st)=atmax(r∑p(r∣st,at)r+γst+1∑p(st+1∣st,at)v(st+1))
这就是贝尔曼最优方程的展开式,我们也可以合并为矩阵形式(具体推导可见第二章):
v = max π ( r π + γ P π v ) \mathbf{v} = \max_{\pi}(\mathbf{r}_{\pi} + \gamma \mathbf{P_\pi}\mathbf{v}) v=πmax(rπ+γPπv)
这就是贝尔曼最优公式,可以看到它与策略没有关系,因为它本身是关于最优策略的贝尔曼公式,虽然公式里面带了一个
π
\pi
π,但这是一个最优化的过程,也就是说这个
π
\pi
π是使得整个值最大的一个参数,类似于
y
=
k
x
+
b
y=kx+b
y=kx+b里面的
k
k
k,不是自变量。
现在只要能解出这个方程,我们就能知道最优策略下的每个状态值(State Value),一旦所有的状态值知道了,我们就能计算出每个状态下每个Action的动作价值(Action Value),然后只需要让策略赋予最优的Action概率为1就能找到最优策略。
为了简化整个过程的分析,我们现在把这个方程写成
v
=
max
π
(
r
π
+
γ
P
π
v
)
=
f
(
v
)
\mathbf{v} = \max_{\pi}(\mathbf{r}_{\pi} + \gamma \mathbf{P_\pi}\mathbf{v}) = f(\mathbf{v})
v=maxπ(rπ+γPπv)=f(v)的形式。
即现在我们需要解一个这样的方程:
v = f ( v ) \mathbf{v} = f(\mathbf{v}) v=f(v)
为了解这个方程,我们需要引入两个数学知识,不动点和收缩映射理论:
- 不动点是指,如果一个点 x x x经过 f ( x ) f(x) f(x)映射之后的值仍然等于 x x x,则 x x x被称为不动点。
- 收缩映射:如果一个函数满足 ∣ f ( x 1 ) − f ( x 2 ) ∣ ≤ γ ∣ x 1 − x 2 ∣ , γ ∈ [ 0 , 1 ) |f(x_1) - f(x_2)| \leq \gamma|x_1 - x_2|,\gamma \in [0,1) ∣f(x1)−f(x2)∣≤γ∣x1−x2∣,γ∈[0,1),则该函数是一个收缩映射。
- Banach 不动点定理指出,如果一个映射 f f f是收缩映射,则存在唯一不动点 x x x,使得 x = f ( x ) x=f(x) x=f(x),且可以通过以下方法得到: x k + 1 = f ( x k ) x_{k+1} = f(x_k) xk+1=f(xk), 随机初始化一个 x 1 x_1 x1(可以是任意值),通过迭代的方式可以让 x k + 1 x_{k+1} xk+1以指数级的速度收敛到不动点。
可以用数学的方法证明
v
=
max
π
(
r
π
+
γ
P
π
v
)
=
f
(
v
)
\mathbf{v} = \max_{\pi}(\mathbf{r}_{\pi} + \gamma \mathbf{P_\pi}\mathbf{v}) = f(\mathbf{v})
v=maxπ(rπ+γPπv)=f(v)中的
f
f
f是一个收缩映射,但具体的证明这里不列出,感兴趣的可以看一下一些书上的详细证明。总之,这里我们把它当成一个工具来看待就行。
有趣的是,这个坍缩的不动点就是我们需要的解,也就是每一个状态的状态值。现在我们可以通过迭代的方式求出贝尔曼最优方程的解:
- 首先,随机初始化每个状态的状态值,这样可以得到一个初始的状态值向量 v 1 \mathbf{v_1} v1
- 迭代计算 v k + 1 = f ( v k ) = max π ( r π + γ P π v k ) \mathbf{v_{k+1}} = f(\mathbf{v_k}) = \max_{\pi}(\mathbf{r}_{\pi} + \gamma \mathbf{P_\pi}\mathbf{v_k}) vk+1=f(vk)=maxπ(rπ+γPπvk)
- 迭代若干次,直到状态值的变化小于一个预设的阈值,此时我们认为状态值已经逼近最优策略下的状态值
例子

在图3.1 中,我们设定了进入禁区的惩罚为-1,进入Target Area的奖励是1,超出边界的惩罚是-1,折扣系数 γ \gamma γ为0.9。现在我们将会迭代地求解贝尔曼最优方程,首先初始化每个状态的状态值为 0, 此时我们先求解max下的策略 π 1 \pi_1 π1,那就需要找到最大的"Action Value"(这里实际上不是真正的Action Value,因为此时状态值的估计是有误差的),对于 s 1 s_1 s1而言,可以计算其五个Action的"Action Value":
q ( s 1 , a 1 ) = − 1 + 0.9 ⋅ 0 = − 1 q ( s 1 , a 2 ) = − 1 + 0.9 ⋅ 0 = − 1 q ( s 1 , a 3 ) = 0 + 0.9 ⋅ 0 = 0 q ( s 1 , a 4 ) = − 1 + 0.9 ⋅ 0 = − 1 q ( s 1 , a 5 ) = 0 + 0.9 ⋅ 0 = 0 \begin{align} q(s_1,a_1) &= -1 + 0.9 \cdot0 = -1 \notag \\ q(s_1,a_2) &= -1 + 0.9 \cdot0 = -1 \notag \\ q(s_1,a_3) &= 0 + 0.9 \cdot0 = 0 \notag \\ q(s_1,a_4) &= -1 + 0.9 \cdot0 = -1 \notag \\ q(s_1,a_5) &= 0 + 0.9 \cdot0 = 0 \notag \end{align} q(s1,a1)q(s1,a2)q(s1,a3)q(s1,a4)q(s1,a5)=−1+0.9⋅0=−1=−1+0.9⋅0=−1=0+0.9⋅0=0=−1+0.9⋅0=−1=0+0.9⋅0=0
这样我们就可以通过取max的操作得到第二轮迭代中对 v ( s 1 ) v(s_1) v(s1)的估计值 0,同理我们可以得到其他状态的第二轮状态值估计:
v 2 = [ 0 1 1 1 ] \mathbf{v_2} = \left[ \begin{array}{c} 0 \\ 1 \\ 1 \\ 1 \end{array} \right] v2= 0111
再带入求解max策略的过程,又可以得到一个新的策略,然后更新状态值,如此反复,就能慢慢收敛到最终的状态值:
v ∞ = [ 9 10 10 10 ] \mathbf{v_\infty} = \left[ \begin{array}{c} 9 \\ 10 \\ 10 \\ 10 \end{array} \right] v∞= 9101010
此时,我们就可以计算出每一个状态下每一个Action的Action Value,从而找到最优策略,以 s 3 s_3 s3为例:
q ( s 3 , a 1 ) = 0 + 0.9 ⋅ 9 = 8.1 q ( s 3 , a 2 ) = 1 + 0.9 ⋅ 10 = 10 q ( s 3 , a 3 ) = − 1 + 0.9 ⋅ 10 = 8 q ( s 3 , a 4 ) = − 1 + 0.9 ⋅ 10 = 8 q ( s 3 , a 5 ) = 0 + 0.9 ⋅ 10 = 9 \begin{align} q(s_3,a_1) &= 0 + 0.9 \cdot9 = 8.1 \notag \\ q(s_3,a_2) &= 1 + 0.9 \cdot10 = 10 \notag \\ q(s_3,a_3) &= -1 + 0.9 \cdot10 = 8 \notag \\ q(s_3,a_4) &= -1 + 0.9 \cdot10 = 8 \notag \\ q(s_3,a_5) &= 0 + 0.9 \cdot10 = 9 \notag \end{align} q(s3,a1)q(s3,a2)q(s3,a3)q(s3,a4)q(s3,a5)=0+0.9⋅9=8.1=1+0.9⋅10=10=−1+0.9⋅10=8=−1+0.9⋅10=8=0+0.9⋅10=9
因此,通过最大值我们可以知道,在状态 s 3 s_3 s3的最优策略应当是采取 a 2 a_2 a2(向右走),因为它的动作价值最高。

1万+

被折叠的 条评论
为什么被折叠?



