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

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

Reward Centering(一)

  • 文章概括
  • 摘要
  • 1 奖励中心化理论

文章概括

引用:

@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设置,我们提出了一种稍微更复杂的方法。奖励中心化是一个通用的概念,因此我们预计几乎所有的强化学习算法都能从奖励中心化的加入中受益。


强化学习是一种基于计算的方法,用于从交互中学习,其中学习智能体的目标是获得尽可能多的奖励(Sutton & Barto, 2018)。在许多感兴趣的问题中,智能体与环境之间的交互流是持续的,无法自然地划分为不相交的子序列或情节。在持续性问题中,智能体会经历无穷多个奖励,因此评估其性能的一种可行方法是衡量每步获得的平均奖励,即奖励率,并且立即奖励和延迟奖励被赋予相等的权重。折扣奖励形式提供了另一种解释无限奖励总和的方法,即通过折扣因子减少延迟奖励的权重,从而偏向于立即奖励。这两种问题形式通常是分别研究的,每种都有其对应的一套求解方法或算法。

在本文中,我们表明,当使用常见的折扣方法(如actor-critic方法(Barto et al., 1983)或Q-learning(Watkins & Dayan, 1992))时,对观察到的奖励进行平均奖励估计并将减去的简单策略可以显著提高性能(如图1所示)。这一理论可以追溯到1962年,Blackwell关于离散马尔可夫决策过程(MDPs)中动态规划的奠基性研究。我们仍在逐步认识其更深远的影响,特别是以下两个方面:


在这里插入图片描述图1:学习曲线展示了在不同折扣因子下,Q-learning在有无奖励中心化情况下在访问控制排队问题(Sutton & Barto, 1998)中的性能差异。绘制的曲线表示智能体在50次运行中,每步获得的平均奖励随交互时间步数的变化情况。阴影区域表示一个标准误差。详见第4节。


  1. 对奖励进行均值中心化会从价值估计中移除一个与状态无关的常数(该常数与 1 − γ 1-\gamma 1γ成反比,其中 γ \gamma γ表示折扣因子),从而使价值函数逼近器能够专注于状态和动作之间的相对差异。因此,对于折扣因子接近于1的情况,价值的估计会变得相对容易(例如,不会导致性能下降;见图1)。

  2. 此外,对奖励进行均值中心化(并不令人意外地)使标准方法对奖励中的任意常数偏移具有鲁棒性。这在强化学习应用中可能非常有用,尤其是在奖励信号未知或不断变化的情况下。

1. 均值中心化奖励移除状态无关的常数,从而提升价值估计的稳定性

(1) 理论推导 强化学习中的价值函数定义为: V π ( s ) = E π [ ∑ t = 0 ∞ γ t r t ∣ s 0 = s ] V^\pi(s) = \mathbb{E}^\pi \left[ \sum_{t=0}^{\infty} \gamma^t r_t \mid s_0 = s \right] Vπ(s)=Eπ[t=0γtrts0=s] 其中:

  • r t r_t rt 是奖励,
  • γ ∈ [ 0 , 1 ] \gamma \in [0,1] γ[0,1] 是折扣因子,
  • π \pi π 是策略。

假设我们对奖励 r t r_t rt 进行均值中心化,即减去奖励的期望: r t ′ = r t − c r_t' = r_t - c rt=rtc 其中 c c c 是奖励的均值(一个常数)。

我们计算新奖励下的价值函数: V ′ π ( s ) = E π [ ∑ t = 0 ∞ γ t ( r t − c ) ∣ s 0 = s ] V'^\pi(s) = \mathbb{E}^\pi \left[ \sum_{t=0}^{\infty} \gamma^t (r_t - c) \mid s_0 = s \right] Vπ(s)=Eπ[t=0γt(rtc)s0=s] = E π [ ∑ t = 0 ∞ γ t r t ∣ s 0 = s ] − E π [ ∑ t = 0 ∞ γ t c ∣ s 0 = s ] = \mathbb{E}^\pi \left[ \sum_{t=0}^{\infty} \gamma^t r_t \mid s_0 = s \right] - \mathbb{E}^\pi \left[ \sum_{t=0}^{\infty} \gamma^t c \mid s_0 = s \right] =Eπ[t=0γtrts0=s]Eπ[t=0γtcs0=s] = V π ( s ) − c ∑ t = 0 ∞ γ t = V^\pi(s) - c \sum_{t=0}^{\infty} \gamma^t =Vπ(s)ct=0γt = V π ( s ) − c 1 − γ = V^\pi(s) - \frac{c}{1 - \gamma} =Vπ(s)1γc

可以看到,均值中心化后的价值函数 V ′ π ( s ) V'^\pi(s) Vπ(s) 相当于原来的 V π ( s ) V^\pi(s) Vπ(s) 减去一个常数项 c 1 − γ \frac{c}{1 - \gamma} 1γc,该项不依赖于状态 s s s,即它不会影响不同状态的价值相对大小关系。

(2) 影响分析 这个结论表明:

  • 价值估计器仅需学习状态之间的相对差异,而不用关注状态无关的全局偏移量,这可以减少学习难度,提高稳定性。
  • γ \gamma γ 接近 1 时, c 1 − γ \frac{c}{1 - \gamma} 1γc 变得非常大,意味着去除这个偏移后,神经网络或函数逼近器更容易收敛到正确的相对值,而不会受到大数值影响。

(3) 具体例子 假设我们训练一个强化学习智能体来玩一个游戏:

  • 在原始奖励定义下,智能体在每个时间步获得 r t r_t rt(比如 +1 表示胜利,-1 表示失败)。
  • 但如果所有奖励都加上一个常数偏移(如 + 100 +100 +100),即 r t = r t + 100 r_t = r_t + 100 rt=rt+100,则价值函数也会变大,特别是当 γ \gamma γ 接近 1 时,累积值会变得极大。

如果我们对奖励进行均值中心化,即去掉奖励的均值(比如减去
c = 100 c=100 c=100),就可以避免数值过大的问题,让价值估计更稳定,且不会改变策略学习的方向。

(4) 关键点总结

  • 均值中心化移除了 c 1 − γ \frac{c}{1-\gamma} 1γc,不会改变状态之间的相对价值排序。
  • 折扣因子 γ \gamma γ 越大,这个偏移项越大,因此均值中心化的效果越显著。
  • 更稳定的学习:去除状态无关的常数项可以让价值函数的学习更加平滑,提高逼近能力。

提问: 如果在一开始不加偏移,不就不用均值中心化了嘛?
回答: 这个问题的核心在于奖励的偏移是否是已知且可控的。如果你一开始设计奖励时完全不加偏移,理论上确实不需要均值中心化,但在实际强化学习应用中,奖励偏移往往是不可控的,甚至是动态变化的,这就是为什么均值中心化仍然有重要作用。在强化学习中,奖励偏移的来源可能有以下几种:

(1) 任务设定导致的偏移

  • 在某些任务中,奖励的基准不是 0。例如,机器人行走任务中,常见的奖励信号是:
  • 向前走一步 + 1 +1 +1
  • 停滞 0 0 0
  • 摔倒 − 10 -10 10
  • 但在另一个相似任务中,奖励可能是:
  • 向前走一步 + 101 +101 +101
  • 停滞 + 100 +100 +100
  • 摔倒 + 90 +90 +90

如果你不对奖励进行均值中心化,这两个任务的 Q 值尺度会有显著不同,使得学习难以泛化。

(2) 环境动态变化

  • 现实世界中的奖励信号经常变化,例如:
    • 机器人操作任务的传感器误差可能导致奖励测量的不稳定。
    • 自主驾驶中的交通情况变化可能导致奖励期望不同。
    • 金融交易中的市场波动可能导致回报的均值变化。

如果不进行均值中心化,每次环境变化都会影响 Q 值的范围,导致学习过程不稳定。

(3) 人工设计的奖励偏移

  • 许多强化学习任务需要人为设计奖励,而研究人员可能会无意中引入偏移,例如:
    • 让奖励总是非负(避免负值影响训练),导致整体奖励向正值偏移。
    • 在一些游戏 AI 训练中,奖励的定义可能随版本更新而变化,比如早期版本的奖励范围是 [ − 10 , 10 ] [-10,10] [10,10],而新版本变成了 [ 0 , 20 ] [0,20] [0,20]


均值中心化可以让算法在不同版本的奖励尺度下仍然保持稳定。


2. 均值中心化使强化学习方法对奖励常数偏移具有鲁棒性
(1) 直观理解 在强化学习中,许多任务的奖励信号并不是固定的:

  • 可能受环境噪声影响(例如机器人在物理世界中的感知误差)。
  • 可能因任务设定不同而发生偏移(例如从 r t r_t rt 变为 r t + C r_t + C rt+C)。
  • 甚至可能因人为设定不同而调整奖励基准(例如不同游戏版本中奖励尺度不同)。

如果使用传统方法,不同奖励偏移会导致学习不稳定,但均值中心化后,方法能自动适应这些变化,因为它对奖励的全局偏移不敏感。

(2) 公式推导 假设某个任务的奖励被整体偏移了一个常数 c c c r t ′ = r t + c r_t' = r_t + c rt=rt+c

那么,标准强化学习算法(如 Q-learning)在没有均值中心化的情况下,会计算 Q 值: Q π ( s , a ) = E π [ ∑ t = 0 ∞ γ t ( r t + c ) ∣ s 0 = s , a 0 = a ] Q^\pi(s, a) = \mathbb{E}^\pi \left[ \sum_{t=0}^{\infty} \gamma^t (r_t + c) \mid s_0 = s, a_0 = a \right] Qπ(s,a)=Eπ[t=0γt(rt+c)s0=s,a0=a]
= E π [ ∑ t = 0 ∞ γ t r t ∣ s 0 = s , a 0 = a ] + E π [ ∑ t = 0 ∞ γ t c ∣ s 0 = s , a 0 = a ] = \mathbb{E}^\pi \left[ \sum_{t=0}^{\infty} \gamma^t r_t \mid s_0 = s, a_0 = a \right] + \mathbb{E}^\pi \left[ \sum_{t=0}^{\infty} \gamma^t c \mid s_0 = s, a_0 = a \right] =Eπ[t=0γtrts0=s,a0=a]+Eπ[t=0γtcs0=s,a0=a]
= Q π ( s , a ) + c 1 − γ = Q^\pi(s, a) + \frac{c}{1 - \gamma} =Qπ(s,a)+1γc

因此,Q 值被整体偏移了 c 1 − γ \frac{c}{1 - \gamma} 1γc,但策略不变,因为贪心选择仍然依赖于 Q Q Q 的相对大小。

如果我们对奖励进行均值中心化(即 r t ′ = r t − E [ r ] r_t' = r_t - \mathbb{E}[r] rt=rtE[r]),那么 Q 值的偏移项消失,学习过程就不会受到奖励偏移的影响。

(3) 具体应用场景
示例 1: 机器人强化学习

  • 机器人学习走路,原始奖励可能是“每步前进 +1”。
  • 但如果环境变化,比如地面摩擦力不同,奖励信号可能变为“每步前进 +10”。
  • 如果没有均值中心化,Q 值会大幅增长,可能影响稳定性
  • 如果进行均值中心化,Q 值仍然可以学习到相对最优的行动,而不会受奖励尺度的变化影响

示例 2: 游戏 AI 训练

  • AI 在不同版本的游戏中训练,其中一个版本的奖励是 + 10 +10 +10,另一个是 + 100 +100 +100
  • 如果奖励不均值中心化,不同版本训练出来的 AI 可能表现不同。
  • 均值中心化可以让 AI 学习的策略在不同奖励尺度下保持一致,提高泛化能力。

(4) 关键点总结

  • 均值中心化后,RL 方法能适应不同的奖励偏移,提高鲁棒性。
  • 尤其在奖励信号未知或动态变化时,这种方法能提升稳定性
  • 在不同环境或任务中,均值中心化可以让强化学习方法的泛化能力更强

总结

知识点结论具体应用
移除状态无关常数让价值估计更稳定,尤其是 γ \gamma γ 接近 1 时机器人、游戏 AI 学习
提高奖励偏移的鲁棒性适应不同奖励尺度,增强泛化能力任务切换、环境变化

均值中心化奖励是一种简单但有效的方法,可以让强化学习算法更稳定、更鲁棒,并提高泛化能力。

我们首先介绍奖励中心化的概念以及其潜在的益处(第1节)。接着,我们展示如何进行奖励中心化,从最简单的形式开始(即预测问题中),并证明在折扣奖励的时序差分算法中使用奖励中心化可以非常有效(第2节)。在off-policy设置下,需要更复杂的方法;针对这一情况,我们提出了一种基于强化学习平均奖励形式最新进展的奖励中心化方法(第3节)。随后,我们通过Q-learning的案例研究展示奖励中心化的应用,其中我们(a)基于Devraj和Meyn(2021)的最新研究提出一个收敛性结果,并且(b)在一系列控制问题中展现了一致的趋势,这些问题涉及表格型、线性以及非线性函数逼近(第4节)。最后,我们讨论所提方法的局限性,并提出未来研究的方向(第5节)。


1 奖励中心化理论

我们通过一个有限马尔可夫决策过程(MDP) ( S , A , R , p ) (\mathcal{S},\mathcal{A},\mathcal{R},p) (S,A,R,p)形式化智能体与环境之间的交互,其中 S \mathcal{S} S表示状态集合, A \mathcal{A} A表示动作集合, R \mathcal{R} R表示奖励集合, p : S × R × S × A → [ 0 , 1 ] p:\mathcal{S}\times \mathcal{R}\times \mathcal{S}\times \mathcal{A}\to[0,1] p:S×R×S×A[0,1]表示状态转移动态。在时间步 t t t,智能体处于状态 S t ∈ S {S}_t\in \mathcal{S} StS,按照行为策略 b : A × S → [ 0 , 1 ] b:\mathcal{A}\times \mathcal{S}\to[0,1] b:A×S[0,1]选择动作 A t ∈ A {A}_t\in \mathcal{A} AtA,并根据转移动态 p ( s ′ , r ∣ s , a ) = Pr ( S t + 1 = s ′ , R t + 1 = r ∣ S t = s , A t = a ) p(s',r|s,a)=\text{Pr}(S_{t+1}=s',R_{t+1}=r|S_t=s,A_t=a) p(s,rs,a)=Pr(St+1=s,Rt+1=rSt=s,At=a)观察下一个状态 S t + 1 ∈ S S_{t+1}\in \mathcal{S} St+1S和奖励 R t + 1 ∈ R R_{t+1}\in \mathcal{R} Rt+1R

有限MDP与持续性问题


在强化学习中,我们通常用有限马尔可夫决策过程(MDP) ( S , A , R , p ) (\mathcal{S},\mathcal{A},\mathcal{R},p) (S,A,R,p) 来形式化智能体与环境的交互,其中:

  • S \mathcal{S} S:状态集合,表示环境可能出现的所有状态;
  • A \mathcal{A} A:动作集合,表示智能体可采取的所有动作;
  • R \mathcal{R} R:奖励集合,表示每个动作后环境返回的奖励;
  • 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的概率。

在每个时间步 t t t

  • 智能体处于状态 S t S_t St
  • 根据策略 b b b(或称 π \pi π)选择动作 A t A_t At
  • 随后根据转移动态 p p p 观察到下一个状态 S t + 1 S_{t+1} St+1 和奖励 R t + 1 R_{t+1} Rt+1

对于持续性问题(infinite-horizon problems),交互过程无限进行,智能体的目标是最大化长期获得的平均奖励。由于无限累积奖励可能发散,我们引入了折扣因子 γ ∈ [ 0 , 1 ) \gamma\in[0,1) γ[0,1) 来使得累积奖励有限。

我们考虑持续性问题,即智能体与环境的交互无限进行。智能体的目标是最大化在长时间内获得的平均奖励(其形式化定义见公式(2))。我们研究的方法试图通过估计每个状态下的期望折扣奖励和来实现这一目标,对于 γ ∈ [ 0 , 1 ) \gamma\in[0,1) γ[0,1),其定义如下:
v γ π ( s ) ≐ E [ ∑ t = 0 ∞ γ t R t + 1 ∣ S t = s , A t : ∞ ∼ π ] , ∀ s . v_{\gamma}^{\pi}(s) \doteq \mathbb{E}\left[\sum_{t=0}^{\infty} \gamma^t R_{t+1} \mid S_t=s, A_{t:{\infty}} \sim \pi \right], \quad \forall s. vγπ(s)E[t=0γtRt+1St=s,At:π],s.
在这里,折扣因子 γ \gamma γ不是问题本身的一部分,而是算法的参数(关于持续性问题目标的更详细讨论,请参见Naik et al. (2019)或Sutton & Barto (2018)的第10.4节)。

折扣值函数 v γ π ( s ) v_{\gamma}^{\pi}(s) vγπ(s)

定义在某状态 s s s下,给定策略 π \pi π 时的折扣值函数为 v γ π ( s ) ≐ E [ ∑ t = 0 ∞ γ t R t + 1 ∣ S t = s , A t : ∞ ∼ π ] , ∀ s . v_{\gamma}^{\pi}(s) \doteq \mathbb{E}\left[\sum_{t=0}^{\infty} \gamma^t R_{t+1} \mid S_t=s,\, A_{t:\infty} \sim \pi \right], \quad \forall s. vγπ(s)E[t=0γtRt+1St=s,At:π],s.

解释:

  • 该表达式表示从状态 s s s 开始,未来每一步获得的奖励都会乘以逐步递减的权重 γ t \gamma^t γt(其中 γ \gamma γ 控制未来奖励的重要性)。
  • 这种折扣累积不仅确保无限求和收敛,还可以在算法设计中作为一个参数(虽然它不属于持续性问题本身的定义)。

举例说明:

设想一个机器人在网格世界中导航,每走一步获得奖励。如果机器人当前状态离目标较远,未来可能有多个奖励,但它们会以 γ \gamma γ(例如 0.95 或 0.99)递减。这样,机器人能够权衡眼前与远期奖励,做出合理决策。

奖励中心化是一个简单的概念:从奖励中减去观察到的奖励的经验均值。这样处理后,修改后的奖励就表现为均值中心化。在bandit问题中,均值中心化奖励的效果是广为人知的。例如,Sutton和Barto(2018,第2.8节)表明,估计并从观察到的奖励中减去平均奖励可以显著提高学习速率。在这里,我们展示了这一益处可以扩展到完整的强化学习问题,并且随着折扣因子 γ \gamma γ趋近于1,这种益处会被进一步放大。

奖励中心化(Reward Centering)的基本思想


奖励中心化指的是:从实际观察到的奖励中减去其经验均值。例如,如果在某任务中,观察到的奖励序列为 R 1 , R 2 , … R_1, R_2, \ldots R1,R2,,那么我们定义中心化后的奖励为 R t ′ = R t − r ^ , R_t' = R_t - \hat{r}, Rt=Rtr^, 其中 r ^ \hat{r} r^ 是观察到的奖励均值。


在bandit问题中的效果:

  • Sutton和Barto(例如第2.8节)展示过,在多臂bandit问题中,减去平均奖励可以大幅提高估计和学习的速率,因为这样可以让算法关注各个选项间的相对优势,而不是被整体偏移影响。

扩展到完整强化学习问题:

  • 当我们面对复杂的MDP时,奖励信号可能会因为环境设计、传感器噪声或人为调整而产生常数偏移。
  • 奖励中心化能将这种常数项移除,使得后续学习主要关注状态和动作之间的相对差异,从而提高数值稳定性和学习效率。

具体例子:

假设某游戏设计时给每个时间步都加了一个“生存奖励” + 1 +1 +1(即使没有其他奖励)。那么,如果不中心化,每个状态的价值会额外包含一个大项 1 1 − γ \frac{1}{1-\gamma} 1γ1(当 γ \gamma γ接近1时,这一项非常大),可能掩盖掉真正反映策略优劣的状态差异。通过奖励中心化,我们就能去掉这一常数,使得学习更加专注于“相对”好坏的比较。

奖励中心化带来益处的原因可以通过折扣值函数的Laurent级数分解来揭示。折扣值函数可以分解为两部分,其中一部分是一个常数,它不依赖于状态或动作,因此在例如动作选择等过程中不会产生影响。从数学上讲,对于策略 π \pi π在折扣因子 γ \gamma γ下对应的表格型折扣值函数 v π γ : S → R v^{\gamma}_{\pi}:\mathcal{S}\to \mathbb{R} vπγ:SR,其分解如下:

v π γ ( s ) = r ( π ) 1 − γ + v ~ π ( s ) + e π γ ( s ) , ∀ s , (1) v^{\gamma}_{\pi}(s) = \frac{r(\pi)}{1-\gamma} + \tilde{v}_{\pi}(s) + e_{\pi}^{\gamma}(s), \quad \forall s,\tag{1} vπγ(s)=1γr(π)+v~π(s)+eπγ(s),s,(1)

其中, r ( π ) r(\pi) r(π)是策略 π \pi π获得的与状态无关的平均奖励, v ~ π ( s ) \tilde{v}_{\pi}(s) v~π(s)是状态 s s s的微分值函数,它们在遍历性MDPs(为方便表述)中定义如下(例如,见Wan et al., 2021):

r ( π ) ≐ lim ⁡ n → ∞ 1 n ∑ t = 1 n E [ R t ∣ S 0 , A 0 : t − 1 ∼ π ] , r(\pi) \doteq \lim_{n \to \infty} \frac{1}{n} \sum_{t=1}^{n} \mathbb{E} \left[ R_t \mid S_0, A_{0:t-1} \sim \pi \right], r(π)nlimn1t=1nE[RtS0,A0:t1π],
v ~ π ( s ) ≐ E [ ∑ k = 1 ∞ ( R t + k − r ( π ) ) ∣ S t = s , A t : ∞ ∼ π ] , (2) \tilde{v}_{\pi}(s) \doteq \mathbb{E} \left[ \sum_{k=1}^{\infty} (R_{t+k} - r(\pi)) \mid S_t = s, A_{t:\infty} \sim \pi \right], \tag{2} v~π(s)E[k=1(Rt+kr(π))St=s,At:π],(2)

e π γ ( s ) e_{\pi}^{\gamma}(s) eπγ(s)表示一个误差项,该误差项在折扣因子趋近于1时收敛至0(Blackwell, 1962: 定理4a;另见Puterman, 1994的推论8.2.4)。这种对状态值的分解也意味着状态-动作值函数具有类似的分解形式。

折扣值函数的Laurent级数分解


理论上,我们可以将折扣值函数 v γ π ( s ) v_{\gamma}^{\pi}(s) vγπ(s)分解为: v π γ ( s ) = r ( π ) 1 − γ + v ~ π ( s ) + e π γ ( s ) , ∀ s , (1) v^{\gamma}_{\pi}(s) = \frac{r(\pi)}{1-\gamma} + \tilde{v}_{\pi}(s) + e_{\pi}^{\gamma}(s), \quad \forall s, \tag{1} vπγ(s)=1γr(π)+v~π(s)+eπγ(s),s,(1) 其中各项含义如下:

第一项: r ( π ) 1 − γ \frac{r(\pi)}{1-\gamma} 1γr(π)

  • 定义: r ( π ) r(\pi) r(π)表示策略 π \pi π 在长期内获得的平均奖励,形式上定义为 r ( π ) ≐ lim ⁡ n → ∞ 1 n ∑ t = 1 n E [ R t ∣ S 0 , A 0 : t − 1 ∼ π ] . r(\pi) \doteq \lim_{n \to \infty} \frac{1}{n} \sum_{t=1}^{n} \mathbb{E} \left[ R_t \mid S_0, A_{0:t-1} \sim \pi \right]. r(π)nlimn1t=1nE[RtS0,A0:t1π].
  • 意义: 这一项是一个常数项,在所有状态上都相同。它说明了若奖励总是有一个固定的平均水平,那么折扣值函数中会存在一个放大了的常数偏移,放大倍数为 1 1 − γ \frac{1}{1-\gamma} 1γ1
  • 具体例子: 若某任务中,每步的平均奖励为 r ( π ) = 2 r(\pi)=2 r(π)=2,且 γ = 0.9 \gamma=0.9 γ=0.9,则该项为 2 1 − 0.9 = 20. \frac{2}{1-0.9} = 20. 10.92=20.
    这意味着每个状态的值函数都会多出20的常数项,尽管这并不影响策略选择(因为所有状态都同样增加),但在函数逼近和数值稳定性上可能引入困难。

第二项: v ~ π ( s ) \tilde{v}_{\pi}(s) v~π(s)

  • 定义: 微分值函数 v ~ π ( s ) \tilde{v}_{\pi}(s) v~π(s)描述的是状态 s s s 在未来奖励中相对于平均奖励的累积差异: v ~ π ( s ) ≐ E [ ∑ k = 1 ∞ ( R t + k − r ( π ) ) ∣ S t = s , A t : ∞ ∼ π ] . (2) \tilde{v}_{\pi}(s) \doteq \mathbb{E} \left[ \sum_{k=1}^{\infty} (R_{t+k} - r(\pi)) \mid S_t = s, A_{t:\infty} \sim \pi \right]. \tag{2} v~π(s)E[k=1(Rt+kr(π))St=s,At:π].(2)
  • 意义: 这部分捕捉了各个状态相对于平均水平的“优势”或“劣势”。它是真正反映状态好坏和策略效果的部分,也是学习过程中需要重点关注和逼近的内容。
  • 具体例子: 在一个棋类游戏中,虽然每一步都有基本的“奖励”或“惩罚”(例如步数奖励或罚分),但真正决定局面优劣的是各个棋局状态相对于长期平均水平的优势。 v ~ π ( s ) \tilde{v}_{\pi}(s) v~π(s) 就类似于描述在当前局面下,通过后续精妙走法超越平均水平所能获得的附加收益。

第三项: e π γ ( s ) e_{\pi}^{\gamma}(s) eπγ(s)

  • 定义: e π γ ( s ) e_{\pi}^{\gamma}(s) eπγ(s) 是一个误差项,它表示由于使用折扣因子近似持续性问题目标而引入的误差。根据理论(Blackwell, 1962;Puterman, 1994),当 γ \gamma γ 趋近于1时,该项收敛于0。
  • 意义: 这说明如果选择的 γ \gamma γ 非常接近1,那么折扣值函数就可以很好地近似分解为一个状态无关的常数和状态依赖的微分值函数,误差项可以忽略。
  • 具体例子: 对于长期任务(如经济调控、机器人长时间自主导航),通常希望 γ \gamma γ 设置得较高(例如0.99或更高),此时 e π γ ( s ) e_{\pi}^{\gamma}(s) eπγ(s) 非常小,实际计算中可以认为: v π γ ( s ) ≈ r ( π ) 1 − γ + v ~ π ( s ) . v^{\gamma}_{\pi}(s) \approx \frac{r(\pi)}{1-\gamma} + \tilde{v}_{\pi}(s). vπγ(s)1γr(π)+v~π(s).

Laurent级数分解解释了奖励中心化如何帮助bandit问题的学习,例如Sutton & Barto(2018)第2.5节中的示例。在该示例中,动作值估计初始化为0,而真实值围绕+4分布。动作的选择是基于它们的相对值进行的,但每个动作值估计都必须独立学习相同的常数偏移量。在估计该偏移量时的逼近误差可能会掩盖动作之间的相对差异,特别是当偏移量较大时。

在完整的强化学习问题中,这种与状态无关的偏移量可能会相当大。例如,考虑图2所示的三状态马尔可夫奖励过程(由某个MDP中的策略 π \pi π诱导得到)。从状态A到状态B的转移奖励为+3,而其他情况下的奖励为0。该过程的平均奖励为 r ( π ) = 1 r(\pi)=1 r(π)=1。表格中列出了三种不同折扣因子下的折扣状态值。请注意标准折扣值的量级,特别是当折扣因子增加时的跳变幅度。


在这里插入图片描述图 2:一个简单例子中标准值与居中折扣值的比较。


1. 环境结构与奖励设定

从图中可以看出,状态集合为 { A , B , C } \{A, B, C\} {A,B,C},并且存在一个循环: A → + 3 B → + 0 C → + 0 A . A \xrightarrow{+3} B \xrightarrow{+0} C \xrightarrow{+0} A. A+3 B+0 C+0 A.

  • 当智能体从 A A A 前往 B B B 时,获得奖励 + 3 +3 +3
  • 当智能体从 B B B 前往 C C C 时,奖励为 0 0 0
  • 当智能体从 C C C 前往 A A A 时,奖励为 0 0 0

在这个循环策略( π \pi π)下,每转一圈总共获得 3 3 3 的奖励,用时 3 3 3 步,所以平均奖励 r ( π ) r(\pi) r(π) r ( π ) = 3 3 = 1. r(\pi) = \frac{3}{3} = 1. r(π)=33=1.

我们感兴趣的是折扣值函数 v γ π ( s ) v^\pi_\gamma(s) vγπ(s),它表示从状态 s s s 出发,未来所有折扣奖励的期望和。因为这里是一个确定策略(A→B→C→A 不断循环),可以直接写出每个状态的价值方程。


2. 标准折扣值的 Bellman 方程

v ( A ) v(A) v(A), v ( B ) v(B) v(B), v ( C ) v(C) v(C) 分别表示在折扣因子为 γ \gamma γ 时,从状态 A A A, B B B, C$ 出发的折扣价值。根据定义,有:

  1. 从 A 出发:立即得到奖励 3 3 3,然后下一步必到 B B B,并继续享受未来折扣价值 γ v ( B ) \gamma\,v(B) γv(B) v ( A ) = 3 + γ v ( B ) . v(A) = 3 + \gamma\,v(B). v(A)=3+γv(B).

  2. 从 B 出发:立即得到奖励 0 0 0,下一步到 C C C,然后继续享受折扣价值 γ v ( C ) \gamma\,v(C) γv(C) v ( B ) = 0 + γ v ( C ) . v(B) = 0 + \gamma\,v(C). v(B)=0+γv(C).

  3. 从 C 出发:立即得到奖励 0 0 0,下一步到 A A A,然后继续享受折扣价值 γ v ( A ) \gamma\,v(A) γv(A) v ( C ) = 0 + γ v ( A ) . v(C) = 0 + \gamma\,v(A). v(C)=0+γv(A).

因此,三元组 ( v ( A ) , v ( B ) , v ( C ) ) (v(A), v(B), v(C)) (v(A),v(B),v(C)) 满足以下线性方程组:

{ v ( A ) − γ v ( B ) = 3 , v ( B ) − γ v ( C ) = 0 , v ( C ) − γ v ( A ) = 0. \begin{cases} v(A) - \gamma\,v(B) = 3, \\ v(B) - \gamma\,v(C) = 0, \\ v(C) - \gamma\,v(A) = 0. \end{cases} v(A)γv(B)=3,v(B)γv(C)=0,v(C)γv(A)=0.


3. 解方程组并得到数值

我们可以先从第二、第三个方程表达 v ( B ) v(B) v(B) v ( C ) v(C) v(C)

  • v ( B ) = γ v ( C ) v(B) = \gamma\,v(C) v(B)=γv(C) v ( C ) = γ v ( A ) v(C) = \gamma\,v(A) v(C)=γv(A),可得 v ( B ) = γ 2 v ( A ) . v(B) = \gamma^2\,v(A). v(B)=γ2v(A).
  • 将其代入第一个方程: v ( A ) − γ ( γ 2 v ( A ) ) = 3 ⟹ v ( A ) ( 1 − γ 3 ) = 3. v(A) - \gamma \bigl(\gamma^2\,v(A)\bigr) = 3 \quad\Longrightarrow\quad v(A) \bigl(1 - \gamma^3\bigr) = 3. v(A)γ(γ2v(A))=3v(A)(1γ3)=3. 因此, v ( A ) = 3 1 − γ 3 . v(A) = \frac{3}{1 - \gamma^3}. v(A)=1γ33.
  • 进而 v ( B ) = γ 2 v ( A ) = 3 γ 2 1 − γ 3 , v ( C ) = γ v ( A ) = 3 γ 1 − γ 3 . v(B) = \gamma^2\,v(A) \;=\; \frac{3\,\gamma^2}{1 - \gamma^3}, \quad v(C) = \gamma\,v(A) \;=\; \frac{3\,\gamma}{1 - \gamma^3}. v(B)=γ2v(A)=1γ33γ2,v(C)=γv(A)=1γ33γ.

这三个值 v ( A ) , v ( B ) , v ( C ) v(A), v(B), v(C) v(A),v(B),v(C) 就是表格中“Standard discounted values”(标准折扣值)对应的数值。我们只需要把不同的 γ \gamma γ 值(如 0.8, 0.9, 0.99)代入即可。


3.1 以 γ = 0.8 \gamma = 0.8 γ=0.8 为例

  • 1 − γ 3 = 1 − 0. 8 3 = 1 − 0.512 = 0.488 1 - \gamma^3 = 1 - 0.8^3 = 1 - 0.512 = 0.488 1γ3=10.83=10.512=0.488.
  • v ( A ) = 3 0.488 ≈ 6.15 v(A) = \dfrac{3}{0.488} \approx 6.15 v(A)=0.48836.15.
  • v ( C ) = 0.8 × 6.15 ≈ 4.92 v(C) = 0.8 \times 6.15 \approx 4.92 v(C)=0.8×6.154.92.
  • v ( B ) = 0. 8 2 × 6.15 = 0.64 × 6.15 ≈ 3.93 v(B) = 0.8^2 \times 6.15 = 0.64 \times 6.15 \approx 3.93 v(B)=0.82×6.15=0.64×6.153.93.

对照表格,可见 v ( A ) ≈ 6.15 , v ( B ) ≈ 3.93 , v ( C ) ≈ 4.92 , v(A)\approx 6.15,\quad v(B)\approx 3.93,\quad v(C)\approx 4.92, v(A)6.15,v(B)3.93,v(C)4.92,


3.2 以 γ = 0.9 \gamma = 0.9 γ=0.9 为例

  • 1 − γ 3 = 1 − 0. 9 3 = 1 − 0.729 = 0.271 1 - \gamma^3 = 1 - 0.9^3 = 1 - 0.729 = 0.271 1γ3=10.93=10.729=0.271.
  • v ( A ) = 3 0.271 ≈ 11.07 v(A) = \dfrac{3}{0.271} \approx 11.07 v(A)=0.271311.07.
  • v ( C ) = 0.9 × 11.07 ≈ 9.96 v(C) = 0.9 \times 11.07 \approx 9.96 v(C)=0.9×11.079.96.
  • v ( B ) = 0. 9 2 × 11.07 ≈ 8.97 v(B) = 0.9^2 \times 11.07 \approx 8.97 v(B)=0.92×11.078.97.

对照表格,可见 v ( A ) ≈ 11.07 , v ( B ) ≈ 8.97 , v ( C ) ≈ 9.96. v(A)\approx 11.07,\quad v(B)\approx 8.97,\quad v(C)\approx 9.96. v(A)11.07,v(B)8.97,v(C)9.96.


3.3 以 γ = 0.99 \gamma = 0.99 γ=0.99 为例

  • 1 − γ 3 = 1 − 0.9 9 3 = 1 − 0.970299 = 0.029701 1 - \gamma^3 = 1 - 0.99^3 = 1 - 0.970299 = 0.029701 1γ3=10.993=10.970299=0.029701
  • v ( A ) = 3 0.029701 ≈ 101.0 v(A) = \dfrac{3}{0.029701} \approx 101.0 v(A)=0.0297013101.0.
  • v ( C ) = 0.99 × 101.0 ≈ 99.99 v(C) = 0.99 \times 101.0 \approx 99.99 v(C)=0.99×101.099.99.
  • v ( B ) = 0.9 9 2 × 101.0 ≈ 98.99 v(B) = 0.99^2 \times 101.0 \approx 98.99 v(B)=0.992×101.098.99.

对照表格,可见 v ( A ) ≈ 101.01 , v ( B ) ≈ 98.99 , v ( C ) ≈ 99.99 , v(A)\approx 101.01,\quad v(B)\approx 98.99,\quad v(C)\approx 99.99, v(A)101.01,v(B)98.99,v(C)99.99,

现在考虑从每个状态的折扣值中减去常数偏移量 r ( π ) / ( 1 − γ ) r(\pi)/(1-\gamma) r(π)/(1γ),即 v π γ ( s ) − r ( π ) / ( 1 − γ ) v^{\gamma}_{\pi}(s) - r(\pi)/(1-\gamma) vπγ(s)r(π)/(1γ),我们称其为中心化折扣值。这些中心化值的数值要小得多,并且随着折扣因子的增加,它们的变化幅度很小。为了对比,微分值函数也列在表中。这些趋势具有普遍性:对于任何问题,当折扣因子趋近于1时,折扣值的量级会急剧增加,而中心化折扣值的变化很小,并且逐渐逼近微分值函数

形式上,中心化折扣值是均值中心化奖励的期望折扣和:

v ~ π γ ( s ) ≐ E [ ∑ t = 0 ∞ γ t ( R t + 1 − r ( π ) ) ∣ S t = s , A t : ∞ ∼ π ] , \tilde{v}_{\pi}^{\gamma}(s) \doteq \mathbb{E} \left[ \sum_{t=0}^{\infty} \gamma^t \left( R_{t+1} - r(\pi) \right) \mid S_t = s, A_{t:\infty} \sim \pi \right], v~πγ(s)E[t=0γt(Rt+1r(π))St=s,At:π],
v π γ ( s ) = r ( π ) 1 − γ + v ~ π γ ( s ) + e π γ ( s ) ⏞ v ~ π γ ( s ) , ∀ s , (3) v_{\pi}^{\gamma}(s) = \frac{r(\pi)}{1-\gamma} + \overbrace{\tilde{v}_{\pi}^{\gamma}(s) + e_{\pi}^{\gamma}(s)}^{{\tilde{v}_{\pi}^{\gamma}(s)}}, \quad \forall s, \tag{3} vπγ(s)=1γr(π)+v~πγ(s)+eπγ(s) v~πγ(s),s,(3)

其中, γ ∈ [ 0 , 1 ] \gamma\in[0,1] γ[0,1]。当 γ = 1 \gamma=1 γ=1时,中心化折扣值等于微分值函数,即 v ~ π γ ( s ) = v ~ π ( s ) , ∀ s \tilde{v}_{\pi}^{\gamma}(s) = \tilde{v}_{\pi}(s), \forall s v~πγ(s)=v~π(s),s。更一般地,中心化折扣值等于微分值函数加上Laurent级数分解中的误差项,如上式右(下)侧所示。

因此,奖励中心化使得折扣值函数中的所有信息可以通过两个组成部分捕捉:(1)常数平均奖励;(2)中心化折扣值函数。这种分解具有极大的价值:

(a) 当 γ → 1 \gamma\to1 γ1时,折扣值趋于发散,但中心化折扣值保持较小且易于处理。
(b) 如果问题的奖励整体偏移一个常数 c c c,则折扣值的量级会增加 c / ( 1 − γ ) c/(1-\gamma) c/(1γ),但中心化折扣值保持不变,因为平均奖励也会增加 c c c。这些效应将在接下来的章节中进行演示。

奖励中心化还使得可以设计允许折扣因子(作为算法参数)在智能体学习过程中变化的算法。在标准折扣方法中,这通常是低效或无效的,因为未中心化的值可能会发生剧烈变化(见图2)。相比之下,中心化值的变化较小,并且当折扣因子趋近于1时,变化几乎可以忽略不计。我们将在最后一节讨论这一令人兴奋的方向。

为了获得这些潜在的益处,我们需要从数据中估计平均奖励。下一节将展示,即使是最简单的方法也可能非常有效。

1. 背景与动机

在无限时域(持续性)强化学习中,我们往往使用折扣值函数来衡量从某状态出发、在策略(\pi)下所能获得的“未来奖励折扣总和”:
v π γ ( s ) = E [ ∑ t = 0 ∞ γ t R t + 1 ∣ S t = s , A t : ∞ ∼ π ] , γ ∈ [ 0 , 1 ) . v_{\pi}^{\gamma}(s) = \mathbb{E}\Bigl[\sum_{t=0}^{\infty} \gamma^t \,R_{t+1}\;\bigm|\; S_t = s,\;A_{t:\infty}\sim\pi \Bigr], \quad \gamma\in[0,1). vπγ(s)=E[t=0γtRt+1 St=s,At:π],γ[0,1). γ \gamma γ 接近1时, v π γ ( s ) v_{\pi}^{\gamma}(s) vπγ(s) 往往会变得数值很大(可能出现所谓“发散”到一个很大的量级),因为它累积了几乎所有将来的奖励。奖励中心化(Reward Centering) 的做法是:先估计策略 π \pi π 的平均奖励 r ( π ) r(\pi) r(π),再从每一步奖励中减去这个平均值,从而得到一个“相对奖励”。这样做能在数学与实践上带来多方面好处:

  1. 去除与状态无关的常数偏移,使学习更加稳定。
  2. 对奖励中的任何常数偏移具有鲁棒性,例如奖励整体加减一个常数不会影响中心化值。
  3. 当折扣因子 γ → 1 \gamma\to 1 γ1,原始折扣值可能发散,而中心化折扣值保持在相对较小的范围内,便于数值处理。

2. 中心化折扣值的定义

2.1 公式与含义

所谓中心化折扣值(有时也叫微分折扣值)定义为

v ~ π γ ( s ) ≐ E [ ∑ t = 0 ∞ γ t ( R t + 1 − r ( π ) ) ∣ S t = s , A t : ∞ ∼ π ] . \tilde{v}_{\pi}^{\gamma}(s) \doteq \mathbb{E} \Bigl[ \sum_{t=0}^{\infty} \gamma^t \bigl(R_{t+1} - r(\pi)\bigr) \;\Bigm|\; S_t = s,\; A_{t:\infty} \sim \pi \Bigr]. v~πγ(s)E[t=0γt(Rt+1r(π)) St=s,At:π].

  • 其中 r ( π ) r(\pi) r(π) 表示在策略 π \pi π 下获得的平均奖励(一个常数,见下节)。
  • 每个时间步的奖励都“减去”了该平均值,形成相对奖励 ( R t + 1 − r ( π ) ) \bigl(R_{t+1} - r(\pi)\bigr) (Rt+1r(π))
  • 这样,如果实际奖励刚好等于平均奖励,中心化后就变为 0;若高于平均奖励则为正值,低于平均奖励则为负值。

直观理解:你可以把 v ~ π γ ( s ) \tilde{v}_{\pi}^{\gamma}(s) v~πγ(s) 理解为:“从状态 s s s 出发,策略 π \pi π 在未来每一步都只关心奖励比平均水平高多少或低多少”

  • 如果某状态往后通常得到的奖励大于平均水平,那它的中心化折扣值就为正;
  • 若低于平均水平,则为负。

2.2 当 γ = 1 \gamma = 1 γ=1

文中提到,当 γ = 1 \gamma=1 γ=1时, v ~ π γ ( s ) \tilde{v}_{\pi}^{\gamma}(s) v~πγ(s)就等于微分值函数 v ~ π ( s ) \tilde{v}_{\pi}(s) v~π(s),即:
v ~ π 1 ( s ) = v ~ π ( s ) . \tilde{v}_{\pi}^{1}(s) \;=\; \tilde{v}_{\pi}(s). v~π1(s)=v~π(s).
这里的“微分值函数”是指无限时域下不使用折扣的那种相对价值度量(通常在平均奖励MDP的理论中出现)。

  • γ = 1 \gamma=1 γ=1时,我们完全不折扣未来奖励,因此“相对奖励”的累积正好对应经典的微分值函数。

3. 与原折扣值函数的关系

在不做中心化的情况下,原折扣值函数是 v π γ ( s ) = E [ ∑ t = 0 ∞ γ t R t + 1 ∣ S t = s , A t : ∞ ∼ π ] . v_{\pi}^{\gamma}(s) = \mathbb{E}\Bigl[\sum_{t=0}^{\infty} \gamma^t \,R_{t+1}\;\Bigm|\; S_t = s,\; A_{t:\infty}\sim\pi \Bigr]. vπγ(s)=E[t=0γtRt+1 St=s,At:π]. 文中给出的分解公式(3)说明了二者的关系: v π γ ( s ) = r ( π ) 1 − γ ⏟ 常数项 + ( v ~ π γ ( s ) + e π γ ( s ) ) ⏟ “中心化值” , ∀ s . v_{\pi}^{\gamma}(s) = \underbrace{\frac{r(\pi)}{1-\gamma}}_{\text{常数项}} \;+\; \underbrace{\Bigl(\tilde{v}_{\pi}^{\gamma}(s) + e_{\pi}^{\gamma}(s)\Bigr)}_{\text{“中心化值”}}, \quad \forall s. vπγ(s)=常数项 1γr(π)+中心化值 (v~πγ(s)+eπγ(s)),s.

  • 第一部分 r ( π ) 1 − γ \frac{r(\pi)}{1-\gamma} 1γr(π) 是一个与状态无关的常数;它会随 γ → 1 \gamma \to 1 γ1 而变得很大。
  • 第二部分 v ~ π γ ( s ) + e π γ ( s ) \tilde{v}_{\pi}^{\gamma}(s) + e_{\pi}^{\gamma}(s) v~πγ(s)+eπγ(s) 则是中心化折扣值及其近似误差项,其中 e π γ ( s ) e_{\pi}^{\gamma}(s) eπγ(s) 会在 γ → 1 \gamma \to 1 γ1 时收敛到 0。

因此,当 g a m m a gamma gamma 非常接近 1 时,原折扣值函数 v π γ ( s ) v_{\pi}^{\gamma}(s) vπγ(s) 往往会被那块 r ( π ) 1 − γ \frac{r(\pi)}{1-\gamma} 1γr(π) 的常数项“抬”得很高;而中心化折扣值只聚焦于“奖励相对于平均奖励的偏差”,数值通常更小也更稳定。


4. 奖励中心化的两大核心益处

4.1 在 γ → 1 \gamma\to 1 γ1 时保持数值稳定

  • (a) 折扣值可能发散,但中心化值不发散
    随着 γ → 1 \gamma \to 1 γ1 r ( π ) 1 − γ \frac{r(\pi)}{1-\gamma} 1γr(π) 这项会趋向无穷大(除非 r ( π ) = 0 r(\pi)=0 r(π)=0)。这会给函数逼近(如神经网络)带来严重的数值难题。而在中心化后,去掉了这一巨大常数,剩下的 v ~ π γ ( s ) \tilde{v}_{\pi}^{\gamma}(s) v~πγ(s)规模相对较小,更易于处理和学习。

小例子:假设在某个简单任务里,平均奖励 r ( π ) = 5 r(\pi)=5 r(π)=5。如果 γ = 0.99 \gamma=0.99 γ=0.99,那么 r ( π ) 1 − γ = 5 1 − 0.99 = 5 0.01 = 500. \frac{r(\pi)}{1-\gamma} = \frac{5}{1-0.99} = \frac{5}{0.01} = 500. 1γr(π)=10.995=0.015=500.
也就是说,哪怕任务并没有什么特别之处,折扣值本身就多出了 500 的“基线偏移”。对于神经网络来说,输出值都在几百到上千的范围内,训练时会更容易出现梯度过大、学习不稳定等问题。但如果把奖励中心化(即每一步都减去 5),则中心化折扣值可以保持在一个比较小的范围,避免了这一麻烦。

4.2 对奖励偏移具有鲁棒性

  • (b) 奖励整体偏移一个常数 c c c 时,中心化值不变
    如果把所有奖励 R t + 1 R_{t+1} Rt+1 改成 R t + 1 + c R_{t+1} + c Rt+1+c,那么平均奖励也会变成 r ( π ) + c r(\pi) + c r(π)+c。 在原折扣值中,这会导致 v π γ ( s ) 新  = v π γ ( s ) 旧  + c 1 − γ , v_{\pi}^{\gamma}(s) \text{ 新 } = v_{\pi}^{\gamma}(s) \text{ 旧 } + \frac{c}{1-\gamma}, vπγ(s)  =vπγ(s)  +1γc, 数值规模显著增加; 但在中心化后,因为 ( R t + 1 + c − [ r ( π ) + c ] ) = ( R t + 1 − r ( π ) ) \bigl(R_{t+1}+c - [r(\pi)+c]\bigr) = (R_{t+1} - r(\pi)) (Rt+1+c[r(π)+c])=(Rt+1r(π)),相对奖励并没有发生任何变化,所以 v ~ π γ ( s ) \tilde{v}_{\pi}^{\gamma}(s) v~πγ(s) 保持不变。

小例子:如果你在一个游戏中原本定义奖励 { − 1 , 0 , + 1 } \{-1, 0, +1\} {1,0,+1},后来想让奖励更“正向”一点,于是把它们统一加 10 变成 { 9 , 10 , 11 } \{9, 10, 11\} {9,10,11}

  • 标准折扣值的世界里,你的值函数会被整体抬高 10 1 − γ \frac{10}{1-\gamma} 1γ10
  • 中心化折扣值的世界里,这种改动完全不会影响相对价值,也不会让训练过程出现剧烈数值波动。

5. 可随时间调整折扣因子

文中还指出,奖励中心化让我们可以更灵活地在学习过程中动态调整折扣因子 γ \gamma γ,而不会像标准方法那样引发大范围的数值抖动。

  • 标准折扣方法:如果在训练中突然把 γ \gamma γ 从 0.9 调到 0.99,所有值函数 v π γ ( s ) v_{\pi}^{\gamma}(s) vπγ(s) 都会猛然改变,因为 r ( π ) 1 − γ \frac{r(\pi)}{1-\gamma} 1γr(π) 的那一项放大了许多倍。
  • 中心化方法:则主要学习的是 v ~ π γ ( s ) \tilde{v}_{\pi}^{\gamma}(s) v~πγ(s)(相对价值),其对 γ \gamma γ 的变化敏感度小得多;即使 γ \gamma γ 变化,也不会产生“加上一个大常数”的冲击。

这种特性在一些自适应方法或层级强化学习中很有用——有时我们希望初期只关注短期奖励( γ \gamma γ 小),后期再更加重视长期回报( γ \gamma γ 大),使用中心化可以避免训练过程的剧烈震荡。


6. 如何估计平均奖励

要进行奖励中心化,我们需要一个平均奖励 r ( π ) r(\pi) r(π) 的估计。最简单的方法就是在采样过程中做一个移动平均在线估计

  1. 初始化 r ^ 0 = 0 \hat{r}_0 = 0 r^0=0

  2. 每次得到新奖励 R n + 1 R_{n+1} Rn+1 后,更新: r ^ n + 1 = r ^ n + α ( R n + 1 − r ^ n ) , \hat{r}_{n+1} = \hat{r}_n + \alpha\,(R_{n+1} - \hat{r}_n), r^n+1=r^n+α(Rn+1r^n), 其中 α \alpha α 为一个学习率(如 0.01)。

  3. r ^ n \hat{r}_n r^n 作为对 r ( π ) r(\pi) r(π) 的估计,将其从奖励中减去。

即使是这种最简单的移动平均,也能有效地追踪策略在不同阶段的平均奖励,进而完成中心化操作。


7. 小结与示例回顾

总结知识点:

  1. 中心化折扣值 v ~ π γ ( s ) = E [ ∑ t = 0 ∞ γ t ( R t + 1 − r ( π ) ) ] , \displaystyle \tilde{v}_{\pi}^{\gamma}(s) = \mathbb{E}\Bigl[\sum_{t=0}^\infty \gamma^t (R_{t+1}-r(\pi))\Bigr], v~πγ(s)=E[t=0γt(Rt+1r(π))], 关注“奖励相对于平均奖励”的折扣总和。

  2. 与原值函数的分解 v π γ ( s ) = r ( π ) 1 − γ + v ~ π γ ( s ) + e π γ ( s ) , \displaystyle v_{\pi}^{\gamma}(s) = \frac{r(\pi)}{1-\gamma} + \tilde{v}_{\pi}^{\gamma}(s) + e_{\pi}^{\gamma}(s), vπγ(s)=1γr(π)+v~πγ(s)+eπγ(s), 其中那一大项 r ( π ) 1 − γ \frac{r(\pi)}{1-\gamma} 1γr(π) 会在 γ → 1 \gamma\to1 γ1 时变得极大,而中心化部分 v ~ π γ ( s ) \tilde{v}_{\pi}^{\gamma}(s) v~πγ(s) 通常更小且稳定。

  3. 益处

    • (a) γ → 1 \gamma\to1 γ1 时不发散:避免数值过大;
    • (b) 奖励偏移鲁棒性:加减常数 c c c 不会改变中心化值;
    • (c) γ \gamma γ 可在学习过程中动态变化:中心化值对折扣因子的大幅改变不敏感。
  4. 估计平均奖励

    • 可在线地使用移动平均或更复杂的估计方法;
    • 即使简单方法也往往足够。

7.1 具体小示例

  • 环境:一个简单的单状态循环,每一步奖励 R t R_t Rt 平均为 5(可能有波动,如 4、5、6)。
  • 标准折扣值:如果 γ = 0.99 \gamma=0.99 γ=0.99,则 v π 0.99 ( s ) ≈ 5 1 − 0.99 = 500 , v_{\pi}^{0.99}(s) \approx \frac{5}{1-0.99} = 500, vπ0.99(s)10.995=500, 数值非常大。
  • 中心化折扣值:则是 v ~ π 0.99 ( s ) = E [ ∑ γ t ( R t + 1 − 5 ) ] . \tilde{v}_{\pi}^{0.99}(s) = \mathbb{E}\Bigl[\sum \gamma^t (R_{t+1}-5)\Bigr]. v~π0.99(s)=E[γt(Rt+15)]. 如果 R t + 1 R_{t+1} Rt+1 多在 4~6 之间波动,那么 v ~ π 0.99 ( s ) \tilde{v}_{\pi}^{0.99}(s) v~π0.99(s) 的值通常只在一个相对小的区间内(正负几分、十几分),远小于 500。

8. 结语

通过奖励中心化,我们可以将折扣值函数“拆分”为:

  1. 一个状态无关、但会随 γ \gamma γ 变得很大的常数部分( r ( π ) 1 − γ \tfrac{r(\pi)}{1-\gamma} 1γr(π));
  2. 一个只关注“相对奖励”的中心化折扣值(外加一个在 γ → 1 \gamma\to1 γ1时趋于 0 的误差项)。

这不仅从理论上解释了当 γ \gamma γ逼近1时值函数为何会数值膨胀,也为在实践中处理高折扣因子、动态调整 γ \gamma γ、以及应对奖励整体偏移等场景提供了简单而有效的解决思路。

相关文章:

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

Reward Centering(一) 文章概括摘要1 奖励中心化理论 文章概括 引用: article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arXiv preprint arXiv:2405.0…...

在springboot加vue项目中加入图形验证码

后端 首先先要创建一个CaptchaController的类,可以在下面的代码中看到 在getCaptcha的方法里面写好了生成随机的4位小写字母或数字的验证码,然后通过BufferedImage类变为图片,顺便加上了干扰线。之后把图片转为Base64编码方便传给前端 为了…...

【系列专栏】银行IT的云原生架构-存储架构-数据库部署 10

银行 IT 的云原生架构:存储架构(数据库部署) 一、引言 在银行 IT 云原生架构的构建中,存储架构作为关键支撑,其性能、可靠性和扩展性直接影响着银行各类业务系统的运行效率与数据安全。而数据库作为数据存储与管理的…...

OpenGL ES -> 投影变换矩阵完美解决绘制GLSurfaceView绘制图形拉伸问题

GLSurfaceView绘制图形拉伸问题 假如在XML文件中声明GLSurfaceView的宽高为 android:layout_width"match_parent"android:layout_height"match_parent GLSurfaceView绘制的图形在Open GL ES坐标系中,而Open GL ES坐标系会根据GLSurfaceView的宽高将…...

【Three.js】JS 3D library(一个月进化史)

#春节过完了,该继续投入学习了~ 作为一个平面开发者,想要增进更多的技能,掌握web3D开发# 前置知识与技能 1. JavaScript 基础 - 掌握ES6语法(类、模块、箭头函数、解构等) - 熟悉异步编程(Promise、…...

在 debian 12 上安装 mysqlclient 报错

报错如下 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting mysqlclientUsing cached https://pypi.tuna.tsinghua.edu.cn/packages/61/68/810093cb579daae426794bbd9d88aa830fae296e85172d18cb0f0e5dd4bc/mysqlclient-2.2.7.tar.gz (91 kB)Installi…...

wordpress主题插件开发中高频使用的38个函数

核心模板函数 get_header()/get_footer()/get_sidebar() – 加载模板部件 the_title()/the_content()/the_excerpt() – 显示文章标题、内容、摘要 the_post() – 循环中获取文章数据 bloginfo(‘url’) – 获取站点URL wp_head()/wp_footer() – 输出头部/尾部代码 wp_n…...

BMS项目-面试及答疑整理

1. SOC计算用的什么原理实现的? bms目前计算SOC使用的安时积分+开路电压首先得对电池有一个抽象得概念,把电池比作游泳池,电量比作游泳池里面的水,电流比作流入和流出得水流,那么充电也就是往游泳池里面灌入水流安时积分:对水流进行一个实时监测,比如1S一次监测,那么每…...

js第十二题

题十二:轮播图 要求: 1.鼠标不在图片上方时,进行自动轮播,并且左右箭头不会显示;当鼠标放在图片上方时,停止轮播,并且左右箭头会显示; 2.图片切换之后,图片中下方的小…...

LeetCode-76.最小覆盖子串

1、题目描述: 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须…...

CAS单点登录(第7版)20.用户界面

如有疑问,请看视频:CAS单点登录(第7版) 用户界面 概述 概述 对 CAS 用户界面 (UI) 进行品牌化涉及编辑 CSS 样式表以及一小部分相对简单的 HTML 包含文件,也称为视图。(可选&…...

【强化学习的数学原理】第08课-值函数近似-笔记

学习资料:bilibili 西湖大学赵世钰老师的【强化学习的数学原理】课程。链接:强化学习的数学原理 西湖大学 赵世钰 文章目录 一、例子:曲线拟合二、原理-目标函数介绍三、原理-优化算法和函数选择四、原理-示例与分析五、Sarsa和Q-learning六、…...

基于css实现正六边形的三种方案

方案一:通过旋转三个长方形生成正六边形 分析: 如下图所示,我们可以通过旋转三个长方形来得到一个正六边形。疑问: 1. 长方形的宽高分别是多少? 设正六边形的边长是100,基于一些数学常识,可以…...

React VS Vue

React 和 Vue 是目前最流行的两个前端框架,它们在设计理念、生态系统和开发体验上各有特点。以下是对 React 和 Vue 的全方位对比: 1. 核心设计理念 React 库而非框架:React 是一个用于构建 UI 的库,专注于视图层,其…...

CMake 编译工具

在使用 CMake 时,你可以通过指定工具链文件来设置编译器(如 GCC、G 或 Clang)。以下是具体步骤: 1. 创建工具链文件 首先,创建一个工具链文件(例如 toolchain.cmake),并在其中指定…...

el-tree选中数据重组成树

vueelement-ui 实现el-tree选择重新生成一个已选中的值组成新的数据树&#xff0c;效果如下 <template><div class"flex"><el-tree class"tree-row" :data"list" ref"tree" :props"{children: children, label: …...

IO、NIO解读和不同点,以及常用的文件流操作方法

java高级——IO、NIO解读和不同点&#xff0c;以及常用的文件流操作方法 前情提要文章介绍1. 什么是IO1.1 节点的分类1.2 传输方式 2. 七大传输方式解读2.1 File类解读2.1.1 创建文件的三种方式2.2.2 File的常用方法2.2.3 如何正确认识FileUtils 2.2 字节流&#xff08;核心&am…...

51单片机-按键

1、独立按键 1.1、按键介绍 轻触开关是一种电子开关&#xff0c;使用时&#xff0c;轻轻按开关按钮就可使开关接通&#xff0c;当松开手时&#xff0c;开关断开。 1.2、独立按键原理 按键在闭合和断开时&#xff0c;触点会存在抖动现象。P2\P3\P1都是准双向IO口&#xff0c;…...

Spring Boot Actuator 监控✨

Spring Boot Actuator 是 Spring Boot 提供的一个强大的监控和管理工具&#xff0c;它可以帮助你深入了解和监控你的应用程序的运行状态。通过 Actuator&#xff0c;你可以获取应用程序的健康状况、内存使用情况、线程信息、HTTP 请求跟踪等。&#x1f680; 核心知识点 &#…...

SpringBoot论坛网站 – 功能详解与部署教程

项目概述 《SpringBoot的论坛网站》是一个基于SpringBoot框架开发的现代化论坛平台&#xff0c;旨在为用户提供一个便捷的交流空间。该项目不仅功能丰富&#xff0c;还具备良好的扩展性和易用性&#xff0c;适合用于学习、分享和讨论各类话题。以下是项目的核心功能模块和部署…...

俄罗斯方块游戏完整代码示例

以下是一个基于Cocos Creator引擎开发的俄罗斯方块游戏的完整代码示例。该游戏实现了俄罗斯方块的基本功能&#xff0c;并且代码整合在单个文件中&#xff0c;无需任何外部依赖&#xff0c;可以直接在浏览器中运行。 1. 创建Cocos Creator项目 首先&#xff0c;确保你已经安装了…...

【设计模式】【结构型模式】组合模式(Composite)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…...

【设计模式】03-理解常见设计模式-行为型模式(专栏完结)

前言 前面我们介绍完创建型模式和创建型模式&#xff0c;这篇介绍最后的行为型模式&#xff0c;也是【设计模式】专栏的最后一篇。 一、概述 行为型模式主要用于处理对象之间的交互和职责分配&#xff0c;以实现更灵活的行为和更好的协作。 二、常见的行为型模式 1、观察者模…...

Qt 6.8版本 自制windows下运行软件<一>——串口调试助手

自制串口调试助手 哔哩哔哩效果展示 一、 说明 本人在读学生&#xff0c;跟随哔哩哔哩网站北京迅为公司的教学视频&#xff0c;进行学习qt&#xff0c;由于视频中的实现过程是利用ui界面的实现&#xff0c;本人在学习过程中&#xff0c;通过完全敲代码的形式&#xff0c;实现同…...

Qt——静态函数中发送信号方法总结(不需要通过类内部信号与槽实现,关键是清楚你发送的信号源自哪个对象)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》...

深入解析 vLLM:高性能 LLM 服务框架的架构之美(一)原理与解析

修改内容时间2.4.1处理请求的流程&#xff0c;引用更好的流程图2025.02.11首发2025.02.08 深入解析 vLLM&#xff1a;高性能 LLM 服务框架的架构之美&#xff08;一&#xff09;原理与解析 深入解析 vLLM&#xff1a;高性能 LLM 服务框架的架构之美&#xff08;二&#xff09;…...

关于视频去水印的一点尝试

一. 视频去水印的几种方法 1. 使用ffmpeg delogo滤镜 delogo 滤镜的原理是通过插值算法&#xff0c;用水印周围的像素填充水印的位置。 示例&#xff1a; ffmpeg -i input.mp4 -filter_complex "[0:v]delogox420:y920:w1070:h60" output.mp4 该命令表示通过滤镜…...

前端常见面试题-2025

vue4.0 Vue.js 4.0 是在 2021 年 9 月发布。Vue.js 4.0 是 Vue.js 的一个重要版本&#xff0c;引入了许多新特性和改进&#xff0c;旨在提升开发者的体验和性能。以下是一些关键的更新和新特性&#xff1a; Composition API 重构&#xff1a;Vue 3 引入了 Composition API 作为…...

JavaEE-SpringBoot快速入门

文章目录 本节目标Maven什么是Maven创建一个Maven项目maven项目功能maven的依赖管理全球仓库, 私服, 本地服务器, 配置国内镜像 第一个SpringBoot项目创建项目运行SpringBoot程序 SpringBoot原理初步Web服务器 总结 本节目标 了解什么是maven, 配置国内源使用Springboot创建项…...

盛铂科技 SMF106 低相位噪声贴片式频率综合器模块

在现代通信和电子设备领域&#xff0c;频率综合器作为关键组件&#xff0c;其性能优劣直接影响系统的整体表现。盛铂科技的 SMF106 低相位噪声贴片式频率综合器&#xff0c;以其卓越的性能和独特设计&#xff0c;成为众多高性能系统的选择。 一、频率覆盖范围广&#xff0c;步进…...

前端【技术方案】重构项目

1. 明确重构目标 优化性能 减少页面加载时间降低资源占用 提升代码可维护性 更规范的代码风格更清晰的代码结构更明确的模块设计 扩展功能 为项目添加新功能改进现有功能 2. 评估项目现状 审查代码 全面检查现有代码&#xff0c;找出代码中的问题&#xff0c;如代码冗余、耦合…...

第十六天 HarmonyOS WebView开发实战:从加载网页到与JavaScript交互

HarmonyOS WebView开发实战&#xff1a;从加载网页到与JavaScript交互 一、WebView基础与HarmonyOS特性解析 在移动应用开发中&#xff0c;WebView作为内嵌浏览器组件&#xff0c;在HarmonyOS&#xff08;鸿蒙系统&#xff09;中扮演着重要角色。它不仅能够加载本地和远程网页…...

Unity学习part2

为bilibili教程【【Unity教程】零基础带你从小白到超神】 https://www.bilibili.com/video/BV1gQ4y1e7SS/?p50&share_sourcecopy_web&vd_source6e7a3cbb802eb986578ad26fae1eeaab的笔记 1、灯光的使用 定向光模拟太阳&#xff0c;是平行光。旋转定向光&#xff0c;光…...

贪吃蛇游戏

贪吃蛇 一、html <div class"container" id"app"></div><script src"./js/index.js"></script>二、css * {margin: 0;top: 0;} .set {margin: 15px auto;width: 600px; } .container {width: 600px;height: 600px;bac…...

docker修改镜像默认存储路径(基于 WSL2 的迁移方法)

打开powershell窗口 任意地方shift右键 1、停止 WSL wsl --shutdown2、导出数据 wsl --export docker-desktop-data E:\docker\DockerDesktopdata\docker-desktop-data.tar wsl --export docker-desktop E:\docker\DockerDesktop\docker-desktop.tar3、取消注册 wsl --un…...

C#+SqlSugar实现主从库读写分离

在使用 **SqlSugar** 进行分库操作时&#xff0c;可以通过配置多个数据库连接&#xff0c;并根据业务逻辑动态切换数据库。以下是一个完整的分库示例&#xff0c;展示如何实现分库功能。 --- ### **1. 安装 NuGet 包** 安装 SqlSugarCore&#xff1a; bash dotnet add packag…...

从无序到有序:上北智信通过深度数据分析改善会议室资源配置

当前企业普遍面临会议室资源管理难题&#xff0c;预约机制不完善和临时会议多导致资源调度不合理&#xff0c;既有空置又有过度拥挤现象。 针对上述问题&#xff0c;上北智信采用了专业数据分析手段&#xff0c;巧妙融合楼层平面图、环形图、折线图和柱形图等多种可视化工具&a…...

以太网详解(八)传输层协议:TCP/UDP 协议

文章目录 传输层协议概述为什么需要传输层&#xff1f;传输层功能网络层与传输层在实现 “端到端” 传输的异同两类服务:面向连接/无连接服务 传输控制协议 TCPTCP 协议数据单元格式TCP 的重传机制快重传和快恢复快重传举例快恢复算法 用户数据报协议 UDPUDP 概述UDP 基本工作过…...

CentOS 8 配置bond

CentOS 8 网络配置的详细步骤和对应的配置文件内容。 1. 配置聚合网卡(Bonding) 配置intranet聚合网卡 在/etc/sysconfig/network-scripts/目录下创建ifcfg-intranet文件,内容如下: TYPE=Bond NAME=intranet DEVICE=intranet ONBOOT=yes BOOTPROTO=none IPADDR=10.2.1.22…...

C语言基础16:二维数组、字符数组

二维数组 定义 二维数组本质上是一个行列式的组合&#xff0c;也就是说二维数组由行和列两部分组成。属于多维数组&#xff0c;二维数组数据是通过行列进行解读。 二维数组可被视为一个特殊的一维数组&#xff0c;相当于二维数组又是一个一维数组&#xff0c;只不过它的元素…...

Java 同步锁性能的最佳实践:从理论到实践的完整指南

目录 一、同步锁性能分析 &#xff08;一&#xff09;性能验证说明 1. 使用同步锁的代码示例 2. 不使用同步锁的代码示例 3. 结果与讨论 &#xff08;二&#xff09;案例初步优化分析说明 1. 使用AtomicInteger原子类尝试优化分析 2. 对AtomicInteger原子类进一步优化 …...

思科、华为、H3C常用命令对照表

取消/关闭 思科no华为undo华三undo 查看 思科show华为display华三display 退出 思科exit华为quit华三quit 设备命名 思科hostname华为sysname华三sysname 进入全局模式 思科enable、config terminal华为system-view华三system-view 删除文件 思科delete华为delete华…...

[qt5学习笔记]Application Example示例程序源码解析

开发环境问题 vs2022下直接打开ui、ts文件失败 解决办法如下图&#xff0c; 设置designer独立运行。估计是嵌入运行存在些许bug。 同理&#xff0c;ts编辑工具linguist也存在这个问题。 qrc rc的编辑嵌入编辑都正常&#xff0c;但分离式更稳定可靠。 qt creator编译失败 原…...

华为交换机堆叠技术简介配置

目录 一、华为堆叠技术简介&#xff08;一&#xff09;提高可靠性&#xff08;二&#xff09;扩展端口数量&#xff08;三&#xff09;增大带宽&#xff08;四&#xff09;简化组网&#xff08;五&#xff09;长距离堆叠 二、华为交换机堆叠技术的案例及命令配置&#xff08;一…...

腿足机器人之四- 卡尔曼滤波

腿足机器人之四卡尔曼滤波 概率学基础贝叶斯准则熵 卡尔曼滤波扩展卡尔曼滤波信息滤波器 在机器人&#xff08;四足、人形&#xff09;领域&#xff0c;感知和行动的不确定性可能由多种因素引起&#xff0c;如传感器噪声、外部环境的变化、非精确控制以及实时性算力限制等。 和…...

nginx 部署前端vue项目

&#x1f468;‍⚕ 主页&#xff1a; gis分享者 &#x1f468;‍⚕ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕ 收录于专栏&#xff1a;前端工程师 文章目录 一、&#x1f353;什么是nginx&#xff1f;二、&#x1f353;nginx 部署…...

【第1章:深度学习概览——1.6 深度学习框架简介与选择建议】

嘿,各位老铁们,今天咱们来一场深度学习框架的深度探索之旅。在这个充满无限可能的深度学习时代,深度学习框架就像是连接理论与实践的桥梁,帮助我们从算法设计走向实际应用。随着技术的飞速发展,深度学习框架的选择变得越来越多样化,每一种框架都有其独特的优势和适用场景…...

NLLB 与 ChatGPT 双向优化:探索翻译模型与语言模型在小语种应用的融合策略

作者&#xff1a;来自 vivo 互联网算法团队- Huang Minghui 本文探讨了 NLLB 翻译模型与 ChatGPT 在小语种应用中的双向优化策略。首先介绍了 NLLB-200 的背景、数据、分词器和模型&#xff0c;以及其与 LLM&#xff08;Large Language Model&#xff09;的异同和协同关系。接着…...

C#的委托delegate与事件event

在C#中&#xff0c;delegate&#xff08;委托&#xff09;和 event&#xff08;事件&#xff09;是两个非常重要的概念&#xff0c;它们主要用于实现回调机制和事件驱动编程。下面详细介绍它们的原理和使用场景。 1. Delegate&#xff08;委托&#xff09; 1.1 委托的原理 委托…...

Spring Boot 集成MyBatis-Plus

文章目录 一、背景说明二、集成过程 2.1 引入 maven 依赖2.2 增加属性配置2.3 自动配置类 三、验证集成 3.1 控制器3.2 服务类3.3 Mapper接口类3.4 实体类3.4 不要忘记XML文件3.5 发起请求 四、技巧拓展 4.1 如何打印sql语句&#xff1f;4.2 如何对参数增加非空验证&#xff1f…...