当前位置: 首页 > news >正文

论文笔记(七十二)Reward Centering(二)

Reward Centering(二)

  • 文章概括
  • 摘要
  • 2 简单的奖励中心

文章概括

引用:

@article{naik2024reward,title={Reward Centering},author={Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal={arXiv preprint arXiv:2405.09999},year={2024}
}
Naik, A., Wan, Y., Tomar, M. and Sutton, R.S., 2024. Reward Centering. arXiv preprint arXiv:2405.09999.

原文: https://arxiv.org/abs/2405.09999
代码、数据和视频:


系列文章:
请在 《 《 文章 》 》 专栏中查找



摘要

我们证明,在解决持续强化学习问题时,折扣方法如果通过减去奖励的经验均值来对奖励进行中心化处理,其性能会显著提升。在常用的折扣因子下,这种改进是显著的,并且随着折扣因子趋近于1,改进幅度进一步增加。此外,我们证明,如果一个问题的奖励被加上一个常数偏移量,则标准方法的表现会变得更差,而采用奖励中心化的方法则不受影响。在on-policy设置下,估计平均奖励是直接的;对于off-policy设置,我们提出了一种稍微更复杂的方法。奖励中心化是一个通用的概念,因此我们预计几乎所有的强化学习算法都能从奖励中心化的加入中受益。


2 简单的奖励中心

估计平均奖励的最简单方法是维护当前已观察到的奖励的运行均值。即,如果 R ˉ t ∈ R \bar{R}_t \in \mathbb{R} RˉtR表示在 t t t个时间步后对平均奖励的估计,则

R ˉ t = ∑ k = 1 t R k . \bar{R}_t = \sum_{k=1}^{t} R_k. Rˉt=k=1tRk.

我更倾向于
R ˉ t = 1 t ∑ k = 1 t R k , \bar{R}_t = \frac{1}{t}\sum_{k=1}^{t} R_k, Rˉt=t1k=1tRk,

更一般地,该估计可以使用步长参数 β t \beta_t βt进行更新:

R ˉ t + 1 ≐ R ˉ t + β t ( R t + 1 − R ˉ t ) . (4) \bar{R}_{t+1} \doteq \bar{R}_t + \beta_t (R_{t+1} - \bar{R}_t). \tag{4} Rˉt+1Rˉt+βt(Rt+1Rˉt).(4)

≐ \doteq ” 在公式中有 “近似于” “约等于” “定义为” “估计值” 等意思。

该更新方法可以提供对平均奖励 R ˉ t ≈ r ( π ) \bar{R}_t\approx r(\pi) Rˉtr(π)的无偏估计,其中 π \pi π是生成数据的策略,前提是步长参数满足标准条件(Robbins & Monro, 1951)。

1. 估计平均奖励:最简单的方法与更一般的方法

在强化学习中,我们经常需要估计智能体在当前策略 π \pi π 下的平均奖励 r ( π ) r(\pi) r(π)。文中给出了最简单的方法——维护一个“运行和(或运行均值)”,以及一个更一般的“步长更新”方法。

1.1 运行和 / 运行均值

文中首先写道:

R ˉ t = ∑ k = 1 t R k . \bar{R}_t = \sum_{k=1}^{t} R_k. Rˉt=k=1tRk.

从字面来看,这个公式表示: R ˉ t \bar{R}_t Rˉt 是前 t t t累积奖励。通常,为了得到真正的“平均”值,但是我更倾向于

R ˉ t = 1 t ∑ k = 1 t R k , \bar{R}_t = \frac{1}{t}\sum_{k=1}^{t} R_k, Rˉt=t1k=1tRk,

核心思想:对所观测到的奖励做简单的累加(或累加+除以步数),即可得到一个无偏估计(如果所有 R k R_k Rk 独立同分布,或来自一个平稳过程)。

1.2 带步长参数的更新

文中接着给出了一个更通用的更新方式:

R ˉ t + 1 ≐ R ˉ t + β t ( R t + 1 − R ˉ t ) , (4) \bar{R}_{t+1} \doteq \bar{R}_t + \beta_t \bigl(R_{t+1} - \bar{R}_t\bigr), \tag{4} Rˉt+1Rˉt+βt(Rt+1Rˉt),(4)

这里的 β t \beta_t βt 是一个步长参数(或称学习率)。若 β t = 1 t \beta_t = \frac{1}{t} βt=t1(或近似 1 t \frac{1}{t} t1),那么这正是经典的“样本平均”更新。如果使用一个固定的小步长(如 β t = 0.01 \beta_t = 0.01 βt=0.01),则会得到一个指数平滑的移动平均,对最近的奖励更敏感,对过去的奖励淡忘。

  • 优点:在非平稳环境或策略不断变化时,固定小步长能让估计跟上最新奖励水平;
  • 无偏条件:Robbins & Monro (1951) 提出了保证收敛和无偏的一些条件,最常见的便是 ∑ t β t = ∞ \sum_t \beta_t = \infty tβt= ∑ t β t 2 < ∞ \sum_t \beta_t^2 < \infty tβt2<,确保在无限步后收敛。

小例子
情景描述

假设:

  • 智能体每步获得的奖励大约为10,
  • 但由于环境或策略调整,这个奖励会逐渐增加(比如由于某种正反馈机制或逐步提升的任务难度)。

为了在算法中实时估计这个平均奖励,我们采用一个逐步更新公式来不断修正估计值 R ˉ t \bar{R}_t Rˉt R ˉ t + 1 = R ˉ t + β t ( R t + 1 − R ˉ t ) , \bar{R}_{t+1} = \bar{R}_t + \beta_t \bigl(R_{t+1} - \bar{R}_t\bigr), Rˉt+1=Rˉt+βt(Rt+1Rˉt), 其中, β t \beta_t βt 是更新的步长,这里固定为0.01。

详细的数值演示

假设我们初始时刻 t = 0 t=0 t=0 的平均奖励估计为: R ˉ 0 = 10. \bar{R}_0 = 10. Rˉ0=10.

第1步:

  • 智能体在第1步获得奖励 R 1 = 10.2 R_1 = 10.2 R1=10.2(略高于10)。
  • 更新公式: R ˉ 1 = R ˉ 0 + 0.01 × ( R 1 − R ˉ 0 ) = 10 + 0.01 × ( 10.2 − 10 ) . \bar{R}_1 = \bar{R}_0 + 0.01 \times (R_1 - \bar{R}_0) = 10 + 0.01 \times (10.2 - 10). Rˉ1=Rˉ0+0.01×(R1Rˉ0)=10+0.01×(10.210).
  • 计算: 10.2 − 10 = 0.2 , 0.01 × 0.2 = 0.002. 10.2 - 10 = 0.2,\quad 0.01 \times 0.2 = 0.002. 10.210=0.2,0.01×0.2=0.002.
  • 所以, R ˉ 1 = 10 + 0.002 = 10.002. \bar{R}_1 = 10 + 0.002 = 10.002. Rˉ1=10+0.002=10.002.

第2步:

  • 在第2步,假设智能体获得奖励 R 2 = 10.5 R_2 = 10.5 R2=10.5(继续增加)。
  • 现在用更新公式: R ˉ 2 = R ˉ 1 + 0.01 × ( R 2 − R ˉ 1 ) = 10.002 + 0.01 × ( 10.5 − 10.002 ) . \bar{R}_2 = \bar{R}_1 + 0.01 \times (R_2 - \bar{R}_1) = 10.002 + 0.01 \times (10.5 - 10.002). Rˉ2=Rˉ1+0.01×(R2Rˉ1)=10.002+0.01×(10.510.002).
  • 计算: 10.5 − 10.002 = 0.498 , 0.01 × 0.498 = 0.00498. 10.5 - 10.002 = 0.498,\quad 0.01 \times 0.498 = 0.00498. 10.510.002=0.498,0.01×0.498=0.00498.
  • 因此, R ˉ 2 = 10.002 + 0.00498 ≈ 10.007. \bar{R}_2 = 10.002 + 0.00498 \approx 10.007. Rˉ2=10.002+0.0049810.007.

第3步:

  • 假设在第3步,奖励 R 3 = 10.8 R_3 = 10.8 R3=10.8
  • 更新: R ˉ 3 = R ˉ 2 + 0.01 × ( R 3 − R ˉ 2 ) ≈ 10.007 + 0.01 × ( 10.8 − 10.007 ) . \bar{R}_3 = \bar{R}_2 + 0.01 \times (R_3 - \bar{R}_2) \approx 10.007 + 0.01 \times (10.8 - 10.007). Rˉ3=Rˉ2+0.01×(R3Rˉ2)10.007+0.01×(10.810.007).
  • 计算: 10.8 − 10.007 = 0.793 , 0.01 × 0.793 = 0.00793. 10.8 - 10.007 = 0.793,\quad 0.01 \times 0.793 = 0.00793. 10.810.007=0.793,0.01×0.793=0.00793.
  • 所以, R ˉ 3 ≈ 10.007 + 0.00793 ≈ 10.015. \bar{R}_3 \approx 10.007 + 0.00793 \approx 10.015. Rˉ310.007+0.0079310.015.

分析

  • 逐步更新的意义: 每次更新仅移动当前估计值的1%(因为 β t = 0.01 \beta_t=0.01 βt=0.01 )向当前观察的奖励靠近。这样, R ˉ t \bar{R}_t Rˉt 不会大幅跳动,而是平滑地、缓慢地追踪真实的奖励平均值

  • 对奖励变化的响应: 如果奖励水平逐渐上升,比如从10逐步增至11,这个更新机制会慢慢“捕捉到”这个上升趋势,因为每一步都在考虑最新的奖励与当前估计之间的差值。

  • 步长的作用: 如果步长太大(比如0.5),那么估计会迅速调整,但可能会产生噪声;如果步长太小,更新会非常缓慢,难以及时跟上真实平均奖励的变化。这里选择0.01是一个平衡的做法,使得估计既平滑又能适应缓慢变化。

总结

  • 初始值:开始时,我们认为平均奖励大约是10。
  • 更新过程:每次收到新的奖励,就计算新奖励与当前估计的差距,然后按照步长(1%)调整估计。
  • 结果:随着时间推移, R ˉ t \bar{R}_t Rˉt 会逐步接近真实的平均奖励水平,同时由于采用固定步长,它还能对奖励的慢变化作出响应,而不会被单次的偶然奖励所扰动。

简单的奖励中心化(公式(4))几乎可以用于任何强化学习算法。例如,它可以与传统时序差分(TD)学习(见Sutton, 1988a)结合使用,以学习状态值函数估计 V ~ γ : S → R \tilde{V}^{\gamma}: \mathcal{S} \to \mathbb{R} V~γ:SR,其更新方式如下,在 t t t t + 1 t+1 t+1的状态转移过程中进行:

V ~ t + 1 γ ( S t ) ≐ V ~ t γ ( S t ) + α t [ ( R t + 1 − R ˉ t ) + γ V ~ t γ ( S t + 1 ) − V ~ t γ ( S t ) ] , (5) \tilde{V}_{t+1}^{\gamma}(S_t) \doteq \tilde{V}_{t}^{\gamma}(S_t) + \alpha_t \left[ (R_{t+1} - \bar{R}_t) + \gamma \tilde{V}_{t}^{\gamma}(S_{t+1}) - \tilde{V}_{t}^{\gamma}(S_t) \right], \tag{5} V~t+1γ(St)V~tγ(St)+αt[(Rt+1Rˉt)+γV~tγ(St+1)V~tγ(St)],(5)

其中,对于所有 s ≠ S t s \neq S_t s=St V ~ t + 1 γ ( s ) ≐ V ~ t γ ( s ) \tilde{V}_{t+1}^{\gamma}(s) \doteq \tilde{V}_{t}^{\gamma}(s) V~t+1γ(s)V~tγ(s),其中 α t > 0 \alpha_t > 0 αt>0是步长参数。

2. 将奖励中心化用于时序差分(TD)学习

时序差分(TD)是强化学习中学习值函数的基础算法之一。标准的一步TD更新(如 “TD(0)”)在学习状态值函数 V γ V^\gamma Vγ 时,通常是:

V t + 1 γ ( S t ) ≐ V t γ ( S t ) + α t [ R t + 1 + γ V t γ ( S t + 1 ) − V t γ ( S t ) ] . V_{t+1}^{\gamma}(S_t) \doteq V_t^{\gamma}(S_t) + \alpha_t \Bigl[R_{t+1} + \gamma\,V_t^{\gamma}(S_{t+1}) - V_t^{\gamma}(S_t)\Bigr]. Vt+1γ(St)Vtγ(St)+αt[Rt+1+γVtγ(St+1)Vtγ(St)].

现在,如果我们想中心化奖励,就需要将“奖励” R t + 1 R_{t+1} Rt+1 替换为“ R t + 1 − R ˉ t R_{t+1} - \bar{R}_t Rt+1Rˉt”。这样就可以去除奖励中的常数偏移,使得学习关注的是“相对于当前平均奖励”的增量。

2.1 公式(5) 的含义

文中给出的更新式:

V ~ t + 1 γ ( S t ) ≐ V ~ t γ ( S t ) + α t [ ( R t + 1 − R ˉ t ) + γ V ~ t γ ( S t + 1 ) − V ~ t γ ( S t ) ] , (5) \tilde{V}_{t+1}^{\gamma}(S_t) \doteq \tilde{V}_{t}^{\gamma}(S_t) + \alpha_t \Bigl[ (R_{t+1} - \bar{R}_t) + \gamma\,\tilde{V}_{t}^{\gamma}(S_{t+1}) - \tilde{V}_{t}^{\gamma}(S_t)\Bigr], \tag{5} V~t+1γ(St)V~tγ(St)+αt[(Rt+1Rˉt)+γV~tγ(St+1)V~tγ(St)],(5)

其中:

  • V ~ t γ \tilde{V}_t^\gamma V~tγ 表示中心化后的值函数估计;
  • R t + 1 − R ˉ t R_{t+1} - \bar{R}_t Rt+1Rˉt 是“当前奖励减去平均奖励”的中心化操作;
  • γ \gamma γ 是折扣因子;
  • α t \alpha_t αt 是TD更新的步长参数。

对于所有 s ≠ S t s \neq S_t s=St V ~ t + 1 γ ( s ) ≐ V ~ t γ ( s ) \tilde{V}_{t+1}^{\gamma}(s) \doteq \tilde{V}_{t}^{\gamma}(s) V~t+1γ(s)V~tγ(s) 表示只更新当前访问到的状态(典型的在线、逐步更新)。即我们规定对于所有 s ≠ S t s \neq S_t s=St(即当前未访问的状态),其值函数保持不变: V ~ t + 1 γ ( s ) ≐ V ~ t γ ( s ) . \tilde{V}_{t+1}^{\gamma}(s) \doteq \tilde{V}_{t}^{\gamma}(s). V~t+1γ(s)V~tγ(s).

直观解释

  • 如果 R t + 1 R_{t+1} Rt+1 大于当前估计的平均奖励,那么它会带来一个正的增量,说明这个状态的价值比想象中更好;
  • 如果 R t + 1 R_{t+1} Rt+1 小于平均奖励,则增量为负,说明此状态的表现较差。

这样就能让值函数专注于“该状态是否高于或低于全局平均”,而不会被奖励整体偏移所干扰。


具体例子与数值演示

假设有一个简单的环境,状态空间为 { A , B , C } \{A, B, C\} {A,B,C}。在某个时刻 t t t 的值函数估计为:

  • V ~ t γ ( A ) = 1.0 \tilde{V}_t^\gamma(A) = 1.0 V~tγ(A)=1.0
  • V ~ t γ ( B ) = 2.0 \tilde{V}_t^\gamma(B) = 2.0 V~tγ(B)=2.0
  • V ~ t γ ( C ) = 3.0 \tilde{V}_t^\gamma(C) = 3.0 V~tγ(C)=3.0

场景设定

  • 当前时刻 t t t,智能体处于状态 B B B,也就是 S t = B S_t = B St=B
  • 观察到的奖励为 R t + 1 = 8 R_{t+1} = 8 Rt+1=8
  • 下一状态 S t + 1 = C S_{t+1} = C St+1=C
  • 折扣因子 γ = 0.9 \gamma = 0.9 γ=0.9
  • 平均奖励估计为 R ˉ t = 5 \bar{R}_t = 5 Rˉt=5
  • TD更新步长 α t = 0.1 \alpha_t = 0.1 αt=0.1

TD更新公式(中心化版)

对于当前访问的状态 B B B,TD更新公式是: V ~ t + 1 γ ( B ) = V ~ t γ ( B ) + α t [ ( R t + 1 − R ˉ t ) + γ V ~ t γ ( S t + 1 ) − V ~ t γ ( B ) ] . \tilde{V}_{t+1}^{\gamma}(B) = \tilde{V}_{t}^{\gamma}(B) + \alpha_t \Bigl[(R_{t+1} - \bar{R}_t) + \gamma\,\tilde{V}_{t}^{\gamma}(S_{t+1}) - \tilde{V}_{t}^{\gamma}(B)\Bigr]. V~t+1γ(B)=V~tγ(B)+αt[(Rt+1Rˉt)+γV~tγ(St+1)V~tγ(B)].

把具体数值代入:

  1. 计算TD误差(TD error): δ t = ( 8 − 5 ) + 0.9 × V ~ t γ ( C ) − V ~ t γ ( B ) . \delta_t = (8 - 5) + 0.9 \times \tilde{V}_t^\gamma(C) - \tilde{V}_t^\gamma(B). δt=(85)+0.9×V~tγ(C)V~tγ(B).
    其中, V ~ t γ ( C ) = 3.0 \tilde{V}_t^\gamma(C) = 3.0 V~tγ(C)=3.0 V ~ t γ ( B ) = 2.0 \tilde{V}_t^\gamma(B) = 2.0 V~tγ(B)=2.0
    δ t = 3 + 0.9 × 3.0 − 2.0 = 3 + 2.7 − 2.0 = 3.7. \delta_t = 3 + 0.9 \times 3.0 - 2.0 = 3 + 2.7 - 2.0 = 3.7. δt=3+0.9×3.02.0=3+2.72.0=3.7.

  2. 更新状态 B B B 的值函数: V ~ t + 1 γ ( B ) = 2.0 + 0.1 × 3.7 = 2.0 + 0.37 = 2.37. \tilde{V}_{t+1}^{\gamma}(B) = 2.0 + 0.1 \times 3.7 = 2.0 + 0.37 = 2.37. V~t+1γ(B)=2.0+0.1×3.7=2.0+0.37=2.37.

对于未访问的状态

按照约定,对于所有 s ≠ S t s \neq S_t s=St,我们不做任何更新:

  • 对于 A A A V ~ t + 1 γ ( A ) ≐ V ~ t γ ( A ) = 1.0. \tilde{V}_{t+1}^{\gamma}(A) \doteq \tilde{V}_{t}^{\gamma}(A) = 1.0. V~t+1γ(A)V~tγ(A)=1.0.
  • 对于 C C C V ~ t + 1 γ ( C ) ≐ V ~ t γ ( C ) = 3.0. \tilde{V}_{t+1}^{\gamma}(C) \doteq \tilde{V}_{t}^{\gamma}(C) = 3.0. V~t+1γ(C)V~tγ(C)=3.0.

总结更新后的结果

状态 t t t 时刻的 V ~ t γ \tilde{V}_t^\gamma V~tγ t + 1 t+1 t+1 时刻的 V ~ t + 1 γ \tilde{V}_{t+1}^\gamma V~t+1γ
A1.01.0
B2.02.37
C3.03.0

从上表可以看到,只有当前访问的状态 B B B 被更新了,而其他状态 A A A C C C 的值保持不变。这就是“只更新当前访问到的状态”的含义,也是在线TD学习中常见的逐步更新策略。

在我们的第一组实验中,我们使用了公式(5)的四种算法变体,它们仅在 R ˉ t \bar{R}_t Rˉt的定义上有所不同。

  • 第一种算法设定 R ˉ t = 0 , ∀ t \bar{R}_t=0, \forall t Rˉt=0,t,因此不涉及奖励中心化
  • 第二种算法使用了平均奖励的最优估计 R ˉ t = r ( π ) , ∀ t \bar{R}_t=r(\pi), \forall t Rˉt=r(π),t,我们称之为oracle中心化
  • 第三种算法采用简单奖励中心化,如公式(4)所示。
  • 第四种算法使用了一种更复杂的奖励中心化方法,该方法将在下一节讨论。

3. 四种算法变体:不同的 R ˉ t \bar{R}_t Rˉt 定义

在文中第一组实验中,他们使用了公式(5) 的四种变体,唯一的差别在于 R ˉ t \bar{R}_t Rˉt 的定义方式:

  1. 第一种算法 R ˉ t = 0 , ∀ t \bar{R}_t = 0,\ \forall t Rˉt=0, t

    • 不涉及奖励中心化
    • 等价于在公式(5)中,直接把 R t + 1 − R ˉ t R_{t+1} - \bar{R}_t Rt+1Rˉt 写成 R t + 1 R_{t+1} Rt+1
    • 这是传统的 TD(0) 更新,没有任何去偏移处理。
  2. 第二种算法 R ˉ t = r ( π ) , ∀ t \bar{R}_t = r(\pi),\ \forall t Rˉt=r(π), t

    • 这里 R ˉ t \bar{R}_t Rˉt 被设成真实的平均奖励(oracle)——也就是我们事先知道策略 π \pi π 的平均奖励 r ( π ) r(\pi) r(π)
    • 在现实中,这通常是无法直接获得的(因为我们不知道真实策略性能),但作为理想情况可以对比,看看如果完美地中心化奖励会如何。
  3. 第三种算法:采用简单奖励中心化(公式(4))

    • 即在线地、递增地去估计平均奖励。
    • 这是最符合实际的一种做法:在不知道 r ( π ) r(\pi) r(π) 的情况下,随着数据收集,不断更新对平均奖励的估计 R ˉ t \bar{R}_t Rˉt
    • 对应更新式: R ˉ t + 1 ← R ˉ t + β t ( R t + 1 − R ˉ t ) \bar{R}_{t+1} \leftarrow \bar{R}_t + \beta_t (R_{t+1} - \bar{R}_t) Rˉt+1Rˉt+βt(Rt+1Rˉt)
    • 然后在TD更新中把 R t + 1 R_{t+1} Rt+1 替换为 ( R t + 1 − R ˉ t ) (R_{t+1} - \bar{R}_t) (Rt+1Rˉt)
  4. 第四种算法:使用更复杂的奖励中心化方法

    • 文中表示会在下一节讨论,可能包括一些改进或变体(例如,对不同状态或动作进行差异化估计,或者在非平稳环境中有更好的追踪机制)。
    • 其本质仍是“先估计平均奖励,再减去”这一思路,只是实现更复杂。

该环境是一个具有七个连续状态的MDP,每个状态都有两个可选动作。从最右侧状态执行右移动作会转移到中间状态并获得奖励+7,而从最左侧状态执行左移动作会转移到中间状态并获得奖励+1;所有其他状态转移的奖励均为0。

目标策略在每个状态下以相等概率选择左右两个动作,即 π ( left ∣ ⋅ ) = π ( right ∣ ⋅ ) = 0.5 \pi(\text{left}|\cdot) = \pi(\text{right}|\cdot) = 0.5 π(left)=π(right)=0.5。该策略对应的平均奖励 r ( π ) = 0.25 r(\pi) = 0.25 r(π)=0.25

r ( π ) = 0.25 r(\pi) = 0.25 r(π)=0.25是如何得到的?


1. 环境描述与奖励结构

我们有一个七个连续状态的 MDP,状态记为 1 , 2 , 3 , 4 , 5 , 6 , 7 1,2,3,4,5,6,7 1,2,3,4,5,6,7(按从左到右排列),其中状态 1 是最左侧,状态 7 是最右侧,状态 4 是中间状态。每个状态都有两个动作:左和右。

  • 特殊奖励:

    • 最左侧状态 1 1 1,如果执行左移动作,则转移到中间状态 4 4 4 并获得奖励 + 1 +1 +1
    • 最右侧状态 7 7 7,如果执行右移动作,则转移到中间状态 4 4 4 并获得奖励 + 7 +7 +7
  • 其他转移:

    • 在状态 1 1 1 若选择右移动作,则正常转移到状态 2 2 2,奖励为 0 0 0
    • 在状态 7 7 7 若选择左移动作,则正常转移到状态 6 6 6,奖励为 0 0 0
    • 对于状态 2 , 3 , 4 , 5 , 6 2,3,4,5,6 2,3,4,5,6,无论左还是右动作,都进行相邻状态的正常转移,奖励均为 0 0 0
  • 目标策略: 在每个状态下,左右两动作均以 0.5 0.5 0.5 的概率执行。


2. 各状态下的即时奖励

r ( s , π ) r(s,\pi) r(s,π) 为在状态 s s s 下执行策略 π \pi π 时获得的即时奖励的期望:

  • 状态 1:

    • 执行左:奖励 + 1 +1 +1,执行右:奖励 0 0 0
    • 因为各 50 % 50\% 50%,所以
      r ( 1 , π ) = 0.5 × 1 + 0.5 × 0 = 0.5. r(1,\pi) = 0.5\times 1 + 0.5\times 0 = 0.5. r(1,π)=0.5×1+0.5×0=0.5.
  • 状态 7:

    • 执行右:奖励 + 7 +7 +7,执行左:奖励 0 0 0
    • 因此
      r ( 7 , π ) = 0.5 × 7 + 0.5 × 0 = 3.5. r(7,\pi) = 0.5\times 7 + 0.5\times 0 = 3.5. r(7,π)=0.5×7+0.5×0=3.5.
  • 其他状态 s = 2 , 3 , 4 , 5 , 6 s=2,3,4,5,6 s=2,3,4,5,6 无论选择哪一动作,奖励均为 0 0 0,即 r ( s , π ) = 0. r(s,\pi)=0. r(s,π)=0.


3. 构造状态转移概率

根据问题描述和常规的“向相邻状态转移”的规则,可以写出各状态的转移情况:

  • 状态 1:

    • 左动作(概率 0.5):转移到状态 4(特殊转移,奖励 +1)。
    • 右动作(概率 0.5):转移到状态 2(正常转移,奖励 0)。
  • 状态 2:

    • 左(0.5):转移到状态 1。
    • 右(0.5):转移到状态 3。
  • 状态 3:

    • 左(0.5):转移到状态 2。
    • 右(0.5):转移到状态 4.
  • 状态 4:

    • 左(0.5):转移到状态 3。
    • 右(0.5):转移到状态 5.
  • 状态 5:

    • 左(0.5):转移到状态 4。
    • 右(0.5):转移到状态 6.
  • 状态 6:

    • 左(0.5):转移到状态 5。
    • 右(0.5):转移到状态 7.
  • 状态 7:

    • 左(0.5):转移到状态 6。
    • 右(0.5):转移到状态 4(特殊转移,奖励 +7)。

注意:奖励不影响状态转移的概率,但在计算平均奖励时,我们会考虑各状态下执行策略获得的即时奖励。


4. 求解状态的稳态分布

μ ( s ) \mu(s) μ(s) 为状态 s s s 的稳态概率。利用马尔可夫链的平衡方程,逐个写出各状态的入流概率(所有转移到该状态的概率之和):

  1. 状态 1: 只有来自状态 2 的左移动作到达状态 1: μ ( 1 ) = 0.5 μ ( 2 ) . \mu(1) = 0.5\,\mu(2). μ(1)=0.5μ(2). 因此, μ ( 2 ) = 2 μ ( 1 ) \mu(2) = 2\,\mu(1) μ(2)=2μ(1).

  2. 状态 2: 来自状态 1的右( 0.5 μ ( 1 ) 0.5\,\mu(1) 0.5μ(1))和状态 3的左( 0.5 μ ( 3 ) 0.5\,\mu(3) 0.5μ(3)): μ ( 2 ) = 0.5 μ ( 1 ) + 0.5 μ ( 3 ) . \mu(2) = 0.5\,\mu(1) + 0.5\,\mu(3). μ(2)=0.5μ(1)+0.5μ(3). 代入 μ ( 2 ) = 2 μ ( 1 ) \mu(2)=2\mu(1) μ(2)=2μ(1) 得: 2 μ ( 1 ) = 0.5 μ ( 1 ) + 0.5 μ ( 3 ) ⇒ μ ( 3 ) = 3 μ ( 1 ) . 2\mu(1) = 0.5\,\mu(1) + 0.5\,\mu(3) \quad\Rightarrow\quad \mu(3) = 3\,\mu(1). 2μ(1)=0.5μ(1)+0.5μ(3)μ(3)=3μ(1).

  3. 状态 3: 来自状态 2的右( 0.5 μ ( 2 ) 0.5\,\mu(2) 0.5μ(2))和状态 4的左( 0.5 μ ( 4 ) 0.5\,\mu(4) 0.5μ(4)): μ ( 3 ) = 0.5 μ ( 2 ) + 0.5 μ ( 4 ) . \mu(3) = 0.5\,\mu(2) + 0.5\,\mu(4). μ(3)=0.5μ(2)+0.5μ(4). 代入 μ ( 2 ) = 2 μ ( 1 ) \mu(2)=2\mu(1) μ(2)=2μ(1) μ ( 3 ) = 3 μ ( 1 ) \mu(3)=3\mu(1) μ(3)=3μ(1) 3 μ ( 1 ) = 0.5 × 2 μ ( 1 ) + 0.5 μ ( 4 ) ⇒ 3 μ ( 1 ) = μ ( 1 ) + 0.5 μ ( 4 ) . 3\mu(1) = 0.5\times2\mu(1) + 0.5\,\mu(4) \quad\Rightarrow\quad 3\mu(1) = \mu(1) + 0.5\,\mu(4). 3μ(1)=0.5×2μ(1)+0.5μ(4)3μ(1)=μ(1)+0.5μ(4). 得: 0.5 μ ( 4 ) = 2 μ ( 1 ) ⇒ μ ( 4 ) = 4 μ ( 1 ) . 0.5\,\mu(4) = 2\mu(1) \quad\Rightarrow\quad \mu(4) = 4\mu(1). 0.5μ(4)=2μ(1)μ(4)=4μ(1).

  4. 状态 4: 来自多个状态:

    • 状态 1 的左: 0.5 μ ( 1 ) 0.5\,\mu(1) 0.5μ(1)
    • 状态 3 的右: 0.5 μ ( 3 ) 0.5\,\mu(3) 0.5μ(3)
    • 状态 5 的左: 0.5 μ ( 5 ) 0.5\,\mu(5) 0.5μ(5)
    • 状态 7 的右: 0.5 μ ( 7 ) 0.5\,\mu(7) 0.5μ(7)
      则: μ ( 4 ) = 0.5 μ ( 1 ) + 0.5 μ ( 3 ) + 0.5 μ ( 5 ) + 0.5 μ ( 7 ) . \mu(4) = 0.5\,\mu(1) + 0.5\,\mu(3) + 0.5\,\mu(5) + 0.5\,\mu(7). μ(4)=0.5μ(1)+0.5μ(3)+0.5μ(5)+0.5μ(7). 已知 μ ( 4 ) = 4 μ ( 1 ) \mu(4)=4\mu(1) μ(4)=4μ(1) μ ( 3 ) = 3 μ ( 1 ) \mu(3)=3\mu(1) μ(3)=3μ(1),因此: 4 μ ( 1 ) = 0.5 μ ( 1 ) + 0.5 × 3 μ ( 1 ) + 0.5 [ μ ( 5 ) + μ ( 7 ) ] . 4\mu(1) = 0.5\,\mu(1) + 0.5\times 3\mu(1) + 0.5\,\bigl[\mu(5)+\mu(7)\bigr]. 4μ(1)=0.5μ(1)+0.5×3μ(1)+0.5[μ(5)+μ(7)]. 计算前两项: 0.5 μ ( 1 ) + 1.5 μ ( 1 ) = 2 μ ( 1 ) 0.5\,\mu(1)+1.5\,\mu(1)=2\mu(1) 0.5μ(1)+1.5μ(1)=2μ(1)。故有: 4 μ ( 1 ) = 2 μ ( 1 ) + 0.5 [ μ ( 5 ) + μ ( 7 ) ] ⇒ μ ( 5 ) + μ ( 7 ) = 4 μ ( 1 ) . 4\mu(1) = 2\mu(1) + 0.5\bigl[\mu(5)+\mu(7)\bigr] \quad\Rightarrow\quad \mu(5)+\mu(7) = 4\mu(1). 4μ(1)=2μ(1)+0.5[μ(5)+μ(7)]μ(5)+μ(7)=4μ(1).
  5. 状态 5: 来自状态 4的右( 0.5 μ ( 4 ) 0.5\,\mu(4) 0.5μ(4))和状态 6的左( 0.5 μ ( 6 ) 0.5\,\mu(6) 0.5μ(6)): μ ( 5 ) = 0.5 μ ( 4 ) + 0.5 μ ( 6 ) . \mu(5) = 0.5\,\mu(4) + 0.5\,\mu(6). μ(5)=0.5μ(4)+0.5μ(6).

  6. 状态 6: 来自状态 5的右( 0.5 μ ( 5 ) 0.5\,\mu(5) 0.5μ(5))和状态 7的左( 0.5 μ ( 7 ) 0.5\,\mu(7) 0.5μ(7)): μ ( 6 ) = 0.5 μ ( 5 ) + 0.5 μ ( 7 ) . \mu(6) = 0.5\,\mu(5) + 0.5\,\mu(7). μ(6)=0.5μ(5)+0.5μ(7).

  7. 状态 7: 只有来自状态 6的右: μ ( 7 ) = 0.5 μ ( 6 ) . \mu(7) = 0.5\,\mu(6). μ(7)=0.5μ(6). 故有: μ ( 6 ) = 2 μ ( 7 ) . \mu(6) = 2\,\mu(7). μ(6)=2μ(7).

接下来利用状态 6 与状态 7 的关系代入状态 5、6的方程:

  • 状态 6方程: 2 μ ( 7 ) = 0.5 μ ( 5 ) + 0.5 μ ( 7 ) ⇒ 1.5 μ ( 7 ) = 0.5 μ ( 5 ) 2\mu(7) = 0.5\,\mu(5) + 0.5\,\mu(7) \quad\Rightarrow\quad 1.5\mu(7) = 0.5\,\mu(5) 2μ(7)=0.5μ(5)+0.5μ(7)1.5μ(7)=0.5μ(5) 得: μ ( 5 ) = 3 μ ( 7 ) . \mu(5) = 3\,\mu(7). μ(5)=3μ(7).

  • 代入状态 4中的关系 μ ( 5 ) + μ ( 7 ) = 4 μ ( 1 ) \mu(5)+\mu(7)=4\mu(1) μ(5)+μ(7)=4μ(1) 3 μ ( 7 ) + μ ( 7 ) = 4 μ ( 7 ) = 4 μ ( 1 ) ⇒ μ ( 7 ) = μ ( 1 ) . 3\mu(7) + \mu(7) = 4\mu(7) = 4\mu(1) \quad\Rightarrow\quad \mu(7) = \mu(1). 3μ(7)+μ(7)=4μ(7)=4μ(1)μ(7)=μ(1). 则:
    μ ( 5 ) = 3 μ ( 1 ) , μ ( 6 ) = 2 μ ( 7 ) = 2 μ ( 1 ) . \mu(5) = 3\,\mu(1) \quad\text{,} \quad \mu(6)=2\,\mu(7)=2\,\mu(1). μ(5)=3μ(1)μ(6)=2μ(7)=2μ(1).

总结各状态的稳态概率均以 μ ( 1 ) \mu(1) μ(1) 为基准: μ ( 1 ) = μ ( 1 ) , μ ( 2 ) = 2 μ ( 1 ) , μ ( 3 ) = 3 μ ( 1 ) , μ ( 4 ) = 4 μ ( 1 ) , μ ( 5 ) = 3 μ ( 1 ) , μ ( 6 ) = 2 μ ( 1 ) , μ ( 7 ) = μ ( 1 ) . \begin{aligned} \mu(1) &= \mu(1),\\[1mm] \mu(2) &= 2\,\mu(1),\\[1mm] \mu(3) &= 3\,\mu(1),\\[1mm] \mu(4) &= 4\,\mu(1),\\[1mm] \mu(5) &= 3\,\mu(1),\\[1mm] \mu(6) &= 2\,\mu(1),\\[1mm] \mu(7) &= \mu(1). \end{aligned} μ(1)μ(2)μ(3)μ(4)μ(5)μ(6)μ(7)=μ(1),=2μ(1),=3μ(1),=4μ(1),=3μ(1),=2μ(1),=μ(1).利用归一化条件: μ ( 1 ) + μ ( 2 ) + ⋯ + μ ( 7 ) = ( 1 + 2 + 3 + 4 + 3 + 2 + 1 ) μ ( 1 ) = 16 μ ( 1 ) = 1 , \mu(1)+\mu(2)+\cdots+\mu(7) = (1+2+3+4+3+2+1)\mu(1)= 16\,\mu(1)=1, μ(1)+μ(2)++μ(7)=(1+2+3+4+3+2+1)μ(1)=16μ(1)=1, μ ( 1 ) = 1 16 . \mu(1)=\frac{1}{16}. μ(1)=161. 因此,各状态的稳态概率为: μ ( 1 ) = 1 16 , μ ( 2 ) = 2 16 , μ ( 3 ) = 3 16 , μ ( 4 ) = 4 16 , μ ( 5 ) = 3 16 , μ ( 6 ) = 2 16 , μ ( 7 ) = 1 16 . \mu(1)=\frac{1}{16},\quad \mu(2)=\frac{2}{16},\quad \mu(3)=\frac{3}{16},\quad \mu(4)=\frac{4}{16},\quad \mu(5)=\frac{3}{16},\quad \mu(6)=\frac{2}{16},\quad \mu(7)=\frac{1}{16}. μ(1)=161,μ(2)=162,μ(3)=163,μ(4)=164,μ(5)=163,μ(6)=162,μ(7)=161.


5. 计算长期平均奖励 r ( π ) r(\pi) r(π)

长期平均奖励的计算公式为: r ( π ) = ∑ s = 1 7 μ ( s ) r ( s , π ) . r(\pi)=\sum_{s=1}^{7}\mu(s)\,r(s,\pi). r(π)=s=17μ(s)r(s,π). 而我们只在状态 1 和状态 7 有非零即时奖励:

  • 状态 1 的即时奖励 r ( 1 , π ) = 0.5 r(1,\pi)=0.5 r(1,π)=0.5
  • 状态 7 的即时奖励 r ( 7 , π ) = 3.5 r(7,\pi)=3.5 r(7,π)=3.5

故: r ( π ) = μ ( 1 ) × 0.5 + μ ( 7 ) × 3.5. r(\pi) = \mu(1)\times 0.5 + \mu(7)\times 3.5. r(π)=μ(1)×0.5+μ(7)×3.5. 代入 μ ( 1 ) = μ ( 7 ) = 1 16 \mu(1)=\mu(7)=\frac{1}{16} μ(1)=μ(7)=161 r ( π ) = 1 16 × 0.5 + 1 16 × 3.5 = 0.5 + 3.5 16 = 4 16 = 0.25. r(\pi) = \frac{1}{16}\times 0.5 + \frac{1}{16}\times 3.5 = \frac{0.5+3.5}{16} = \frac{4}{16} = 0.25. r(π)=161×0.5+161×3.5=160.5+3.5=164=0.25.

我们的第一个实验将四种算法应用于七状态MDP,并分别使用两个折扣因子 γ = 0.9 \gamma=0.9 γ=0.9 γ = 0.99 \gamma=0.99 γ=0.99。所有算法都在一系列步长参数 α \alpha α的不同取值下运行。对于那些学习进行奖励中心化的算法,我们还测试了不同的 η \eta η取值,其中 β = η α \beta=\eta\alpha β=ηα不失一般性)。

每种算法的每组参数设置都运行50,000个时间步,并重复50次。完整的实验细节见附录C

在时间 t t t,我们的性能度量均方根值误差(RMSVE)(见Sutton & Barto, 2018,第9.2节),其中:

  • 对于中心化算法,RMSVE计算的是 V ~ t γ \tilde{V}_{t}^{\gamma} V~tγ v ~ π γ \tilde{v}_{\pi}^{\gamma} v~πγ之间的误差。
  • 对于未中心化的算法,RMSVE计算的是 V ~ t γ \tilde{V}_{t}^{\gamma} V~tγ v π γ v_{\pi}^{\gamma} vπγ之间的误差。

实验过程中没有单独的训练和测试阶段

在强化学习中,“on-policy”(基于当前策略)和“off-policy”(基于目标策略)是两种基本的学习范式,它们在数据采集、策略更新和目标策略与行为策略之间的关系上存在本质区别。


1. 定义与基本思想

1.1 On-policy 学习

  • 定义:在 on-policy 学习中,智能体使用同一个策略来生成数据(行为策略)和进行学习(目标策略)。也就是说,所采集的样本数据是由当前正在改进的策略产生的,因此更新时考虑的是当前策略在未来的表现。

  • 特点

    • 直接性:学习直接针对当前行为策略。
    • 样本利用率:由于数据与当前策略紧密相关,学习较为稳定,但可能在探索和利用之间需要仔细权衡。
  • 经典算法:例如 SARSA、Policy Gradient(如 REINFORCE)等。

1.2 Off-policy 学习

  • 定义:在 off-policy 学习中,数据采集策略(行为策略)和学习目标策略(目标策略)可以是不同的。也就是说,智能体可以利用历史数据或者其他来源的样本(可能来自不同策略),来学习最优策略。

  • 特点

    • 灵活性:可以利用经验回放(Experience Replay)或从其他策略中采样数据,充分利用历史信息。
    • 样本效率:允许利用更多数据,但由于目标策略与行为策略不一致,通常需要额外的修正(如重要性采样)以消除偏差。
  • 经典算法:例如 Q-learning、Deep Q-Network (DQN) 以及 Off-policy Actor-Critic(如 DDPG)等。


2. 具体例子与数值演示

假设我们有一个简单的网格世界任务,在一个 3 × 3 3 \times 3 3×3 的网格中,智能体的目标是从起始状态到达某个终点状态。每走一步奖励为 − 1 -1 1,到达终点奖励为 + 10 +10 +10。我们以 SARSA(on-policy)和 Q-learning(off-policy)来比较。

2.1 数值示例:状态-动作值更新

假设当前状态 s s s 下有两个可能动作:向右 ( a 1 a_1 a1) 和向下 ( a 2 a_2 a2)。

  • 初始 Q ( s , a ) Q(s,a) Q(s,a) 值全部设为 0。
  • 假设折扣因子 γ = 0.9 \gamma=0.9 γ=0.9,步长 α = 0.5 \alpha=0.5 α=0.5

On-policy(SARSA)更新示例

  1. 智能体在状态 s s s 选择动作 a 1 a_1 a1(例如,根据 ϵ \epsilon ϵ-greedy 策略选择)。
  2. 执行动作 a 1 a_1 a1,获得即时奖励 R = − 1 R= -1 R=1,并转移到新状态 s ′ s' s
  3. s ′ s' s 根据当前策略选择下一个动作,假设选择 a ′ a' a a 2 a_2 a2,当前 Q ( s ′ , a 2 ) = 0 Q(s',a_2)=0 Q(s,a2)=0
  4. SARSA 更新公式: Q ( s , a 1 ) ← Q ( s , a 1 ) + α [ R + γ Q ( s ′ , a ′ ) − Q ( s , a 1 ) ] . Q(s,a_1) \leftarrow Q(s,a_1) + \alpha \Bigl[ R + \gamma Q(s',a') - Q(s,a_1) \Bigr]. Q(s,a1)Q(s,a1)+α[R+γQ(s,a)Q(s,a1)]. 将数值代入: Q ( s , a 1 ) ← 0 + 0.5 [ − 1 + 0.9 × 0 − 0 ] = − 0.5. Q(s,a_1) \leftarrow 0 + 0.5 \Bigl[ -1 + 0.9 \times 0 - 0 \Bigr] = -0.5. Q(s,a1)0+0.5[1+0.9×00]=0.5.
    此时,因数据来源于当前策略,未来的更新总是依赖于当前策略选择的动作。

Off-policy(Q-learning)更新示例

  1. 智能体在状态 s s s 同样选择 a 1 a_1 a1,获得 R = − 1 R=-1 R=1,转移到 s ′ s' s
  2. 但 Q-learning 不需要用 s ′ s' s 下当前策略选择的动作,而是用 s ′ s' s 中最大 Q Q Q 值来更新,假设 s ′ s' s 中动作 a 1 a_1 a1 a 2 a_2 a2 Q Q Q 值均为 0,则: Q ( s , a 1 ) ← Q ( s , a 1 ) + α [ R + γ max ⁡ a Q ( s ′ , a ) − Q ( s , a 1 ) ] . Q(s,a_1) \leftarrow Q(s,a_1) + \alpha \Bigl[ R + \gamma \max_{a} Q(s',a) - Q(s,a_1) \Bigr]. Q(s,a1)Q(s,a1)+α[R+γamaxQ(s,a)Q(s,a1)]. 数值代入: Q ( s , a 1 ) ← 0 + 0.5 [ − 1 + 0.9 × 0 − 0 ] = − 0.5. Q(s,a_1) \leftarrow 0 + 0.5 \Bigl[ -1 + 0.9 \times 0 - 0 \Bigr] = -0.5. Q(s,a1)0+0.5[1+0.9×00]=0.5.
    虽然在这个简单例子中,两种方法的更新结果相同,但它们的关键区别在于后续在 s ′ s' s 的更新方式不同:
  • SARSA 使用的是当前策略选择的动作 a ′ a' a(可能不是最优动作),反映了当前行为的风险和探索策略。
  • Q-learning 使用的是 s ′ s' s 中最大 Q Q Q 值,直接逼近最优值函数,不依赖于实际执行的行为。

2.2 更具体的网格世界示例

设想网格世界如下:

  • 起点在左上角,终点在右下角。

  • 每一步奖励 = − 1 =-1 =1,终点奖励 = + 10 =+10 =+10

  • 状态数为 9 个,假设智能体初始策略均为随机选择。 假如经过多次更新,某个状态 s s s Q Q Q 值如下:

  • On-policy(SARSA)

    • Q ( s , 向右 ) = 2.5 Q(s, \text{向右}) = 2.5 Q(s,向右)=2.5
    • Q ( s , 向下 ) = 1.8 Q(s, \text{向下}) = 1.8 Q(s,向下)=1.8
      在这种策略下,智能体在 s s s 可能以较高概率选择“向右”,但这种估计受当前策略探索的影响,可能保留“谨慎”性质。
  • Off-policy(Q-learning)

    • Q ( s , 向右 ) = 3.0 Q(s, \text{向右}) = 3.0 Q(s,向右)=3.0
    • Q ( s , 向下 ) = 2.2 Q(s, \text{向下}) = 2.2 Q(s,向下)=2.2
      由于 Q-learning 总是选取最优动作的估计,即使当前策略可能随机选择,它依然会学习一个更接近最优的 Q Q Q 值。最终,在决策时智能体会选择数值更高的动作,从而收敛到最优策略。

2.3 数值演示对比

考虑一个状态 s s s,在两个动作上的 Q 值在不同方法下可能更新如下(假设多次更新后的平均结果):

方法 Q ( s , 向右 ) Q(s, \text{向右}) Q(s,向右) Q ( s , 向下 ) Q(s, \text{向下}) Q(s,向下)
On-policy2.51.8
Off-policy3.02.2
  • 解释
    • On-policy 方法受限于当前策略的探索性,可能在较为保守的策略下估计较低的值;
    • Off-policy 方法直接逼近最优值,所以即使实际行为中未频繁选择最优动作,其更新仍能利用最优动作的信息,使得估计更高。 例如,在某个时刻,智能体在状态 s ′ s' s 的两个动作的 Q Q Q 值分别为 3.0 和 2.2。在 SARSA 更新中,如果由于探索策略,智能体随机选择了较低估计的动作(比如 2.2),那么更新将带来一个较低的值;而在 Q-learning 更新中,使用的是 3.0 这个最大值,这样可以更快逼近最优策略。

3. 总结

  • On-policy(基于当前策略)

    • 特点:数据由当前策略生成,更新直接针对实际采取的动作。
    • 代表算法:SARSA、REINFORCE。
    • 优点:考虑到策略本身的风险与探索,学习结果更加“平滑”。
    • 缺点:样本利用率较低,因为只能用最新数据,且策略探索时可能带来低效估计。
  • Off-policy(目标策略与行为策略分离)

    • 特点:可以利用历史数据和其他策略数据,更新时使用最优(或期望最优)的动作信息。
    • 代表算法:Q-learning、DQN。
    • 优点:样本利用率高、可以用经验回放等技术,通常能更快逼近最优策略。
    • 缺点:需要修正行为与目标策略之间的差异(例如重要性采样),数值上可能更敏感。

本实验的学习曲线以及每个 γ \gamma γ取值的结果显示在图3的第一列。对于所有算法,我们仅展示TD学习(未进行奖励中心化)最优 α \alpha α对应的曲线。对于中心化方法,所展示的曲线对应的是从大范围粗略搜索中选择的最优 η \eta η


在这里插入图片描述图3:学习曲线展示了TD学习在一个on-policy问题和两个off-policy问题有无奖励中心化情况下的性能表现。


每个实心点表示50次独立运行的RMSVE均值阴影区域表示一个标准误差

首先需要注意的是,当奖励由oracle进行中心化时,学习曲线的初始误差要低得多。对于其他算法,初始误差的量级大约为 r ( π ) / ( 1 − γ ) r(\pi)/(1-\gamma) r(π)/(1γ)TD学习(未进行中心化,蓝色)最终达到了与oracle中心化算法(橙色) 相同的误差水平,这符合预期。学习并减去平均奖励(绿色)确实加快了RMSVE的下降速度,相较于无中心化方法,收敛得更快。但是,该方法的最终误差率略高,这也是预期中的结果,因为平均奖励的估计值在训练过程中不断变化,这使得更新过程中产生比未中心化或oracle中心化方法更大的方差。对于更大的折扣因子(左下角),类似的趋势仍然成立,但未中心化方法的收敛速度明显更慢(请注意坐标轴的刻度差异)。在这两种情况下,我们验证了所有运行中的平均奖励估计值均约为0.25

这些实验表明,简单的奖励中心化技术在on-policy设置下可以非常有效,并且对于较大的折扣因子,这一效果更加显著。

Off-policy设置的局限性 :公式(4)可以提供对行为策略的平均奖励的无偏估计,这意味着在off-policy设置下,平均奖励估计 R ˉ \bar{R} Rˉ会收敛到 r ( b ) r(b) r(b),而不是 r ( π ) r(\pi) r(π)。在更新过程中加入重要性采样比率并不足以保证收敛到 r ( π ) r(\pi) r(π),因为重要性采样只能纠正动作分布的不匹配,但无法纠正由此导致的状态分布的不匹配

1. 平均奖励的估计与公式(4)

公式(4)给出了通过步长参数更新平均奖励估计的方法:

R ˉ t + 1 ≐ R ˉ t + β t ( R t + 1 − R ˉ t ) . \bar{R}_{t+1} \doteq \bar{R}_t + \beta_t \bigl(R_{t+1} - \bar{R}_t\bigr). Rˉt+1Rˉt+βt(Rt+1Rˉt).

  • 这里, R ˉ t \bar{R}_t Rˉt 表示在前(t)步观测中对平均奖励的估计;
  • β t \beta_t βt是步长参数(满足 Robbins–Monro条件:例如 ∑ t β t = ∞ \sum_t \beta_t = \infty tβt= ∑ t β t 2 < ∞ \sum_t \beta_t^2 < \infty tβt2<),确保随着时间的推移该估计能无偏收敛;
  • 如果数据由某个行为策略 b b b 生成,那么这种在线更新自然会使 R ˉ t \bar{R}_t Rˉt 收敛到行为策略的平均奖励 r ( b ) r(b) r(b)

2. Off-policy设置与目标策略 π \pi π vs 行为策略 b b b

在off-policy学习中,智能体实际采集数据时使用的是行为策略 b b b,而学习目标通常是一个不同的目标策略 π \pi π

  • 行为策略 b b b:生成实际数据的策略,其状态-动作分布决定了我们观察到的 R t R_t Rt
  • 目标策略 π \pi π:我们希望学习或评估的策略,其平均奖励为 r ( π ) r(\pi) r(π)

由于公式(4)直接基于从行为策略 b b b 采样到的奖励进行更新,因此它所估计的平均奖励 R ˉ t \bar{R}_t Rˉt 自然会收敛到 r ( b ) r(b) r(b) 而非 r ( π ) r(\pi) r(π) ;这就是在off-policy设置下一个基本的局限性。


3. 重要性采样比率及其作用

为了解决off-policy下因行为策略和目标策略不同而导致的不匹配问题,我们通常引入重要性采样比率,定义为

ρ t = π ( A t ∣ S t ) b ( A t ∣ S t ) . \rho_t = \frac{\pi(A_t \mid S_t)}{b(A_t \mid S_t)}. ρt=b(AtSt)π(AtSt).

  • 重要性采样比率能在更新过程中纠正动作选择分布的不匹配:例如,在TD更新、策略评估或Q学习中,用 ρ t \rho_t ρt对奖励或者TD误差进行加权,使得更新更贴近目标策略 π \pi π的行为。
  • 例如,在TD更新中,我们可能会使用修正后的TD误差: δ t = ρ t [ ( R t + 1 − R ˉ t ) + γ V ~ ( S t + 1 ) − V ~ ( S t ) ] . \delta_t = \rho_t\Bigl[(R_{t+1}-\bar{R}_t) + \gamma\,\tilde{V}(S_{t+1}) - \tilde{V}(S_t)\Bigr]. δt=ρt[(Rt+1Rˉt)+γV~(St+1)V~(St)].

然而,重要性采样比率只能校正动作分布的偏差,而状态分布的不匹配问题无法通过简单的动作比率来修正。原因如下:

  • 数据采集时,状态的访问频率由行为策略 b b b 决定;即使在某个状态下,通过 ρ t \rho_t ρt 我们可以“调整”奖励,使其更符合目标策略的动作选择概率,但该状态本身在行为策略下的出现概率可能与目标策略不同。
  • 因此,即使在更新中引入了 ρ t \rho_t ρt,由公式(4)更新得到的 R ˉ t \bar{R}_t Rˉt 仍然依赖于行为策略 b b b 的状态分布,从而使得平均奖励估计趋向于 r ( b ) r(b) r(b)

4. 举例说明

考虑一个简单的MDP,包含两个状态 S 1 S_1 S1 S 2 S_2 S2,并且有两个动作 a 1 a_1 a1 a 2 a_2 a2。假设:

  • 目标策略 π \pi π:在状态 S 1 S_1 S1下总是选择 a 1 a_1 a1,在状态 S 2 S_2 S2下总是选择 a 2 a_2 a2
  • 行为策略 b b b:在两个状态下均以50%的概率选择 a 1 a_1 a1 a 2 a_2 a2
  • 各动作对应的奖励在 S 1 S_1 S1 S 2 S_2 S2 上有差异,比如在 S 1 S_1 S1 执行 a 1 a_1 a1 获得奖励较高,而在 S 2 S_2 S2 执行 a 2 a_2 a2 获得奖励较低。

由于数据是由 b b b 生成的,状态 S 1 S_1 S1 S 2 S_2 S2 会以 b b b 规定的比例出现。如果我们用公式(4)更新平均奖励,最终估计的 R ˉ t \bar{R}_t Rˉt 会反映 b b b 下的奖励分布,即收敛到 r ( b ) r(b) r(b)

  • 虽然在状态 S 1 S_1 S1 下目标策略 π \pi π 表现更好, S 1 S_1 S1 的奖励可能更高,但由于 b b b 只以固定比例访问各状态,重要性采样比率只能调整动作选择(例如在 S 1 S_1 S1 a 1 a_1 a1 奖励乘以合适的比率),而不能改变 S 1 S_1 S1 S 2 S_2 S2 被采样的频率。

  • 结果,平均奖励估计仍然被行为策略的状态分布所主导,收敛到 r ( b ) r(b) r(b) 而非 r ( π ) r(\pi) r(π)

这种现象表明,在off-policy情形下,简单地在TD更新中加入 ρ t \rho_t ρt(重要性采样比率)并不能纠正因状态分布不匹配而引起的平均奖励偏差。

让我们考虑平均奖励估计不准确所带来的影响。首先,需要注意的是,中心化折扣值函数同样满足递归Bellman方程

v ~ γ ( s ) = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r − r ˉ + γ v ~ γ ( s ′ ) ] , \tilde{v}^{\gamma}(s) = \sum_{a} \pi(a|s) \sum_{s',r} p(s',r \mid s,a) \left[ r - \bar{r} + \gamma \tilde{v}^{\gamma}(s') \right], v~γ(s)=aπ(as)s,rp(s,rs,a)[rrˉ+γv~γ(s)],

1. 定义解释
中心化折扣值函数 v ~ γ ( s ) = E [ ∑ t = 0 ∞ γ t ( R t + 1 − r ˉ ) ∣ S 0 = s ] \tilde{v}^{\gamma}(s) = \mathbb{E}\left[\sum_{t=0}^\infty \gamma^t\left(R_{t+1} - \bar{r}\right) \,\Big|\, S_0=s\right] v~γ(s)=E[t=0γt(Rt+1rˉ) S0=s] 就是说,从状态 s s s 出发,未来每一步得到的奖励先减去一个“平均奖励” r ˉ \bar{r} rˉ,然后这些“偏差”按照折扣因子 γ \gamma γ 依次加权求和。这样做的目的是只关注奖励相对于平均水平的差别,而不是奖励本身可能带来的巨大数值。

2. 拆分求和,得到递归公式
想象你从状态 s s s 出发,做两步:

  • 第一步:你立刻获得奖励 R 1 R_1 R1(减去平均奖励变成 R 1 − r ˉ R_1-\bar{r} R1rˉ)。
  • 之后的步骤:从第一步后的状态 S 1 S_1 S1 开始,你会继续获得未来奖励的折扣和,这部分就正好就是从状态 S 1 S_1 S1 开始的中心化折扣值 v ~ γ ( S 1 ) \tilde{v}^{\gamma}(S_1) v~γ(S1),不过要乘以折扣因子 γ \gamma γ

因此,我们可以写成: v ~ γ ( s ) = E [ ( R 1 − r ˉ ) + γ v ~ γ ( S 1 ) ∣ S 0 = s ] . \tilde{v}^{\gamma}(s) = \mathbb{E}\Bigl[(R_1-\bar{r}) + \gamma\, \tilde{v}^{\gamma}(S_1) \,\Big|\, S_0=s\Bigr]. v~γ(s)=E[(R1rˉ)+γv~γ(S1) S0=s].

3. 结合动作选择和状态转移
在状态 s s s 下,智能体会按照策略 π \pi π 选择动作,再由环境给出下一个状态 S 1 S_1 S1 和奖励 R 1 R_1 R1。这一步的期望可以展开为: v ~ γ ( s ) = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r − r ˉ + γ v ~ γ ( s ′ ) ] . \tilde{v}^{\gamma}(s) = \sum_{a}\pi(a|s)\sum_{s',r} p(s',r|s,a)\Bigl[r - \bar{r} + \gamma\, \tilde{v}^{\gamma}(s')\Bigr]. v~γ(s)=aπ(as)s,rp(s,rs,a)[rrˉ+γv~γ(s)]. 这里:

  • π ( a ∣ s ) \pi(a|s) π(as) 表示在状态 s s s 下选择动作 a a a 的概率;
  • p ( s ′ , r ∣ s , a ) p(s',r|s,a) p(s,rs,a) 表示采取动作 a a a 后转移到状态 s ′ s' s 并获得奖励 r r r 的概率;
  • r − r ˉ r - \bar{r} rrˉ 就是第一步的奖励中心化后值,而 γ v ~ γ ( s ′ ) \gamma\, \tilde{v}^{\gamma}(s') γv~γ(s) 表示接下来从状态 s ′ s' s 开始的折扣奖励。

这样,我们就得到了中心化折扣值函数的递归(Bellman)方程。


简单总结:

  • 我们把从状态 s s s 开始的未来奖励(减去平均奖励)拆分成两部分: ① 第一秒钟的奖励减去平均奖励; ② 未来奖励折扣和(从下一个状态开始)。
  • 利用马尔可夫性质,这个第二部分就是从 S 1 S_1 S1 开始的中心化折扣值函数。
  • 最后,再把动作选择和状态转移的概率考虑进去,就得到了那个递归公式。

or, v ~ γ = r π − r ˉ 1 + γ P π v ~ γ , (6) \text{or,} \quad \tilde{\mathbf{v}}^{\gamma} = \mathbf{r}_{\pi} - \bar{r} \mathbf{1} + \gamma \mathbf{P}_{\pi} \tilde{\mathbf{v}}^{\gamma}, \tag{6} or,v~γ=rπrˉ1+γPπv~γ,(6)

其中, v ~ γ \tilde{\mathbf{v}}^{\gamma} v~γ表示 R ∣ S ∣ \mathbb{R}^{|\mathcal{S}|} RS中的一个向量, r π \mathbf{r}_{\pi} rπ是从每个状态出发的期望单步奖励向量, r ˉ \bar{r} rˉ是一个标量变量, 1 \mathbf{1} 1是一个全为1的向量, P π \mathbf{P}_{\pi} Pπ由策略 π \pi π诱导的状态转移矩阵

1. 从单个状态的Bellman方程出发

对于某个状态 s s s,中心化折扣值函数满足: v ~ γ ( s ) = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r − r ˉ + γ v ~ γ ( s ′ ) ] . \tilde{v}^{\gamma}(s) = \sum_{a} \pi(a|s) \sum_{s', r} p(s',r \mid s,a) \Bigl[ r - \bar{r} + \gamma\,\tilde{v}^{\gamma}(s') \Bigr]. v~γ(s)=aπ(as)s,rp(s,rs,a)[rrˉ+γv~γ(s)]. 这里:

  • π ( a ∣ s ) \pi(a|s) π(as) 是在状态 s s s 下采取动作 a a a 的概率;
  • p ( s ′ , r ∣ s , a ) p(s', r \mid s,a) p(s,rs,a) 是从状态 s s s 采取动作 a a a 后转移到状态 s ′ s' s 并获得奖励 r r r 的概率;
  • r ˉ \bar{r} rˉ 是我们估计的平均奖励,是一个常数(它不依赖于 a , s ′ , r a, s', r a,s,r)。

我们可以把上式中的求和拆开成两部分:

  1. 求出期望即时奖励 r π ( s ) = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) r . r_{\pi}(s) = \sum_{a} \pi(a|s) \sum_{s', r} p(s',r|s,a) \, r. rπ(s)=aπ(as)s,rp(s,rs,a)r.
  2. 对于常数 r ˉ \bar{r} rˉ ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) r ˉ . \sum_{a} \pi(a|s) \sum_{s', r} p(s',r|s,a) \, \bar{r}. aπ(as)s,rp(s,rs,a)rˉ.

由于 r ˉ \bar{r} rˉ 不依赖于 a , s ′ a, s' a,s r r r,我们可以把它提到求和符号外面: ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) r ˉ = r ˉ ⋅ ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) . \sum_{a} \pi(a|s) \sum_{s', r} p(s',r|s,a) \, \bar{r} = \bar{r} \cdot \sum_{a} \pi(a|s) \sum_{s', r} p(s',r|s,a). aπ(as)s,rp(s,rs,a)rˉ=rˉaπ(as)s,rp(s,rs,a). 注意到,对于任何状态 s s s ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) = 1 , \sum_{a} \pi(a|s) \sum_{s', r} p(s',r|s,a)=1, aπ(as)s,rp(s,rs,a)=1,
因为这是对整个概率分布求和。因此,上面的常数项就是 r ˉ \bar{r} rˉ ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) r ˉ = r ˉ . \sum_{a} \pi(a|s) \sum_{s', r} p(s',r|s,a) \, \bar{r} = \bar{r}. aπ(as)s,rp(s,rs,a)rˉ=rˉ.

所以原式就变为: v ~ γ ( s ) = r π ( s ) − r ˉ + γ ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) v ~ γ ( s ′ ) . \tilde{v}^{\gamma}(s) = r_{\pi}(s) - \bar{r} + \gamma \sum_{a} \pi(a|s) \sum_{s', r} p(s',r|s,a)\tilde{v}^{\gamma}(s'). v~γ(s)=rπ(s)rˉ+γaπ(as)s,rp(s,rs,a)v~γ(s).


2. 定义状态转移概率

我们再定义一个从状态 s s s s ′ s' s 的转移概率: P π ( s , s ′ ) = ∑ a π ( a ∣ s ) ∑ r p ( s ′ , r ∣ s , a ) . P_{\pi}(s,s') = \sum_{a} \pi(a|s) \sum_{r} p(s',r|s,a). Pπ(s,s)=aπ(as)rp(s,rs,a). 注意这里求和的是关于 (a) 和 r r r,所以 P π ( s , s ′ ) P_{\pi}(s,s') Pπ(s,s)只依赖于状态 s s s s ′ s' s

利用这个定义,上面的式子可以写成: v ~ γ ( s ) = r π ( s ) − r ˉ + γ ∑ s ′ P π ( s , s ′ ) v ~ γ ( s ′ ) . \tilde{v}^{\gamma}(s) = r_{\pi}(s) - \bar{r} + \gamma \sum_{s'} P_{\pi}(s,s')\,\tilde{v}^{\gamma}(s'). v~γ(s)=rπ(s)rˉ+γsPπ(s,s)v~γ(s).


3. 转换为向量形式

现在,我们用向量和矩阵来表示所有状态上的方程:

  • 定义 v ~ γ \tilde{\mathbf{v}}^{\gamma} v~γ 为一个向量,包含每个状态 s s s v ~ γ ( s ) \tilde{v}^{\gamma}(s) v~γ(s)
  • 定义 r π \mathbf{r}_{\pi} rπ 为一个向量,其第 s s s 个元素为 r π ( s ) r_{\pi}(s) rπ(s)
  • 定义 P π \mathbf{P}_{\pi} Pπ 为状态转移矩阵, [ P π ] s , s ′ = P π ( s , s ′ ) [\mathbf{P}_{\pi}]_{s,s'} = P_{\pi}(s,s') [Pπ]s,s=Pπ(s,s)
  • 定义 1 \mathbf{1} 1 为全1向量;
  • r ˉ \bar{r} rˉ 是标量。

那么对于每个状态 (s) 的方程,我们可以把它们堆叠成一个整体: v ~ γ = r π − r ˉ 1 + γ P π v ~ γ . \tilde{\mathbf{v}}^{\gamma} = \mathbf{r}_{\pi} - \bar{r}\,\mathbf{1} + \gamma\,\mathbf{P}_{\pi}\,\tilde{\mathbf{v}}^{\gamma}. v~γ=rπrˉ1+γPπv~γ.

这就是向量形式的Bellman方程。 在这里, r ˉ 1 \bar{r}\,\mathbf{1} rˉ1 表示对每个状态都减去同一个常数 r ˉ \bar{r} rˉ


4. 数值例子说明

假设状态空间只有两个状态 S 1 S_1 S1 S 2 S_2 S2,且:

  • 对于 S 1 S_1 S1 r π ( S 1 ) = 3 r_{\pi}(S_1) = 3 rπ(S1)=3。 状态转移概率: P π ( S 1 , S 1 ) = 0.8 P_{\pi}(S_1,S_1)=0.8 Pπ(S1,S1)=0.8, P π ( S 1 , S 2 ) = 0.2 P_{\pi}(S_1,S_2)=0.2 Pπ(S1,S2)=0.2
  • 对于 S 2 S_2 S2 r π ( S 2 ) = 5 r_{\pi}(S_2) = 5 rπ(S2)=5。 状态转移概率: P π ( S 2 , S 1 ) = 0.3 P_{\pi}(S_2,S_1)=0.3 Pπ(S2,S1)=0.3, P π ( S 2 , S 2 ) = 0.7 P_{\pi}(S_2,S_2)=0.7 Pπ(S2,S2)=0.7
  • 假设折扣因子 γ = 0.9 \gamma = 0.9 γ=0.9
  • r ˉ = 4 \bar{r} = 4 rˉ=4(这是我们估计的平均奖励)。

则对于 S 1 S_1 S1 的方程为: v ~ γ ( S 1 ) = 3 − 4 + 0.9 [ 0.8 v ~ γ ( S 1 ) + 0.2 v ~ γ ( S 2 ) ] , \tilde{v}^{\gamma}(S_1) = 3 - 4 + 0.9\Bigl[0.8\,\tilde{v}^{\gamma}(S_1) + 0.2\,\tilde{v}^{\gamma}(S_2)\Bigr], v~γ(S1)=34+0.9[0.8v~γ(S1)+0.2v~γ(S2)], 对于 S 2 S_2 S2 的方程为: v ~ γ ( S 2 ) = 5 − 4 + 0.9 [ 0.3 v ~ γ ( S 1 ) + 0.7 v ~ γ ( S 2 ) ] . \tilde{v}^{\gamma}(S_2) = 5 - 4 + 0.9\Bigl[0.3\,\tilde{v}^{\gamma}(S_1) + 0.7\,\tilde{v}^{\gamma}(S_2)\Bigr]. v~γ(S2)=54+0.9[0.3v~γ(S1)+0.7v~γ(S2)].

用向量写就是: v ~ γ = ( 3 5 ) − 4 ( 1 1 ) + 0.9 ( 0.8 0.2 0.3 0.7 ) v ~ γ . \tilde{\mathbf{v}}^{\gamma} = \begin{pmatrix} 3 \\ 5 \end{pmatrix} - 4\begin{pmatrix} 1 \\ 1 \end{pmatrix} + 0.9 \begin{pmatrix} 0.8 & 0.2 \\ 0.3 & 0.7 \end{pmatrix} \tilde{\mathbf{v}}^{\gamma}. v~γ=(35)4(11)+0.9(0.80.30.20.7)v~γ.

这里,减去 4 ( 1 1 ) 4\begin{pmatrix} 1 \\ 1 \end{pmatrix} 4(11) 就相当于对每个状态都减去了常数4,因为 r ˉ \bar{r} rˉ 不需要在求和内部出现。

容易验证,方程(6)的解 ( v ~ γ , r ˉ ) (\tilde{\mathbf{v}}^{\gamma}, \bar{r}) (v~γ,rˉ)的形式为:
v ~ π γ + c 1 , r ( π ) − c ( 1 − γ ) , ∀ c ∈ R , \tilde{\mathbf{v}}^{\gamma}_{\pi} + c\mathbf{1}, \quad r(\pi) - c(1-\gamma), \quad \forall c \in \mathbb{R}, v~πγ+c1,r(π)c(1γ),cR,
其中, v ~ π γ \tilde{\mathbf{v}}^{\gamma}_{\pi} v~πγ与策略 π \pi π和折扣因子 γ \gamma γ对应的中心化微分值函数(见公式(3))。

我们可以证明,对于方程

v ~ γ = r π − r ˉ 1 + γ P π v ~ γ , \tilde{\mathbf{v}}^{\gamma} = \mathbf{r}_{\pi} - \bar{r}\,\mathbf{1} + \gamma\,\mathbf{P}_{\pi}\,\tilde{\mathbf{v}}^{\gamma}, v~γ=rπrˉ1+γPπv~γ,

如果 ( v ~ π γ , r ( π ) ) (\tilde{\mathbf{v}}^{\gamma}_{\pi},\, r(\pi)) (v~πγ,r(π)) 是一个解,那么对任意常数 c ∈ R c \in \mathbb{R} cR v ~ γ = v ~ π γ + c 1 , r ˉ = r ( π ) − c ( 1 − γ ) \tilde{\mathbf{v}}^{\gamma} = \tilde{\mathbf{v}}^{\gamma}_{\pi} + c\,\mathbf{1}, \quad \bar{r} = r(\pi) - c(1-\gamma) v~γ=v~πγ+c1,rˉ=r(π)c(1γ) 也是一个解。下面我们详细说明这是为什么。


1. 重写方程并引入常数偏移

假设我们已有“理想解”: v ~ π γ = r π − r ( π ) 1 + γ P π v ~ π γ . \tilde{\mathbf{v}}^{\gamma}_{\pi} = \mathbf{r}_{\pi} - r(\pi)\,\mathbf{1} + \gamma\,\mathbf{P}_{\pi}\,\tilde{\mathbf{v}}^{\gamma}_{\pi}. v~πγ=rπr(π)1+γPπv~πγ.

现在,我们考虑在这个解上加上一个常数项,即令 v ~ γ = v ~ π γ + c 1 , \tilde{\mathbf{v}}^{\gamma} = \tilde{\mathbf{v}}^{\gamma}_{\pi} + c\,\mathbf{1}, v~γ=v~πγ+c1, 并同时调整平均奖励估计为 r ˉ = r ( π ) − c ( 1 − γ ) . \bar{r} = r(\pi) - c(1-\gamma). rˉ=r(π)c(1γ).


2. 验证这个新的解

将新的 v ~ γ \tilde{\mathbf{v}}^{\gamma} v~γ r ˉ \bar{r} rˉ 代入原方程,我们需要验证:

v ~ π γ + c 1 = ? r π − ( r ( π ) − c ( 1 − γ ) ) 1 + γ P π ( v ~ π γ + c 1 ) . \tilde{\mathbf{v}}^{\gamma}_{\pi} + c\,\mathbf{1} \stackrel{?}{=} \mathbf{r}_{\pi} - \bigl(r(\pi) - c(1-\gamma)\bigr)\,\mathbf{1} + \gamma\,\mathbf{P}_{\pi}\Bigl(\tilde{\mathbf{v}}^{\gamma}_{\pi} + c\,\mathbf{1}\Bigr). v~πγ+c1=?rπ(r(π)c(1γ))1+γPπ(v~πγ+c1).

右侧展开为:

r π − r ( π ) 1 + c ( 1 − γ ) 1 + γ P π v ~ π γ + γ c P π 1. \mathbf{r}_{\pi} - r(\pi)\,\mathbf{1} + c(1-\gamma)\,\mathbf{1} + \gamma\,\mathbf{P}_{\pi}\tilde{\mathbf{v}}^{\gamma}_{\pi} + \gamma\, c\,\mathbf{P}_{\pi}\mathbf{1}. rπr(π)1+c(1γ)1+γPπv~πγ+γcPπ1.

注意,状态转移矩阵 P π \mathbf{P}_{\pi} Pπ 是一个随机矩阵,满足 P π 1 = 1. \mathbf{P}_{\pi}\mathbf{1} = \mathbf{1}. Pπ1=1.

因此, γ c P π 1 = γ c 1. \gamma\, c\,\mathbf{P}_{\pi}\mathbf{1} = \gamma\, c\,\mathbf{1}. γcPπ1=γc1.

代入后,右侧变为:

r π − r ( π ) 1 + c ( 1 − γ ) 1 + γ P π v ~ π γ + γ c 1. \mathbf{r}_{\pi} - r(\pi)\,\mathbf{1} + c(1-\gamma)\,\mathbf{1} + \gamma\,\mathbf{P}_{\pi}\tilde{\mathbf{v}}^{\gamma}_{\pi} + \gamma\, c\,\mathbf{1}. rπr(π)1+c(1γ)1+γPπv~πγ+γc1.

合并常数项 c ( 1 − γ ) 1 + γ c 1 c(1-\gamma)\,\mathbf{1} + \gamma\, c\,\mathbf{1} c(1γ)1+γc1 得到

c ( 1 − γ + γ ) 1 = c 1. c(1-\gamma+\gamma)\,\mathbf{1} = c\,\mathbf{1}. c(1γ+γ)1=c1.

于是,右侧变为

r π − r ( π ) 1 + γ P π v ~ π γ + c 1. \mathbf{r}_{\pi} - r(\pi)\,\mathbf{1} + \gamma\,\mathbf{P}_{\pi}\tilde{\mathbf{v}}^{\gamma}_{\pi} + c\,\mathbf{1}. rπr(π)1+γPπv~πγ+c1.

但由理想解的Bellman方程,我们知道

v ~ π γ = r π − r ( π ) 1 + γ P π v ~ π γ . \tilde{\mathbf{v}}^{\gamma}_{\pi} = \mathbf{r}_{\pi} - r(\pi)\,\mathbf{1} + \gamma\,\mathbf{P}_{\pi}\tilde{\mathbf{v}}^{\gamma}_{\pi}. v~πγ=rπr(π)1+γPπv~πγ.

因此,右侧正好等于

v ~ π γ + c 1 , \tilde{\mathbf{v}}^{\gamma}_{\pi} + c\,\mathbf{1}, v~πγ+c1,

这与左侧完全一致。


3. 意义说明

这说明了:

  • 如果我们正确估计了平均奖励,即 r ˉ = r ( π ) \bar{r} = r(\pi) rˉ=r(π)(对应 c = 0 c=0 c=0),则中心化值函数正好为 v ~ π γ \tilde{\mathbf{v}}^{\gamma}_{\pi} v~πγ
  • 如果我们有一个估计偏差,使得 r ˉ = r ( π ) − c ( 1 − γ ) \bar{r} = r(\pi) - c(1-\gamma) rˉ=r(π)c(1γ)(也可以写为 r ( π ) − k r(\pi)-k r(π)k k = c ( 1 − γ ) k=c(1-\gamma) k=c(1γ)),那么解将整体被平移 c 1 c\,\mathbf{1} c1(或 k 1 − γ 1 \frac{k}{1-\gamma}\,\mathbf{1} 1γk1)。

换句话说,这个自由度反映出奖励中心化本身对全局常数不敏感。无论我们如何加一个常数 c c c 到所有状态的中心化值,系统的相对比较不变,只要我们同时对平均奖励做出相应调整。


4. 具体例子和数值说明

数值例子 1:折扣因子较小

假设一个简单的MDP在策略 π \pi π下,其真实平均奖励为

r ( π ) = 2 , r(\pi) = 2, r(π)=2,

以及对应的理想中心化微分值函数为

v ~ π γ = ( 3 − 1 ) , \tilde{\mathbf{v}}^{\gamma}_{\pi} = \begin{pmatrix} 3 \\ -1 \end{pmatrix}, v~πγ=(31),

且设折扣因子

γ = 0.8. \gamma = 0.8. γ=0.8.

情况 A:无偏估计

如果我们准确估计了平均奖励,则有

r ˉ = r ( π ) = 2. \bar{r} = r(\pi) = 2. rˉ=r(π)=2.

此时令 c = 0 c=0 c=0,解为

v ~ γ = v ~ π γ + 0 ⋅ 1 = ( 3 − 1 ) . \tilde{\mathbf{v}}^{\gamma} = \tilde{\mathbf{v}}^{\gamma}_{\pi} + 0\cdot\mathbf{1} = \begin{pmatrix} 3 \\ -1 \end{pmatrix}. v~γ=v~πγ+01=(31).

这正是我们希望得到的中心化值。

情况 B:平均奖励估计存在偏差

假设由于估计误差,我们得到的平均奖励为

r ˉ = 1.8 , \bar{r} = 1.8, rˉ=1.8,

那么偏差 k = r ( π ) − r ˉ = 2 − 1.8 = 0.2 k = r(\pi) - \bar{r} = 2 - 1.8 = 0.2 k=r(π)rˉ=21.8=0.2

根据公式,解将变为

v ~ γ = v ~ π γ + k 1 − γ 1 = ( 3 − 1 ) + 0.2 1 − 0.8 ( 1 1 ) . \tilde{\mathbf{v}}^{\gamma} = \tilde{\mathbf{v}}^{\gamma}_{\pi} + \frac{k}{1-\gamma}\,\mathbf{1} = \begin{pmatrix} 3 \\ -1 \end{pmatrix} + \frac{0.2}{1-0.8}\,\begin{pmatrix} 1 \\ 1 \end{pmatrix}. v~γ=v~πγ+1γk1=(31)+10.80.2(11).

注意这里

0.2 1 − 0.8 = 0.2 0.2 = 1. \frac{0.2}{1-0.8} = \frac{0.2}{0.2} = 1. 10.80.2=0.20.2=1.

因此,

v ~ γ = ( 3 + 1 − 1 + 1 ) = ( 4 0 ) , \tilde{\mathbf{v}}^{\gamma} = \begin{pmatrix} 3+1 \\ -1+1 \end{pmatrix} = \begin{pmatrix} 4 \\ 0 \end{pmatrix}, v~γ=(3+11+1)=(40), r ˉ = r ( π ) − k = 2 − 0.2 = 1.8. \bar{r} = r(\pi) - k = 2 - 0.2 = 1.8. rˉ=r(π)k=20.2=1.8.

也就是说,由于平均奖励估计比真实值低0.2,中心化折扣值整体上被向上平移了1(这里放大了 1 / ( 1 − γ ) = 1 / 0.2 = 5 1/(1-\gamma)=1/0.2=5 1/(1γ)=1/0.2=5倍,但在本例中因为 0.2 / 0.2 = 1 0.2/0.2=1 0.2/0.2=1 正好如此)。
— 注意:更一般地,可以写为任意 c c c(例如 c = 0.5 c=0.5 c=0.5时,等价地 k = c ( 1 − γ ) = 0.5 × 0.2 = 0.1 k = c(1-\gamma)=0.5\times0.2=0.1 k=c(1γ)=0.5×0.2=0.1),结果就是中心化值整体平移了 0.5 / ( 1 − γ ) = 0.5 / 0.2 = 2.5 0.5/(1-\gamma)=0.5/0.2=2.5 0.5/(1γ)=0.5/0.2=2.5单位,同时平均奖励估计相应调整为 r ( π ) − 0.1 r(\pi)-0.1 r(π)0.1

数值例子 2:折扣因子接近1

设相同真实平均奖励 r ( π ) = 2 r(\pi)=2 r(π)=2,真实中心化值为

v ~ π γ = ( 3 − 1 ) , \tilde{\mathbf{v}}^{\gamma}_{\pi} = \begin{pmatrix} 3 \\ -1 \end{pmatrix}, v~πγ=(31),

但令折扣因子

γ = 0.99. \gamma = 0.99. γ=0.99.

假设平均奖励估计存在同样的绝对偏差 k = 0.1 k = 0.1 k=0.1(即我们估计得到 r ˉ = 2 − 0.1 = 1.9 \bar{r} = 2 - 0.1 = 1.9 rˉ=20.1=1.9)。

这时补偿常数为

k 1 − γ = 0.1 1 − 0.99 = 0.1 0.01 = 10. \frac{k}{1-\gamma} = \frac{0.1}{1-0.99} = \frac{0.1}{0.01} = 10. 1γk=10.990.1=0.010.1=10.

因此,实际解为

v ~ γ = v ~ π γ + 10 1 = ( 3 + 10 − 1 + 10 ) = ( 13 9 ) , \tilde{\mathbf{v}}^{\gamma} = \tilde{\mathbf{v}}^{\gamma}_{\pi} + 10\,\mathbf{1} = \begin{pmatrix} 3+10 \\ -1+10 \end{pmatrix} = \begin{pmatrix} 13 \\ 9 \end{pmatrix}, v~γ=v~πγ+101=(3+101+10)=(139), r ˉ = r ( π ) − k = 2 − 0.1 = 1.9. \bar{r} = r(\pi) - k = 2 - 0.1 = 1.9. rˉ=r(π)k=20.1=1.9.

这里可以看到,即使 k k k只是0.1的微小偏差,由于 γ \gamma γ接近1,中心化值整体偏移了10,这将严重干扰后续学习过程,破坏奖励中心化消除大常数偏移的初衷。

即任何对中心化值函数加上一个常数,同时将平均奖励相应调整,都仍然满足该Bellman方程。

等价地,我们可以将解的形式写为:
v ~ π γ + k 1 − γ 1 , r ( π ) − k , ∀ k ∈ R . \tilde{\mathbf{v}}^{\gamma}_{\pi} + \frac{k}{1-\gamma} \mathbf{1}, \quad r(\pi) - k, \quad \forall k \in \mathbb{R}. v~πγ+1γk1,r(π)k,kR.
这表明,如果平均奖励的估计值存在偏差 k k k,则中心化折扣值的每个元素都会产生一个常数偏移 k / ( 1 − γ ) k/(1-\gamma) k/(1γ)。这种情况是不理想的,因为奖励中心化的主要动机就是消除估计中的潜在大偏移

因此,我们希望找到一种方法,在执行不同的行为策略时,能够准确估计目标策略的平均奖励

然而,需要注意的是,对平均奖励的估计不准确并不会导致算法完全失效不进行奖励中心化的标准算法可以被视为使用了一个固定但不准确的平均奖励估计(即零),但在表格型情况下,它们仍然保证收敛到目标策略的真实值。因此,问题的关键不在于收敛性,而在于学习速度

准确估计平均奖励可能会在使用标准方法时提供更好的样本复杂度界限,相比于直接估计未中心化值而言。例如,Q-learning的收敛界限涉及 ( 1 / ( 1 − γ ) ) (1/(1-\gamma)) (1/(1γ))的幂次(见Qu & Wierman, 2020;Wainwright, 2019;Even-Dar et al., 2003)。此外,正如图3所示,当奖励由oracle进行中心化时,学习速度明显高于未中心化的情况

总的来说,奖励中心化的有效性随着平均奖励估计的准确度提高而增强。因此,即使是简单的奖励中心化方法(公式(4)),当行为策略的平均奖励接近目标策略的平均奖励时,也能非常有效

这种情况通常发生在两种策略相似时,例如,一个贪心目标策略与一个 ϵ \epsilon ϵ-贪心行为策略(其中 ϵ \epsilon ϵ较小) 。然而,当两种策略的差异增加时,奖励中心化在学习速度上的优势可能会减弱,甚至完全消失

在接下来的章节中,我们将介绍一种更精细的高级方法,用于在off-policy设置更准确地估计平均奖励

相关文章:

论文笔记(七十二)Reward Centering(二)

Reward Centering&#xff08;二&#xff09; 文章概括摘要2 简单的奖励中心 文章概括 引用&#xff1a; article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arXiv preprint arXiv:2405.0…...

25年2月通信基础知识补充:多普勒频移与多普勒扩展、3GPP TDL信道模型

看文献过程中不断发现有太多不懂的基础知识&#xff0c;故长期更新这类blog不断补充在这过程中学到的知识。由于这些内容与我的研究方向并不一定强相关&#xff0c;故记录不会很深入请见谅。 【通信基础知识补充7】25年2月通信基础知识补充1 一、多普勒频移与多普勒扩展傻傻分不…...

ASUS/华硕无畏16 X1605VA 原厂Win11 22H2系统 工厂文件 带ASUS Recovery恢复

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;带一键恢复&#xff0c;以及机器所有的驱动和软件。 支持型号&#xff1a;X1605VA 系统版本&#xff1a;Windows 11 22H2 文件下载&#xff1a;点击下载 文件格式&#xff1a;工厂文件 安装教程&#x…...

DeepSeek赋能智慧文旅:新一代解决方案,重构文旅发展的底层逻辑

DeepSeek作为一款前沿的人工智能大模型&#xff0c;凭借其强大的多模态理解、知识推理和内容生成能力&#xff0c;正在重构文旅产业的发展逻辑&#xff0c;推动行业从传统的经验驱动向数据驱动、从人力密集型向智能协同型转变。 一、智能服务重构&#xff1a;打造全域感知的智…...

自学FOC系列分享--SVPWM和clark 逆变换及代码实战

自学FOC系列分享--SVPWM和clark 逆变换 1 说在前面2 回顾clarke 和 park的变换和逆变换2.1 概述2.2 公式说明 3 SVPWM是如何写的3.1 简单说明3.2 重要对比 4、代码实战4.1 代码构成说明4.2 全部代码4.3 测试代码4.4 测试结果4.5 结果分析 总结 1 说在前面 如前一篇文章所述的系…...

LeetCode-524. 通过删除字母匹配到字典里最长单词

1、题目描述&#xff1a; 给你一个字符串 s 和一个字符串数组 dictionary &#xff0c;找出并返回 dictionary 中最长的字符串&#xff0c;该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个&#xff0c;返回长度最长且字母序最小的字符串。如果答案不存在&#x…...

浅谈网络 | 容器网络之Cilium

目录 Cilium介绍Cilium是什么Cilium 主要功能特性为什么用Cilium&#xff1f; 功能概述组件概况BPF 与 XDPeBPF (Extended Berkeley Packet Filter)XDP (eXpress Data Path) Cilium介绍 Cilium是什么 Cilium 是一个开源网络和安全项目&#xff0c;专为 Kubernetes、Docker 和…...

armv7l

在 **ARMv7l** 中&#xff0c;最后的字符是字母 **“l”**&#xff08;小写字母 “L”&#xff09;&#xff0c;而不是数字 **“1”**。 --- ### 1. **ARMv7l 的含义** - **ARMv7**&#xff1a;指的是 **ARM 架构的第 7 代版本**&#xff0c;是一种广泛应用于嵌入式系统&…...

从零开始构建一个小型字符级语言模型的完整详细教程(基于Transformer架构)

最近特别火的DeepSeek,是一个大语言模型,那一个模型是如何构建起来的呢?DeepSeek基于Transformer架构,接下来我们也从零开始构建一个基于Transformer架构的小型语言模型,并说明构建的详细步骤及内部组件说明。我们以构建一个字符级语言模型(Char-Level LM)为例,目标是通…...

期权帮|股指期货交割日为啥会大跌?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 股指期货交割日为啥会大跌&#xff1f; 股指期货交割日股市可能会大跌&#xff0c;主要原因有以下几点&#xff1a; 1.交割日时多空双方需要平仓或转仓&#xff0c;若多头急于平仓…...

B树和B+树

1. B树 1.1 定义 B树是一种多路平衡查找树&#xff0c;具有以下性质&#xff1a; 每个节点最多包含 m 个子节点&#xff08;m 阶 B树&#xff09;。 根节点至少有两个子节点&#xff08;除非它是叶子节点&#xff09;。 每个内部节点&#xff08;非根和非叶子节点&#xff…...

分布式事务核心理论:CAP与BASE

一、引言&#xff1a;分布式系统的挑战 在互联网应用中&#xff0c;随着业务规模的扩大&#xff0c;单机数据库已无法满足高并发和海量数据存储需求。分布式系统将数据拆分到不同节点&#xff0c;但随之带来了数据一致性的难题。CAP与BASE理论为分布式事务提供了重要的设计指导…...

【UCB CS 61B SP24】Lecture 4 - Lists 2: SLLists学习笔记

本文内容为重写上一节课中的单链表&#xff0c;将其重构成更易于用户使用的链表&#xff0c;实现多种操作链表的方法。 1. 重构单链表SLList 在上一节课中编写的 IntList 类是裸露递归的形式&#xff0c;在 Java 中一般不会这么定义&#xff0c;因为这样用户可能需要非常了解…...

记录一个ES分词器不生效的解决过程

问题背景 商城项目,其中商品查询检索使用的是ES, 但存在某些商品查询不到的问题 例如:某商品名包含AA_BBB这样的关键词,但是搜索"AA"不能查询到该商品,但是将商品名修改为AA BBB后就能查询到了. 怀疑是分词的问题,但看代码,在创建ES索引时在对应字段上也定义了分词器…...

Jeecg+vue3去掉JInput组件默认模糊查询的配置方式

遇见的问题&#xff1a;input查询带**号 情况1、使用schemas配置的表单项 添加type""属性&#xff0c;默认type为like&#xff0c;去掉模糊则配置为空 文档链接 jeecg文档说明JInput 2、直接调用组件则在属性上直接添加type""属性...

Could not initialize class io.netty.util.internal.Platfor...

异常信息&#xff1a; Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class io.netty.util.internal.PlatformDependent0 Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.reflect.InaccessibleObjec…...

什么是业务流程分类框架

业务流程分类框架是一个用于组织和系统化地分类业务流程的结构化方法。它旨在帮助企业理解、管理、分析和改进其运营流程。 可以把它想象成一个图书馆的图书分类系统&#xff0c;帮助快速找到和理解不同类型的书籍。对于业务流程来说&#xff0c;分类框架帮助快速了解不同类型的…...

向量的点乘的几何意义

源自AI 向量的点乘&#xff08;Dot Product&#xff09;在几何和图形学中有重要的意义。它不仅是数学运算&#xff0c;还可以用来描述向量之间的关系。以下是点乘的几何意义及其应用&#xff1a; 1. 点乘的定义 对于两个向量 a 和 b&#xff0c;它们的点乘定义为&#xff1a;…...

达梦数据库应用开发_JDBC接口介绍_yxy

达梦数据库应用开发_JDBC接口介绍 1 JDBC是什么&#xff1f;2 JDBC主要类或接口介绍2.1 建立与 DM 数据库的连接2.2 转接发送 SQL 语句到数据库2.3 处理并返回语句执行结果 3 JDBC基本使用3.1 前期准备3.2 增删改查代码示例3.3 绑定变量操作示例3.4 大字段操作示例 1 JDBC是什么…...

在ubuntu上用Python的openpyxl模块操作Excel的案例

文章目录 安装模块读取Excel数据库取数匹配数据和更新Excel数据 在Ubuntu系统的环境下基本职能借助Python的openpyxl模块实现对Excel数据的操作。 安装模块 本次需要用到的模块需要提前安装(如果没有的话) pip3 install openpyxl pip3 install pymysql在操作前&#xff0c;需…...

RabbitMQ介绍以及基本使用

文章目录 一、什么是消息队列&#xff1f; 二、消息队列的作用&#xff08;优点&#xff09; 1、解耦 2、流量削峰 3、异步 4、顺序性 三、RabbitMQ基本结构 四、RabbitMQ队列模式 1、简单队列模式 2、工作队列模式 3、发布/订阅模式 4、路由模式 5、主题模式 6、…...

搭建 Hadoop 3.3.6 伪分布式

搭建 Hadoop 3.3.6 伪分布式 IP 192.168.157.132 初始化操作 更改yum源 # 1_1.安装Wget yum install wget# 1_2.备份CentOS-Base.repo文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak# 2.下载阿里yum源配置 wget -O /etc/yum.repos.d/Cen…...

进程控制(靠原语实现)

什么是进程控制&#xff1f; 进程控制的主要功能是&#xff1a;对系统中的所有进程实施有效管理&#xff0c;它具有创建新进程、撤销已有进程、实现进程状态转换等功能。 简化理解&#xff1a;进程控制就是要实现进程状态转换。 知识一览&#xff1a; 如何实现进程控制&#…...

linux5-多任务--进程fork()

一.多任务&#xff1a;让系统具备同时处理多个任务的能力 1.如何实现多任务 1.1进程&#xff1a;操作系统上正在运行的程序&#xff0c;需要消耗内存和CPU 1.1.1 进程的生存周期&#xff1a;创建、调度、消亡 1.1.1.1进程的创建&#xff1a;每个进程被创建时&#xff0c;操作…...

【蓝桥】二分法

1、简介 1.1 定义&#xff1a; 通过将问题的搜索范围一分为二&#xff0c;迭代地缩小搜索范围&#xff0c;直到找到目标或确定目标不存在 1.2 适用&#xff1a; 有序数据集合&#xff0c;且每次迭代可以将搜索范围缩小一半 1.3 本质&#xff1a; 枚举&#xff1a;利用数据结构…...

linux查看程序占用的本地端口

ss是Socket Statistics的缩写&#xff0c;用来替代旧的netstat工具&#xff0c;功能更强大&#xff0c;执行更快。它用于查看系统的网络连接情况&#xff0c;包括TCP、UDP等协议的信息。 一. 命令解析&#xff1a; sudo ss -tulwnpss (Socket Statistics)&#xff1a;替代 ne…...

统计函数运行时间的python脚本

这是一个统计函数运行时间的实用脚本&#xff0c;其中用到了函数的嵌套、链式传输参数&#xff0c;以及修饰器。 import time# 定义一个装饰器timer&#xff0c;用于计算被装饰函数的运行时间 def timer(func):print("执行了timer")def wrapper(*args, **kwargs):st…...

百度搜索和文心智能体接入DeepSeek满血版——AI搜索的新纪元

在当今数字化时代&#xff0c;搜索引擎作为互联网信息获取的核心工具&#xff0c;正经历着前所未有的变革。据悉&#xff0c;2025年2月16日&#xff0c;百度搜索和文心智能体平台宣布全面接入DeepSeek和文心大模型的最新深度搜索功能&#xff0c;搜索用户可免费使用DeepSeek和文…...

快速入门Springboot+vue——MybatisPlus快速上手

学习自哔哩哔哩上的“刘老师教编程”&#xff0c;具体学习的网站为&#xff1a;6.MybatisPlus快速上手_哔哩哔哩_bilibili&#xff0c;以下是看课后做的笔记&#xff0c;仅供参考。 第一节 ORM介绍 ORM对象关系映射&#xff0c;为了解决面向对象与关系数据库存在的互补匹配现象…...

在C#中动态访问对象属性时,用表达式树可以获得高效性能

在C#中如何用表达式树动态访问对象属性的问题。用户可能已经知道反射的基本用法&#xff0c;但想用表达式树来提高性能&#xff0c;因为表达式树编译后的委托执行速度比反射快。 首先&#xff0c;表达式树的基本概念。表达式树允许在运行时构建代码&#xff0c;并编译成可执行的…...

性能:React 实战优化技巧 之 函数闭包

子组件使用了 React.memo &#xff0c;为什么 “prop 值未发生改变”&#xff0c;子组件依然被重新渲染了&#xff1f; &#x1f6a7; 示例&#xff1a;点击子组件中按钮&#xff0c;获取 input 数据进行提交&#xff08;常见于表单&#xff09; index.tsx import Author f…...

蓝桥杯学习大纲

&#xff08;致酷德与热爱算法、编程的小伙伴们&#xff09; 在查阅了相当多的资料后&#xff0c;发现没有那篇博客、文章很符合我们备战蓝桥杯的学习路径。所以&#xff0c;干脆自己整理一篇&#xff0c;欢迎大家补充&#xff01; 一、蓝桥必备高频考点 我们以此为重点学习…...

Windows11切换回Windows10风格右键菜单

参考文章&#xff1a;Win11新版右键菜单用不惯&#xff1f;一键切换回Win10经典版&#xff01;-CSDN博客 以管理员权限运行命令行cmd 切换为经典旧版右键菜单&#xff0c;执行 reg.exe add “HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServe…...

Python 爬虫selenium

1.selenium自动化 selenium可以操作浏览器&#xff0c;在浏览器页面上实现&#xff1a;点击、输入、滑动 等操作。 不同于selenium自动化&#xff0c;逆向本质是&#xff1a; 分析请求&#xff0c;例如&#xff1a;请求方法、请求参数、加密方式等。用代码模拟请求去实现同等…...

Linux常用操作

软件安装 CentOS系统使用: yum [install remove search] [-y] 软件名称 install 安装 remove 卸载 search 搜索 -y,自动确认 Ubuntu系统使用 apt [install remove search] [-y] 软件名称 install 安装 remove 卸载 search 搜索 -y,自动确认 yum 和 apt 均需要root权限 syste…...

Note25022001_Excel表格如何在文字的中间或者后边插入当前日期

Excel表格如何在文字的中间或者后边插入当前日期 关键字&#xff1a; EXCEL&#xff1b;当前日期&#xff1b;文字中间 如图所示&#xff1a; 其中一种实现方法如下&#xff1a; 打开表格&#xff0c;在某一个表格中输入&#xff1a; "项目计划管理表&#xff08;厂内&…...

Django5 实用指南(四)URL路由与视图函数

4.1 Django5的URL路由系统 Django 的 URL 路由系统是其核心组件之一&#xff0c;它负责将用户的 HTTP 请求&#xff08;即 URL&#xff09;映射到相应的视图函数上。每当用户在浏览器中访问某个 URL 时&#xff0c;Django 会根据项目的 URL 配置文件&#xff08;urls.py&#…...

Unity3D 基于 GPU 动画和 Compute Shader 的大批量动画渲染详解

引言 在现代游戏开发中&#xff0c;渲染大量动画角色是一个常见的需求&#xff0c;尤其是在大规模战斗场景、开放世界游戏或 VR/AR 应用中。传统的 CPU 动画计算和渲染方式在面对大批量角色时&#xff0c;往往会遇到性能瓶颈。为了优化性能&#xff0c;开发者可以利用 GPU 的强…...

遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…...

什么是DeFi (去中心化金融)

DeFi (去中心化金融) 概述 &#x1f4b0; 1. DeFi 基础概念 1.1 什么是 DeFi&#xff1f; DeFi 是建立在区块链上的金融服务生态系统&#xff0c;它&#xff1a; 无需中心化中介开放且透明无需许可即可参与代码即法律 1.2 DeFi 的优势 开放性&#xff1a;任何人都可以参与…...

深入解析 sudo -l 命令的输出内容

在 Linux 系统中&#xff0c;sudo 命令允许普通用户以超级用户&#xff08;root&#xff09;权限执行命令。sudo -l 命令用于查看当前用户在 sudoers 配置文件中的权限&#xff0c;以及与 sudo 相关的安全策略。本文将详细解析 sudo -l 输出的各个部分&#xff0c;包括 用户权限…...

DeepSeek 助力 Vue 开发:打造丝滑的瀑布流布局(Masonry Layout)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

linux学习【7】Sourc Insight 4.0设置+操作

目录 1.Source Insight是什么&#xff1f;2.需要哪些配置&#xff1f;3.怎么新建项目4.一些问题的解决1.中文乱码问题 按照这个设置就可以了&#xff0c;下面的设置会标明设置理由。 1.Source Insight是什么&#xff1f; 阅读源码&#xff0c;编辑源码&#xff0c;不能编译&am…...

OpenCV形态学操作

1.1. 形态学操作介绍 初识&#xff1a; 形态学操作是一种基于图像形状的处理方法&#xff0c;主要用于分析和处理图像中的几何结构。其核心是通过结构元素&#xff08;卷积核&#xff09;对图像进行扫描和操作&#xff0c;从而改变图像的形状和特征。例如&#xff1a; 腐蚀&…...

使用Python中的`gensim`库构建LDA(Latent Dirichlet Allocation)模型来分析收集到的评论

下面为你详细介绍如何使用Python中的gensim库构建LDA&#xff08;Latent Dirichlet Allocation&#xff09;模型来分析收集到的评论。LDA是一种主题模型&#xff0c;它可以将文档集合中的文本按照主题进行分类。 步骤概述 数据预处理&#xff1a;对收集到的评论进行清洗、分词…...

【STM32】外部时钟|红外反射光电开关

1.外部时钟 单片机如何对外部触发进行计数&#xff1f;先看一下内部时钟&#xff0c;内部时钟是接在APB1和APB2时钟线上的&#xff0c;APB1,APB2来自stm32单片机内部的脉冲信号&#xff0c;也叫内部时钟。我们用来定时。同样我们可以把外部的信号接入单片机&#xff0c;来对其…...

Visual Studio Code 集成 Baidu Comate

文章目录 安装Baidu Comate插件 安装Baidu Comate插件 从左主侧栏中 点击 【扩展】这个图标&#xff0c;然后在上方输入栏中输入 baidu comate —>选中列出的Bai Comate —>点击 【安装】按钮&#xff0c;等待安装完毕…...

数据结构者

数据&#xff08;data&#xff09;&#xff1a;可被计算机接受处理的符号总称 数据元素&#xff08;data element&#xff09;&#xff1a;数据的基本单位&#xff0c;常作为一个整体进行考虑和处理 一个数据元素可以由若干个数据项&#xff08;data item&#xff09;组成 数…...

论文阅读 DOES END-TO-END AUTONOMOUS DRIVING REALLY NEED PERCEPTION TASKS?

端到端的强势来袭&#xff0c;好久了~~~ 简单翻译&#xff1a;端到端真的需要感知任务嘛&#xff1f; code https://github.com/PeidongLi/SSR. https://arxiv.org/pdf/2409.18341 1. 摘要 端到端自动驾驶&#xff08;E2EAD&#xff09;方法通常依赖于监督式感知任务来提取显…...

总结UML类图几种关系画法

最近在公司需要画类图&#xff0c;有些遗忘&#xff0c;于是重新学习并并总结了一下&#xff1a; 继承&#xff1a;实线空心三角箭头。A继承B&#xff0c;A指向B。A是一种B。实现&#xff1a;虚线空心三角箭头。A实现B&#xff0c;A指向B。A实现B接口。关联&#xff1a;实线普…...