Skip to content

RL算法笔记 WIP

约 2072 字大约 7 分钟

2026-01-25

最终目标!!!

image

贝尔曼公式 Bellman Equation

定义

  1. 回报(Return)和价值(Value)

我们定义回报 (Return) Gt。这是 Agent 从时刻 t 开始,一直持续到未来所能获得的折扣累计奖励:

Gt=Rt+1+γRt+2+γ2Rt+3+
  • Rt+1:执行动作后的即时奖励(reward)。
  • γ[0,1]:折扣因子(Discount Factor)。
  • 注:奖励(reward)是即时的,回报(return)是累计的。

这里面可以用递归的技巧写出:

Gt=Rt+1+γGt+1
  1. 状态价值函数(State Value)

状态价值函数 vπ(s) 定义为:在状态 s 下,遵循策略 π 能获得期望回报(average return)。

vπ(s)=Eπ[Gt|St=s]
  • 这里是回报(全局概念)而不是奖励(reward)

  1. 动作价值函数(Action Value)

在状态 s 下,遵循策略 π 采取动作 a,能获得期望回报(average return)。

qπ(s,a)=Eπ[Gt|St=s,At=a]
  • 和 State Value 的差异就是它选择了一个 action

因此:

vπ(s)=aπ(a|s) qπ(s,a)

推导

基于上述定义,我们将 Gt 的递归形式代入价值函数的定义,进行展开。

vπ(s)=Eπ[Gt|St=s]=Eπ[Rt+1+γGt+1|St=s](代入递归定义)=Eπ[Rt+1|St=s]+γEπ[Gt+1|St=s]

这里分出来两个期望,分别是下一步的即时 reward 和未来的 return

  1. Eπ[Rt+1|St=s]
E[Rt+1|St=s]=aπ(a|s)E[Rt+1|St=s,At=a]选定动作 a 后的期望奖励=aπ(a|s)[rp(r|s,a)r]
  • 第一步:由于 π 是个策略函数,输出多个动作,而每个动作都是一个可能性,因此 Eπ 需要拆成对每个动作进行求和,π(a|s) 是在状态 s 下,选择动作 a 的概率

  • 第二步:rp(r|s,a)r 是一个环境反馈项

    • r 是状态 s 和动作 a 下,环境给予的奖励(reward)
    • p(r|s,a) 自不必说,是这个奖励 r 的概率

  1. Eπ[Gt+1|St=s]

这里的遍历性(期望如何展开)在于,在 s 下还能去哪些状态 s,和 1 一样,我们自然而然的对下一状态 s 进行展开:

E[Gt+1|St=s]=sE[Gt+1|St=s,St+1=s]p(s|s)

这里还存在期望项没有展开完,我们还需要继续进行,而由于 RL 算法一般假设马尔可夫过程,因此在求 s 期望时,s 是不必要的,因此又可写成:

E[Gt+1|St=s]=sE[Gt+1|St+1=s]p(s|s)

这里面有个容易注意到的事实(但我来说难以注意),E[Gt+1|St+1=s] 恰好是我们刚刚定义的 vπ(s)=Eπ[Gt|St=s],其意义是站在 s 状态下的期望回报,只需换成 s,于是我们写成(又一递归形式):

E[Gt+1|St=s]=svπ(s)p(s|s)

但这并非我们想要的项,因为 p(s|s) 包含 s,而对于一个站在状态 s 的智能体来说,是只能通过某个动作 a 转换到 s,因而我们需要把 p(s|s) 转成如此形式:

p(s|s)=ap(s|s,a)π(a|s)

分别是状态 s 下,采取动作 a 能够到 s 的概率,以及状态 s 下,策略 π 能够生成动作 a 的概率,其实就是 ss 的所有路径概率之和,最后代回得到:

E[Gt+1|St=s]=svπ(s)[ap(s|s,a)π(a|s)]

  1. 贝尔曼方程

上面求的所有中间结果代回:

vπ(s)=Eπ[Rt+1|St=s]+γEπ[Gt+1|St=s]=[aπ(a|s)rp(r|s,a)r]+γ[svπ(s)ap(s|s,a)π(a|s)]

我们发现里面都有 aπ(a|s),直接提出(求和):

vπ(s)=aπ(a|s)[rp(r|s,a)r即时奖励+γsp(s|s,a)vπ(s)折现后的未来价值]

这就是贝尔曼方程

注意这是个递推式,只描述了状态 s 下如何求价值函数,要求解需要对每个状态列出方程组成方程组求解。

其次,把 aπ(a|s) 提出写成这样的形式是有一定的妙处的,可以发现 aπ(a|s) 是一个策略,而方括号里面都是价值,包括了即时和未来两项,我们回到动作价值的定义,后面就是 Action Value:

qπ(s,a)=rp(r|s,a)r+γsp(s|s,a)vπ(s)

矩阵表示

由于我们上面求出的是个递推式,为了全局求解,我们实际上需要列出方程组,因此先推导矩阵表示,我们回到提出 π(a|s) 之前,引入记号代表两项

  1. 即时奖励部分
Rπ(s)aπ(a|s)rp(r|s,a)r
  1. 未来回报部分
Pπ(s|s)aπ(a|s)p(s|s,a)

有了这两个记号原来的方程可以简化为:

vπ(s)=Rπ(s)+γsPπ(s|s)vπ(s)

再写成向量表示:

  • 价值向量 vπ (N×1):[vπ(s1),vπ(s2),,vπ(sN)]T
  • 奖励向量 Rπ (N×1):[Rπ(s1),Rπ(s2),,Rπ(sN)]T
  • 转移矩阵 Pπ (N×N):第 i 行第 j 列的元素 [P]π,ij=Pπ(sj|si)

于是直接写成:

vπ=Rπ+γPπvπ

由于 RπPπ 都是已知的(假设我们知道环境),上面又是线性方程组,可以直接推导解析解:

vπγPπvπ=Rπ(IγPπ)vπ=Rπvπ=(IγPπ)1Rπ

但实际中解析解通常求不出来,原因如下:

  1. 如果 N 很大,矩阵求逆会非常困难,复杂度 O(N3),而实际问题中,N 一般都很大
  2. 有时我们不知道 PπRπ 是什么,或者难以模拟,被称为 Model-Free 场景

于是我们需要一种迭代求解方法

贝尔曼最优方程 bellman optimal equation

首先我们定义何为最优 这和博弈论的优势策略是一样的:

vπ(s)vπ(s),sS

我们就说策略 π 优于或等于 π

基于此,我们要寻找的最优状态价值函数 v(s) 定义为所有可能策略下的最大值:

v(s)=maxπvπ(s)

这就引出几个问题:

  1. 这样的策略是否存在?
  2. 这样的策略是否唯一?
  3. 这样的策略是随机策略还是确定性策略?
  4. 如何达到这样的策略?

我们继续用上面矩阵表示的记号,对于任意固定策略 π,价值函数满足线性方程:

vπ=rπ+γPπvπ

观察上式,实际上的未知变量只有 vπ,我们可以看作是:

v=f(v)

其中:

f(v):=maxπ(rπ+γPπv)

这个形式可以用不动点定理,需证明 f(v) 是个收缩映射:

对于任意两个价值向量 uv,满足:

f(u)f(v)γuv

详细证明略

由此,我们可知解存在,并可以采用迭代方法求解:只需要随机初始化一个 v0,不断应用函数 vk+1=f(vk),足够多步后我们能够得到最优的 v