强化学习:贝尔曼方程(Bellman Equation)

文章介绍了状态值的概念,它是评估策略好坏的关键。状态值依赖于贝尔曼方程,该方程展示了当前状态的价值如何由即时奖励和未来奖励的期望值决定。通过Bootstrapping方法,可以从已知状态值迭代计算出未知状态值。此外,文章还探讨了return的计算和策略评估的重要性,以及动作值在选择行为中的作用。强化学习中的策略选择和优化往往基于状态值和动作值的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

∗∗重点:状态值、贝尔曼方程∗∗**重点:状态值、贝尔曼方程**重点:状态值、贝尔曼方程

return评估策略

  在前面概念介绍中,我们知道了可以用 return 来评估一个策略的好坏。如图,有三个不同的策略,那么哪一种策略最好呢?这时,就需要借助 return 来进行评估了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
return的计算
  既然 return 这么重要,那么怎么计算呢?上述例子 return 的计算是用的return 的定义,实际上还有更好的计算方法。
在这里插入图片描述
如何计算上图的return?为了方便计算,我们引入 viv_ivi ,用来记录从状态 s1s_1s1 出发得到的 return。
在这里插入图片描述
将上述式子变形,得到下列式子:
在这里插入图片描述
上面式子表明从不同状态出发得到的 return 依赖于从其他状态出发得到的 return 。可以发现,上面式子有这样一个特征,可以通过自身不断迭代得到自身,如下图,该方法被称为 Bootstrapping 。
在这里插入图片描述
为什么可以通过自身不断迭代得到自身?我们可以用数学来描述就知道其中的原因了。首先,将上面式子写成矩阵形式,如下图。根据线性代数知识可以得到最终vvv

在这里插入图片描述
v=r+γpvv=r+γpvv=r+γpvv=(E−γp)−1rv=(E-γp)^{-1}rv=(Eγp)1r

  上面式子 v=r+γpvv=r+γpvv=r+γpv 即就是贝尔曼方程(对于这个特定的确定性问题)。虽然很简单,但它展示了核心思想:一个状态的value 依赖于其他状态的 value。

状态值 state value

  为了更好的理解 state value ,我们首先以一个单步过程为例引入一些符号。
在这里插入图片描述
  StS_tStttt 时刻的状态
  AtA_tAtStS_tSt 状态下采取的行为
  Rt+1R_{t+1}Rt+1:在 StS_tSt 状态下采取 AtA_tAt 行为后获得的奖励
  St+1S_{t+1}St+1StS_tSt 状态下采取行为AtA_tAt后转移到的新状态

上面式子所涉及的所有跳跃,都是基于概率分布来的
  StS_tStAtA_tAt:依赖于 π(At=a∣St=s)π(A_t=a|S_t=s)π(At=aSt=s)
  StS_tStAtA_tAt:依赖于 p(Rt+1=r∣St=s,At=a)p(R_{t+1}=r|S_t=s,A_t=a)p(Rt+1=rSt=s,At=a)
  StS_tStAtA_tAt:依赖于 p(St+1=s′∣St=s,At=a)p(S_{t+1}=s'|S_t=s,A_t=a)p(St+1=sSt=s,At=a)

注意:其中的 Rt+1R_{t+1}Rt+1 有时也会写成 RtR_tRt ,两者从数学上来说没有区别,但我们习惯性写成 Rt+1R_{t+1}Rt+1
  由单步过程可以推广出多步过程,并求得 discount return 我们用 GtG_tGt 表示。
在这里插入图片描述
在这里插入图片描述
.
  有了上面的基础,现在我们可以正式来定义 state value 了,我们将state value 即 vvv 定义为 GtG_tGt 的期望(或称为期望值或均值):
在这里插入图片描述
  1、vπ(s)v_π(s)vπ(s)SSS 的一个函数,是带有条件的条件期望,从不同状态出发得到 trajectory 不同,对应的期望也是不同的
  2、vπ(s)v_π(s)vπ(s) 是基于策略 πππ 的,对于不同的策略得到的状态值可能是不同。
  3、vπ(s)v_π(s)vπ(s) 不仅仅代表一个状态值,也可以代表一种价值,状态值比较大说这个状态是有价值的,因为从这个状态出发回获得更大的 return

return 与 state value 的区别:
   return 是针对单个 trajectory 求得的,而 state value 状态值是针对多个 trajectory 求得的 return 再求平均值得到的。如果所有的 π(At=a∣St=s)π(A_t=a|S_t=s)π(At=aSt=s)p(Rt+1=r∣St=s,At=a)p(R_{t+1}=r|S_t=s,A_t=a)p(Rt+1=rSt=s,At=a)p(St+1=s′∣St=s,At=a)p(S_{t+1}=s'|S_t=s,A_t=a)p(St+1=sSt=s,At=a)是确定性的,则return 与 state value 相同。
   例如,下面的三个策略对应的 trajectory 不同,而 π1π_1π1π2π_2π2得到的 return 与 state value 值是相同的; π3π_3π3对应得到的则是 state value 。
在这里插入图片描述
在这里插入图片描述

贝尔曼方程:推导

   通过上述的介绍,现在我们可以试着推到一般性的贝尔曼方程了。现在,下列的式子相信都可理解。第二个式子表明,t时刻获得的 return 可以表示为立即得到的奖励与从下一时刻出发的到的 return 乘以衰减系数的和。将第二个式子代入 state value 方程得到第三个式子。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
.
   现在,分别来看第三式子的两部分:
在这里插入图片描述
   第一项的本质是及时奖励的平均值。首先,在状态 sss 下有多个行为可以选择,采取行为 aaa 的概率就是 πππ ;而执行行为 aaa 所得到的奖励就是期望 EEE(从状态 sss 出发采取行为 aaa 得到奖励 rrr 的概率乘以它本身的值 rrr ,即枚举所有动作对应的概率和奖励,将对应的概率乘以奖励求和就得到了期望)

.
在这里插入图片描述
   第二项的本质是未来奖励的平均值。从当前状态 sss 出发通过不同的行为 aaa 跳到不同的 s′s's 的概率 p(s′∣s)p(s'|s)p(ss) ; 与第一项同理得到跳到状态 s′s's 获得的值是期望 EEE ,又因为无后效性,所以跳到状态 s′s's 获得的值就等于状态 s′s's 对应的状态值。从状态 sss 到状态 s′s's 的概率等于 从状态 sss 出发通过选择不同的行为 aaa 的概率 πππ 乘以选择行为 aaa 跳转到 s′s's 的的概率 p(s′∣s,a)p(s'|s,a)p(ss,a),再累计相加。

在这里插入图片描述
   因此,我们得到上面这个式子,即为一般形式的贝尔曼方程。可以看出贝尔曼方程实际上是描述不同状态下的状态值之间的关系;由两项组成:及时奖励的平均值和未来奖励的平均值;另外该式子对状态空间中的所有状态都成立。可以看到 vπ(s)v_π(s)vπ(s)vπ(s′)v_π(s')vπ(s) 都是要计算的状态值,计算方法为 Bootstrapping ,因为实际上是有一组这样的式子,把这些式子联立起来就可以求解了,解的过程依赖与很多概率。

.
为了更好的理解贝尔曼方程,我们以一个例子进行讲解。
在这里插入图片描述
  首先把这个问题中所有的贝尔曼公式全部写出来,我们首先考虑状态 s1s_1s1 ,根据给出的策略可以把贝尔曼涉及的变量全部确定出。
在这里插入图片描述
π(a=a3∣s1)=1π(a≠a3∣s1)=0π(a=a_3|s_1)=1 \quad π(a≠a_3|s_1)=0π(a=a3s1)=1π(a=a3s1)=0p(s′=s3∣s1,a3)=1p(s′≠s3∣s1,a3)=0p(s'=s_3|s_1,a_3)=1 \quad p(s'≠s_3|s_1,a_3)=0p(s=s3s1,a3)=1p(s=s3s1,a3)=0p(r=0∣s1,a3)=1p(r≠0∣s1,a3)=0p(r=0|s_1,a_3)=1 \quad p(r≠0|s_1,a_3)=0p(r=0∣s1,a3)=1p(r=0∣s1,a3)=0
我们很容易得到状态 s1s_1s1 的贝尔曼方程,同理得到其他状态的贝尔曼方程,如下:
vπ(s1)=0+γvπ(s3)v_π(s_1)=0+γv_π(s_3)vπ(s1)=0+γvπ(s3)vπ(s2)=1+γvπ(s4)v_π(s_2)=1+γv_π(s_4)vπ(s2)=1+γvπ(s4)vπ(s3)=1+γvπ(s4)v_π(s_3)=1+γv_π(s_4)vπ(s3)=1+γvπ(s4)vπ(s4)=1+γvπ(s4)v_π(s_4)=1+γv_π(s_4)vπ(s4)=1+γvπ(s4)
得到了所有状态对应的贝尔曼方程,求解结果如下:
在这里插入图片描述
如果 γ=0.9γ=0.9γ=0.9 则有:
在这里插入图片描述
  可以看到 vπ(s1)v_π(s_1)vπ(s1)= vπ(s,2)v_π(s,2)vπ(s,2) =vπ(s3)v_π(s_3)vπ(s3)=10,为什么全大于 vπ(s1)v_π(s_1)vπ(s1) 呢?因为状态值代表它的价值,这里显示出来的价值是因为他们离目标近。

.
例子2:
在这里插入图片描述
同理,得到每个状态的贝尔曼公式,如下:
在这里插入图片描述
解得的结果如下:
在这里插入图片描述
γ=0.9γ=0.9γ=0.9 则有:
vπ(s1)=8.5v_π(s_1)=8.5vπ(s1)=8.5vπ(s2)=10v_π(s_2)=10vπ(s2)=10vπ(s3)=10v_π(s_3)=10vπ(s3)=10vπ(s4)=10v_π(s_4)=10vπ(s4)=10
表明这个策略没有之前的例1策略好。

.

贝尔曼公式:向量形式

  贝尔曼公式在实际问题中这样的公式不止一组,把所有的式子联立就可以整理成向量形式。为了能够写成向量形式,需要对贝尔曼方程进行变形。其中 rπ(s)r_π(s)rπ(s) 代表从当前状态出发所能得到的及时奖励的平均值, pπ(s′∣s)p_π(s'|s)pπ(ss) 表示从状态 ssss′s's 的概率。
在这里插入图片描述
在这里插入图片描述
为了区分,我们引入下标,得到的贝尔曼方程如下:
在这里插入图片描述
因此,我们可以得到如下形式:
其中 [pπ]i,j[p_π]_{i,j}[pπ]i,j 代表的意思是矩阵 [pπ][p_π][pπ] 的第 iii 行第 jjj 列的元素是从状态 sis_isi 跳到状态 sjs_jsj 的概率
在这里插入图片描述
为了更好的理解上述的向量形式,我们通过一个例子进行说明:
在这里插入图片描述
现在考虑这两例子,已经给出策略(箭头),如下图,那么他的贝尔曼方程的矩阵形式怎么写呢?
在这里插入图片描述
在这里插入图片描述
.
在这里插入图片描述
在这里插入图片描述

贝尔曼公式:求解

  我们知道,给出一个策略我们就会很容易列出其对应的贝尔曼方程,通过求解贝尔曼公式得到 state value ,这样的过程我们称为策略评估,策略评估是强化学习中非常关键的一步,也是最重要的工具,通过策略评估我们才会找出最优的策略。
  如何求解贝尔曼公式,通常有矩阵法和迭代法两种方法
  矩阵法!通过线性代数知识可轻易得到解的形式,但是在实际问题中我们并不常用,因为实际问题的矩阵空间很大,求解逆矩阵的计算量就会很大。
在这里插入图片描述
  迭代法!通过随机给定一个初始值 v0v_0v0 ,不断迭代可以得到一组序列 {v0,v0,v0,…{v_0,v_0,v_0,…}v0,v0,v0,},当迭代次数 kkk 足够大时,那么得到的值就会接近真实值。
在这里插入图片描述
为了更好理解贝尔曼方程解的过程,我们给一个例子,如下如,设置的规则为 r边界=r陷阱=−1r_{边界}=r_{陷阱}=-1r边界=r陷阱=1r终点=+1r_{终点}=+1r终点=+1γ=0.9γ=0.9γ=0.9
在这里插入图片描述
在这里插入图片描述
我们可以发现,通过比较 state value ,表明策略1和策略2是比较好的,策略3和策略4是比较差的。

.

动作值 action value

state value 与 action value 的区别与联系:
	状态值:是机械人从一个状态出发所得到的 return 平均值。
	动作值:是机械人从一个状态出发并且选择了一个行为得到的 return 平均值。
	本质上来说 state value 是 action value 的期望。

  为什么我们要关心动作值?是因为强化学习中的策略指的就是在一个状态如何选择一个行为使得最后得到的状态值更大,而如何选择一个好的行为就需要用 action value 来判断。
  动作值 action value 的定义如下:
在这里插入图片描述
从数学角度来看 state value 与 action value 的联系:
在这里插入图片描述
(2)式说明如果知道了动作值求平均就可以得到状态值。
(4)式说明如果知道了所有的状态值就可以得到动作值。

通过下列的例子,我们来理解 action value
在这里插入图片描述
我们可以很容易得到状态 s1s_1s1 的 action value
qπ(s1,a2)=−1+γvπ(s2)q_π(s_1,a_2)=-1+γv_π(s_2)qπ(s1,a2)=1+γvπ(s2)
虽然给出的策略是执行 a2a_2a2 ,但是这个策略可能是不好的,需要重新选择策略时,需要计算其他的 action value 。同理,我们可以求出执行其他行为的动作值,如下:
qπ(s1,a1)=−1+γvπ(s1)q_π(s_1,a_1)=-1+γv_π(s_1)qπ(s1,a1)=1+γvπ(s1)qπ(s1,a3)=0+γvπ(s3)q_π(s_1,a_3)=0+γv_π(s_3)qπ(s1,a3)=0+γvπ(s3)qπ(s1,a4)=−1+γvπ(s1)q_π(s_1,a_4)=-1+γv_π(s_1)qπ(s1,a4)=1+γvπ(s1)qπ(s1,a5)=0+γvπ(s1)q_π(s_1,a_5)=0+γv_π(s_1)qπ(s1,a5)=0+γvπ(s1)

### 强化学习中的贝尔曼方程 #### 贝尔曼方程概述 在强化学习领域,贝尔曼方程用于描述状态价值函数或动作价值函数如何通过后续的状态和奖励来更新当前的价值估计。该方程提供了一种迭代方法来评估策略的好坏,并寻找最优策略[^1]。 对于给定的一个策略π,贝尔曼期望方程定义了状态s下的预期回报V(s),即从该状态下按照此策略行动所能获得的长期累积折扣奖励: \[ V^\pi (s) = \sum_a \pi(a|s)\left[R_{t+1}+\gamma\sum_{s'}P(s'|s,a)V^\pi(s')\right]\] 这里\(R_{t+1}\)代表即时奖励,而γ是未来奖励的重要性因子(0≤γ<1)[^3]。 当考虑特定的动作a时,则可以得到对应的状态-行为对的价值Q(s,a): \[ Q^\pi (s,a)=E_\pi[R_{t+1}+\gamma\max _{a'}Q^\pi(S',a')]\] 这被称为贝尔曼优化方程,它表达了在一个理想情况下采取某个具体操作之后所能够达到的最大可能收益[^4]。 #### 应用场景 贝尔曼方程广泛应用于各种类型的决策问题中,尤其是在那些具有不确定性和延迟反馈特征的任务里。例如游戏AI设计、机器人路径规划以及资源分配等领域都可以见到它的身影。利用这些方程式可以帮助构建更有效的算法模型来进行自动化的复杂任务处理[^5]。 #### Python 实现示例 下面是一个简单的Python代码片段展示如何使用动态规划的方法解决有限范围内的环境问题并求解状态价值: ```python import numpy as np def bellman_update(V, P, R, gamma=0.9): """ 使用Bellman Expectation Equation 更新状态价值. 参数: V : 当前状态价值向量 P : 状态转移概率矩阵 R : 奖励表 gamma : 折扣率 返回: 新的状态价值向量 """ n_states = len(P) new_V = np.zeros(n_states) for s in range(n_states): # 遍历每一个状态 v_s = sum([p * (r + gamma * V[s_]) for p, r, s_ in zip(P[s], R[s], range(n_states))]) new_V[s] = v_s return new_V if __name__ == "__main__": # 初始化参数 num_states = 5 transition_probabilities = [[0.7, 0.3], [0.8, 0.2]] rewards = [-1., 1.] state_values = np.random.rand(num_states) updated_state_values = bellman_update(state_values, transition_probabilities, rewards) print(updated_state_values) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值