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

news2025/2/27 0:54:59

Reward Centering(四)

  • 文章概括
  • 摘要
  • 附录
    • A 伪代码

文章概括

引用:

@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
代码、数据和视频:


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


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


摘要

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


附录

A 伪代码

在本节中,我们将介绍在 Q-learning 的表格、线性和非线性变体中添加基于值的奖励中心的伪代码。

在这里插入图片描述

这段伪代码实现了一个“表格型(Tabular)Q-learning”算法,区别在于它使用了基于值的奖励中心化(value-based reward centering)。也就是说:

  1. 它仍然是Q-learning:用一个Q表来存储每个状态-动作对 ( s , a ) (s,a) (s,a) 的价值估计 Q ( s , a ) Q(s,a) Q(s,a)
  2. 奖励中心化:在计算时序差分(TD)误差时,使用 ( R − R ˉ ) (R - \bar{R}) (RRˉ) 代替原始奖励 R R R,并且同时更新一个平均奖励估计 R ˉ \bar{R} Rˉ

这么做的原因在于:如果奖励有一个大常数偏移,或者折扣因子 γ \gamma γ 很接近 1,那么原始 Q-learning 会出现数值范围很大的问题;通过减去一个平均奖励 R ˉ \bar{R} Rˉ,可以让学习更稳定、更快速。


行0:输入与算法参数

Input: The behavior policy b (e.g. ε-greedy)
Algorithm parameters: discount factor γ, step-size parameters α, η
  • 行为策略 b b b:这是智能体在训练中实际用来选动作的策略。例如,最常见的是 ϵ \epsilon ϵ-greedy——以概率 1 − ϵ 1-\epsilon 1ϵ 选当前Q值最高的动作,以概率 ϵ \epsilon ϵ 随机选动作。
  • 折扣因子 γ \gamma γ:决定未来奖励的重要性, γ ∈ [ 0 , 1 ) \gamma \in [0,1) γ[0,1)。数值越接近1,越重视长期回报;越小则越关注近期。
  • 步长参数 α , η \alpha, \eta α,η α \alpha α 多用于网络参数更新(学习率), η \eta η 用于调节平均奖励 R ˉ \bar{R} Rˉ 的更新幅度。

行1:初始化

Initialize Q(s, a) ∀s, R̄ arbitrarily (e.g., to zero)
  • 我们为所有状态-动作对 ( s , a ) (s,a) (s,a) 初始化一个Q表,记为 Q ( s , a ) Q(s,a) Q(s,a)。在表格型设置下,这通常是一个二维数组,也可以用字典等结构实现。
  • 初始化平均奖励 R ˉ \bar{R} Rˉ 为0或任意值。

行2:获得初始状态

Obtain initial S
  • 与环境交互时,智能体先观察到一个起始状态 S S S。在仿真或某些任务中,这可能是随机选的或由环境指定。

行3, 4:主循环

for all time steps do
    Take action A according to b, observe R, S'
  • 在每个时间步 t t t
    1. 根据行为策略 b b b 从状态 S S S 选动作 A A A
    2. 环境返回即时奖励 R R R 并转移到新状态 S ′ S' S
  • 这是标准 Q-learning 过程:智能体在环境中执行动作并收集数据。

行5:计算时序差分误差 δ δ δ

	δ = R -+ γ max_a Q(S', a) - Q(S, A)

这是本算法的核心

  1. R − R ˉ R - \bar{R} RRˉ:把原始奖励 R R R 减去当前的平均奖励估计 R ˉ \bar{R} Rˉ,得到“中心化奖励”。
  2. γ max ⁡ a Q ( S ′ , a ) \gamma \max_{a} Q(S', a) γmaxaQ(S,a):与标准Q-learning一样,估计下一状态 S ′ S' S 的最大Q值作为未来回报。
  3. − Q ( S , A ) - Q(S,A) Q(S,A):我们要看“(中心化奖励 + 折扣后的最大下一步价值)与当前Q值估计”的差距,这就是TD误差 δ \delta δ

在标准Q-learning里, δ = R + γ max ⁡ a Q ( S ′ , a ) − Q ( S , A ) \delta = R + \gamma \max_{a} Q(S',a) - Q(S,A) δ=R+γmaxaQ(S,a)Q(S,A)。这里则变成 R − R ˉ R - \bar{R} RRˉ,多了个 − R ˉ -\bar{R} Rˉ 的中心化操作。

行6:更新Q表

	Q(S, A) = Q(S, A) + α δ
  • 这是最基本的Q-learning更新:用TD误差 δ \delta δ 调整当前Q值,步长由 α \alpha α 决定。
  • 由于 δ \delta δ 包含了 ( R − R ˉ ) (R - \bar{R}) (RRˉ),我们实际上是学习一个“相对于平均奖励”的Q值。

行7:更新平均奖励

=+ η α δ
  • 这是与标准Q-learning不同之处:我们同时更新平均奖励 R ˉ \bar{R} Rˉ,使其也跟随TD误差进行调整。
  • 其中 η \eta η 是一个系数(伪代码里写的可能是“ η η η”,也可能用其他符号),用来控制更新速度;有时可与 α \alpha α 合并成一个“effective step-size”。
  • 直观理解:如果 δ \delta δ 是正的,说明“实际的中心化奖励 + 未来回报”比我们预期的要好,于是我们适度提高 R ˉ \bar{R} Rˉ;若 δ \delta δ 为负,则降低 R ˉ \bar{R} Rˉ
  • 这样, R ˉ \bar{R} Rˉ 会逐渐收敛到一个与目标策略相关的平均奖励(若行为策略足够探索、步长合适等条件满足)。

行8:转移到新状态

	S = S'
  • 这一行将当前状态更新为下一个状态,为下个时间步的循环做准备。

行9:循环结束

end
  • 该算法持续进行,直到满足某个停止条件(如到达最大步数或收敛)。

简单数值例子

假设我们有一个小小的任务:

  • 状态空间只有2个状态: S 1 S_1 S1, S 2 S_2 S2;动作空间只有2个动作: A 1 A_1 A1, A 2 A_2 A2
  • 假设某个回合中:
    • 当前状态 S = S 1 S = S_1 S=S1,动作 A = A 1 A = A_1 A=A1,获得即时奖励 R = 10 R = 10 R=10,下一状态 S ′ = S 2 S' = S_2 S=S2
    • 当前估计的平均奖励 R ˉ = 8 \bar{R} = 8 Rˉ=8
    • γ = 0.9 \gamma = 0.9 γ=0.9,且我们查表发现 max ⁡ a Q ( S 2 , a ) = 20 \max_a Q(S_2, a) = 20 maxaQ(S2,a)=20,而当前 Q ( S 1 , A 1 ) = 15 Q(S_1, A_1) = 15 Q(S1,A1)=15
    • 学习率 α = 0.1 \alpha = 0.1 α=0.1 η = 0.5 \eta = 0.5 η=0.5(示例取值)。

第5行:计算TD误差
δ = ( R − R ˉ ) + γ max ⁡ a Q ( S 2 , a ) − Q ( S 1 , A 1 ) = ( 10 − 8 ) + 0.9 × 20 − 15 = 2 + 18 − 15 = 5. \delta = (R - \bar{R}) + \gamma \max_a Q(S_2,a) - Q(S_1,A_1) = (10 - 8) + 0.9 \times 20 - 15 = 2 + 18 - 15 = 5. δ=(RRˉ)+γamaxQ(S2,a)Q(S1,A1)=(108)+0.9×2015=2+1815=5.

第6行:更新Q表
Q ( S 1 , A 1 ) ← 15 + 0.1 × 5 = 15.5. Q(S_1, A_1) \leftarrow 15 + 0.1 \times 5 = 15.5. Q(S1,A1)15+0.1×5=15.5.

第7行:更新平均奖励
R ˉ ← 8 + 0.5 × 0.1 × 5 = 8 + 0.25 = 8.25. \bar{R} \leftarrow 8 + 0.5 \times 0.1 \times 5 = 8 + 0.25 = 8.25. Rˉ8+0.5×0.1×5=8+0.25=8.25.

解释

  • 因为 δ = 5 \delta = 5 δ=5 为正数,表示实际获得的“中心化奖励 + 折扣未来回报”比我们先前估计的还要好,于是我们适度提高 Q ( S 1 , A 1 ) Q(S_1, A_1) Q(S1,A1) 并且也提高了平均奖励估计 R ˉ \bar{R} Rˉ(从8增加到8.25)。
  • 这样,如果下次再拿到类似奖励,中心化奖励 R − R ˉ R - \bar{R} RRˉ 就会变小(10 - 8.25 = 1.75),防止Q值无限增大。



在这里插入图片描述

本算法是一个“线性Q-learning”的版本,与传统Q-learning相比,主要有两个特点:

  1. 线性函数逼近

    • 采用线性模型来近似 Q 值函数,即对每个动作 a a a 都维护一个参数向量 w a ∈ R d \mathbf{w}_a \in \mathbb{R}^d waRd,并将状态(或观测)转换为一个特征向量 x ∈ R d \mathbf{x} \in \mathbb{R}^d xRd
    • 动作值估计为 q ^ ( x , a ) = w a ⊤ x \hat{q}(\mathbf{x}, a) = \mathbf{w}_a^\top \mathbf{x} q^(x,a)=wax
  2. 基于值的奖励中心化(value-based reward centering)

    • 在计算时序差分(TD)误差时,使用 ( R − R ˉ ) \bigl(R - \bar{R}\bigr) (RRˉ) 代替原始奖励 R R R,其中 R ˉ \bar{R} Rˉ 是一个在线估计的平均奖励。
    • 同时,利用同一个 TD 误差更新平均奖励 R ˉ \bar{R} Rˉ 本身。

通过这种“奖励中心化”,我们可以去除奖励中可能存在的常数偏移,在高折扣因子或大常数奖励的情况下让学习更稳定、更有效。

行0:输入与算法参数

Input: The behavior policy b (e.g., ε-greedy)
Algorithm parameters: discount factor γ, step-size parameters α, η
  • 行为策略 b b b:在训练过程中用于实际选动作的策略,例如 ϵ \epsilon ϵ-greedy。
  • 折扣因子 γ \gamma γ:权衡当前奖励和未来奖励的重要程度, γ ∈ [ 0 , 1 ) \gamma \in [0,1) γ[0,1)
  • 步长参数 α \alpha α η \eta η α \alpha α 多用于网络参数更新(学习率), η \eta η 用于调节平均奖励 R ˉ \bar{R} Rˉ 的更新幅度。

行1:初始化

Initialize wₐ ∈ ℝ^d ∀a, R̄ arbitrarily (e.g., to zero)
  • 每个动作 a a a,都初始化一个权重向量 w a ∈ R d \mathbf{w}_a \in \mathbb{R}^d waRd。通常初始化为0向量或小随机值。
  • 初始化平均奖励 R ˉ \bar{R} Rˉ 为0或任意值。

行2:获得初始观测

Obtain initial observation x
  • 在与环境交互前,我们先得到一个初始状态或观测,并将其转换为一个特征向量 x \mathbf{x} x
  • 例如,在某个连续空间里,你可能会用 tile-coding 或其他方式把原始状态映射成 x \mathbf{x} x

行3, 4:主循环

for all time steps do
    Take action A according to b, observe R, x'
  • 每个时间步 t t t
    1. 根据行为策略 b b b(如 ϵ \epsilon ϵ-greedy)从特征 x \mathbf{x} x 选择一个动作 A A A
    2. 环境返回即时奖励 R R R 并转移到新观测 x ′ \mathbf{x}' x

行5:计算TD误差 δ δ δ

	δ = R -+ γ max(wₐ)ᵀ x' - (wA)ᵀ x

这是本算法最关键的一步:

  1. R − R ˉ R - \bar{R} RRˉ:将原始奖励减去平均奖励,得到“中心化奖励”。
  2. γ max ⁡ a w a ⊤ x ′ \gamma \max_{a} \mathbf{w}_a^\top \mathbf{x}' γmaxawax:估计下一状态的最大Q值(线性模型下为各动作权重向量与 x ′ \mathbf{x}' x 的内积)。
  3. − w A ⊤ x - \mathbf{w}_A^\top \mathbf{x} wAx:从当前Q值中减去上一步对所选动作 A A A 的Q值估计。
  4. 整体上, δ \delta δ 表示 “中心化即时奖励 + 折扣未来回报” 与 “当前Q值估计” 之间的差距 (即TD误差)。

行6:更新动作权重向量

	wA = wA + α δ x
  • 对于所选动作 A A A,我们用 TD 误差 δ \delta δ 调整其权重向量:
    w A ← w A + α   δ   x . \mathbf{w}_A \leftarrow \mathbf{w}_A + \alpha \,\delta \,\mathbf{x}. wAwA+αδx.
  • 线性模型下, ∇ w A ( w A ⊤ x ) = x \nabla_{\mathbf{w}_A} \bigl(\mathbf{w}_A^\top \mathbf{x}\bigr) = \mathbf{x} wA(wAx)=x,所以这是标准的梯度升/降更新形式。

行7:更新平均奖励

=+ η α δ
  • 同样地,我们也用同一个 TD 误差 δ \delta δ 来更新平均奖励 R ˉ \bar{R} Rˉ
  • η α \eta\alpha ηα 可以视作平均奖励更新的有效步长;若 η = 1 \eta=1 η=1,则直接用 α δ \alpha\delta αδ;若 η \eta η 不同于1,就能灵活调节更新幅度。

行8:更新当前特征

	x = x'
  • 将下一状态特征 x ′ \mathbf{x}' x 变为当前特征 x \mathbf{x} x,进入下一步循环。

行9:循环结束

end
  • 算法在有限时间或直到收敛为止进行多次迭代。

知识点回顾

  1. 线性Q-learning

    • 不再用一个表格存储 Q ( s , a ) Q(s,a) Q(s,a),而是对每个动作维护一个权重向量 w a \mathbf{w}_a wa,用线性函数 w a ⊤ x \mathbf{w}_a^\top \mathbf{x} wax 逼近动作值。
    • 在高维或连续状态下,这是常用的方法。
  2. 奖励中心化

    • 在TD误差中使用 ( R − R ˉ ) (R - \bar{R}) (RRˉ) 代替 R R R,减少由于奖励有常数偏移或 γ \gamma γ 较大导致的数值膨胀问题。
    • 通过更新 R ˉ \bar{R} Rˉ,使其自适应地追踪策略的平均奖励水平。
  3. TD误差 δ \delta δ

    • 反映了当前估计与目标之间的差距。
    • 这里的“目标”是中心化即时奖励 + 折扣未来最优价值;
    • δ \delta δ 越大(正),说明“实际情况比估计好”;越大(负),说明“比估计差”。
  4. 步长参数

    • α \alpha α 控制Q值(权重向量)更新速度;
    • η α \eta\alpha ηα 控制平均奖励更新速度。
    • 这些步长通常要满足一定条件(如 Robbins–Monro)才能保证收敛。

简单数值例子

下面我们给出一个简单的数值例子,展示如何在单步中计算并更新各量。

  • 假设特征向量维度 d = 3 d=3 d=3
  • 当前状态特征 x = [ 1 , 0 , 2 ] ⊤ \mathbf{x} = [1, 0, 2]^\top x=[1,0,2]
  • 下一状态特征 x ′ = [ 0 , 1 , 1 ] ⊤ \mathbf{x}' = [0, 1, 1]^\top x=[0,1,1]
  • 行为策略 ϵ \epsilon ϵ-greedy 从 x \mathbf{x} x 中选取动作 A A A,此处动作空间有2个动作: a 1 a_1 a1 a 2 a_2 a2

权重向量与平均奖励初始化

  • w a 1 = [ 0.5 , 0.2 , − 0.1 ] ⊤ \mathbf{w}_{a_1} = [0.5, 0.2, -0.1]^\top wa1=[0.5,0.2,0.1] w a 2 = [ 0.3 , 0.4 , 0.1 ] ⊤ \mathbf{w}_{a_2} = [0.3, 0.4, 0.1]^\top wa2=[0.3,0.4,0.1]
  • R ˉ = 2.0 \bar{R} = 2.0 Rˉ=2.0(任意初始化)。
  • 折扣因子 γ = 0.9 \gamma = 0.9 γ=0.9
  • 学习率 α = 0.1 \alpha = 0.1 α=0.1,平均奖励更新因子 η = 0.5 \eta=0.5 η=0.5(示例值)。

执行动作并获得奖励

  • 设定当前动作为 A = a 1 A = a_1 A=a1
  • 环境返回即时奖励 R = 5 R = 5 R=5,下一状态特征 x ′ = [ 0 , 1 , 1 ] ⊤ \mathbf{x}' = [0, 1, 1]^\top x=[0,1,1]

计算TD误差 δ

  1. 计算中心化奖励: R − R ˉ = 5 − 2.0 = 3 R - \bar{R} = 5 - 2.0 = 3 RRˉ=52.0=3
  2. 计算下一状态每个动作的Q值:
    w a 1 ⊤ x ′ = [ 0.5 , 0.2 , − 0.1 ] ⋅ [ 0 , 1 , 1 ] = 0.2 + ( − 0.1 ) = 0.1 , \mathbf{w}_{a_1}^\top \mathbf{x}' = [0.5, 0.2, -0.1] \cdot [0, 1, 1] = 0.2 + (-0.1) = 0.1, wa1x=[0.5,0.2,0.1][0,1,1]=0.2+(0.1)=0.1, w a 2 ⊤ x ′ = [ 0.3 , 0.4 , 0.1 ] ⋅ [ 0 , 1 , 1 ] = 0.4 + 0.1 = 0.5. \mathbf{w}_{a_2}^\top \mathbf{x}' = [0.3, 0.4, 0.1] \cdot [0, 1, 1] = 0.4 + 0.1 = 0.5. wa2x=[0.3,0.4,0.1][0,1,1]=0.4+0.1=0.5.
    因此, max ⁡ a w a ⊤ x ′ = 0.5 \max_{a} \mathbf{w}_a^\top \mathbf{x}' = 0.5 maxawax=0.5
  3. 计算当前Q值:
    w A ⊤ x = w a 1 ⊤ x = [ 0.5 , 0.2 , − 0.1 ] ⋅ [ 1 , 0 , 2 ] = 0.5 + ( − 0.2 ) = 0.3. \mathbf{w}_{A}^\top \mathbf{x} = \mathbf{w}_{a_1}^\top \mathbf{x} = [0.5, 0.2, -0.1] \cdot [1, 0, 2] = 0.5 + (-0.2) = 0.3. wAx=wa1x=[0.5,0.2,0.1][1,0,2]=0.5+(0.2)=0.3.
  4. 整理得到:
    δ = ( 5 − 2.0 ) + 0.9 × 0.5 − 0.3 = 3 + 0.45 − 0.3 = 3.15. \delta = (5 - 2.0) + 0.9 \times 0.5 - 0.3 = 3 + 0.45 - 0.3 = 3.15. δ=(52.0)+0.9×0.50.3=3+0.450.3=3.15.

更新动作权重向量

w a 1 ← w a 1 + α   δ   x = [ 0.5 , 0.2 , − 0.1 ] ⊤ + 0.1 × 3.15 × [ 1 , 0 , 2 ] ⊤ . \mathbf{w}_{a_1} \leftarrow \mathbf{w}_{a_1} + \alpha\,\delta\,\mathbf{x} = [0.5, 0.2, -0.1]^\top + 0.1 \times 3.15 \times [1, 0, 2]^\top. wa1wa1+αδx=[0.5,0.2,0.1]+0.1×3.15×[1,0,2].

  • 先计算增量: 0.1 × 3.15 = 0.315 0.1 \times 3.15 = 0.315 0.1×3.15=0.315
  • x = [ 1 , 0 , 2 ] \mathbf{x}=[1,0,2] x=[1,0,2] 的增量为 [ 0.315 , 0 , 0.63 ] [0.315, 0, 0.63] [0.315,0,0.63]
  • 更新后:
    w a 1 = [ 0.5 + 0.315 ,    0.2 + 0 ,    − 0.1 + 0.63 ] = [ 0.815 ,    0.2 ,    0.53 ] . \mathbf{w}_{a_1} = [0.5 + 0.315, \; 0.2 + 0, \; -0.1 + 0.63] = [0.815, \; 0.2, \; 0.53]. wa1=[0.5+0.315,0.2+0,0.1+0.63]=[0.815,0.2,0.53].

更新平均奖励

R ˉ ← R ˉ + η α δ = 2.0 + 0.5 × 0.1 × 3.15 = 2.0 + 0.1575 = 2.1575. \bar{R} \leftarrow \bar{R} + \eta \alpha \delta = 2.0 + 0.5 \times 0.1 \times 3.15 = 2.0 + 0.1575 = 2.1575. RˉRˉ+ηαδ=2.0+0.5×0.1×3.15=2.0+0.1575=2.1575.

更新当前特征

x ← x ′ = [ 0 , 1 , 1 ] ⊤ . \mathbf{x} \leftarrow \mathbf{x}' = [0,1,1]^\top. xx=[0,1,1].

解释

  • 通过上面这一步更新,我们提高了动作 a 1 a_1 a1 的权重,因为 δ \delta δ 为正数,表示“实际比我们估计的好”。
  • 同时,也提高了平均奖励 R ˉ \bar{R} Rˉ(从2.0到2.1575),让之后的中心化奖励 R − R ˉ R - \bar{R} RRˉ 会相应变小(即不至于无限累加)。



在这里插入图片描述

本算法是一个“深度Q网络(DQN)”版本,但与传统DQN相比,它使用了基于值的奖励中心化(value-based reward centering)。也就是说:

  1. 非线性函数逼近(DQN)

    • 我们用一个神经网络来逼近 Q 值函数:给定状态(或观测) x \mathbf{x} x,以及动作 a a a,输出 q ^ ( x , a ) \hat{q}(\mathbf{x}, a) q^(x,a)
    • 训练时,我们会用“经验回放(replay buffer)”批量采样过往数据,并通过梯度下降更新网络参数。
  2. 奖励中心化

    • 在计算TD误差时,将即时奖励 R R R 替换为 ( R − R ˉ ) (R - \bar{R}) (RRˉ),其中 R ˉ \bar{R} Rˉ 是一个在线估计的平均奖励。
    • 同时,用同一个TD误差来更新 R ˉ \bar{R} Rˉ
    • 这样可减轻高折扣因子或大常数奖励带来的数值膨胀,令学习更稳定。

行0:输入与算法参数

Input: The behavior policy b (e.g., ε-greedy)
Algorithm parameters: discount factor γ, step-size parameters α, η
  • 行为策略 b b b:训练过程中智能体实际用来选动作的策略,如 ϵ \epsilon ϵ-greedy。
  • 折扣因子 γ \gamma γ:衡量未来奖励的重要性, γ ∈ [ 0 , 1 ) \gamma \in [0,1) γ[0,1)
  • 步长参数 α , η \alpha, \eta α,η α \alpha α 多用于网络参数更新(学习率), η \eta η 用于调节平均奖励 R ˉ \bar{R} Rˉ 的更新幅度。

行1:初始化

Initialize value network, target network; initialize R̄ arbitrarily (e.g., to zero)
  • 初始化价值网络参数:例如,一个神经网络 θ \theta θ 用来逼近 Q 值 q ^ ( x , a ; θ ) \hat{q}(\mathbf{x}, a; \theta) q^(x,a;θ)
  • 初始化平均奖励 R ˉ \bar{R} Rˉ 为 0 或其他任意值。

行2:获得初始观测 x \mathbf{x} x

Obtain initial observation x
  • 在与环境交互前,我们先得到初始状态(或观测)并将其表示为向量 x \mathbf{x} x

行3–5:与环境交互 & 存储体验

for all time steps do
    Take action A according to b, observe R, x'
    Store tuple (x, A, R, x') in the experience buffer
  • 与环境交互:在时间步 t t t,根据行为策略 b b b(如 ϵ \epsilon ϵ-greedy)选择动作 A A A,环境返回即时奖励 R R R 并转移到新观测 x ′ \mathbf{x}' x
  • 存储体验:将四元组 ( x , A , R , x ′ ) (\mathbf{x}, A, R, \mathbf{x}') (x,A,R,x) 存入“experience buffer”(经验回放池),以便后续批量采样训练。

行6–11:用采样的迷你批更新估计

	if time to update estimates then
	    Sample a minibatch of transitions (x, A, R, x')^b
	    For every i-th transition: δᵢ = Rᵢ -+ γ maxₐ q̂(xᵢ', a) -(xᵢ, Aᵢ)
	    Perform a semi-gradient update of the value-network parameters with the δ² loss
	    R̄ =+ η α mean(δ)
	    Update the target network occasionally

这是DQN训练的核心部分,与传统DQN相比多了“减去 R ˉ \bar{R} Rˉ”以及更新 R ˉ \bar{R} Rˉ

  1. 采样迷你批

    • 从 replay buffer 中随机采样一批(batch)过往转移 { ( x i , A i , R i , x i ′ ) } \{(\mathbf{x}_i, A_i, R_i, \mathbf{x}_i')\} {(xi,Ai,Ri,xi)}
    • 这使得训练更稳定且可重复利用经验。
  2. 计算 TD 误差

    • 对每条转移计算
      δ i = ( R i − R ˉ ) + γ max ⁡ a q ^ ( x i ′ , a ) − q ^ ( x i , A i ) . \delta_i = \bigl(R_i - \bar{R}\bigr) + \gamma \max_a \hat{q}(\mathbf{x}_i', a) - \hat{q}(\mathbf{x}_i, A_i). δi=(RiRˉ)+γamaxq^(xi,a)q^(xi,Ai).
    • 与标准DQN不同之处在于,奖励部分变成了 ( R i − R ˉ ) (R_i - \bar{R}) (RiRˉ) 而非 R i R_i Ri;这样就是奖励中心化
  3. 半梯度(semi-gradient)更新

    • 在DQN中,我们通常用均方误差(MSE)来训练网络参数 θ \theta θ
    • 当TD目标是 ( R i − R ˉ ) + γ max ⁡ a q ^ ( x i ′ , a ) \bigl(R_i - \bar{R}\bigr) + \gamma \max_a \hat{q}(\mathbf{x}_i', a) (RiRˉ)+γmaxaq^(xi,a),网络输出为 q ^ ( x i , A i ; θ ) \hat{q}(\mathbf{x}_i, A_i; \theta) q^(xi,Ai;θ)
      其损失可以写作
      L ( θ ) = 1 2 ∑ i [ δ i ( θ ) ] 2 , L(\theta) = \frac{1}{2}\sum_i \bigl[\delta_i(\theta)\bigr]^2, L(θ)=21i[δi(θ)]2,
      其中 δ i ( θ ) \delta_i(\theta) δi(θ) 会随 θ \theta θ 改变。我们通过反向传播对 θ \theta θ 做梯度下降。
  4. 更新平均奖励
    R ˉ ← R ˉ + η   α   mean ( δ ) , \bar{R} \leftarrow \bar{R} + \eta \,\alpha \,\text{mean}(\delta), RˉRˉ+ηαmean(δ),

    • 这里 mean ( δ ) \text{mean}(\delta) mean(δ) 表示对 minibatch 中所有 δ i \delta_i δi 取平均。
    • 如果 δ \delta δ 平均值为正,说明当前整体回报超出估计;若为负,则说明不足。
  5. 更新目标网络

    • 在 DQN 中,通常还会使用一个“目标网络(target network)”来稳定训练:定期或软更新其参数为 θ \theta θ,然后在 max ⁡ a q ( x ′ , a ) \max_a q(\mathbf{x}', a) maxaq(x,a) 时用该目标网络的值来计算。

行12–14:收尾与下一步

	end
	x = x'
end
  • 这里表明:在完成更新后,将当前观测 x \mathbf{x} x 设置为下一状态 x ′ \mathbf{x}' x,然后进入下一个时间步。

关键知识点

  1. DQN

    • 用神经网络逼近 Q 值,采用体验回放和目标网络来减少数据相关性和训练不稳定。
  2. 奖励中心化

    • 在 TD 误差中使用 ( R − R ˉ ) (R - \bar{R}) (RRˉ) 代替原始 R R R
    • 同时更新 R ˉ \bar{R} Rˉ,让它逐渐逼近策略的平均奖励。
    • 这样可以缓解高折扣因子下 Q 值变得很大的问题,并提高训练稳定性。
  3. 半梯度更新

    • 我们把 δ i 2 \delta_i^2 δi2 作为损失,对网络参数 θ \theta θ 求梯度并更新。
    • 称为“半梯度”或“近似梯度”,因为 δ i \delta_i δi 中包含了 max ⁡ a q ^ ( x ′ , a ) \max_a \hat{q}(\mathbf{x}', a) maxaq^(x,a),本身对 θ \theta θ 也有依赖,但在实际 DQN 中我们常用一个固定目标网络来近似,或者只对 q ^ ( x , A ) \hat{q}(\mathbf{x},A) q^(x,A) 的部分做梯度。
  4. m e a n ( δ ) mean(\delta) mean(δ)

    • 在一个 batch 中,每条样本都会产生一个 δ i \delta_i δi。我们对它们求平均,用于更新 R ˉ \bar{R} Rˉ
    • 如果整体 δ \delta δ 为正,表示当前估计偏保守;如果整体 δ \delta δ 为负,则表示估计偏乐观。

数值示例

1. 背景与思路

非线性 DQN中,我们用一个神经网络来近似 Q 值函数:
Q θ ( x , a ) = NN ( x ; θ ) [ a ] , Q_\theta(\mathbf{x}, a) = \text{NN}(\mathbf{x}; \theta)[a], Qθ(x,a)=NN(x;θ)[a],
其中:

  • x \mathbf{x} x 是状态(或观测)的输入;
  • θ \theta θ 表示网络所有的可训练参数(如权重矩阵、偏置等);
  • NN ( x ; θ ) \text{NN}(\mathbf{x}; \theta) NN(x;θ) 输出一个向量,每个分量对应一个动作的 Q 值。

在“value-based reward centering”里,我们在计算 TD 目标时使用 ( R − R ˉ ) (R - \bar{R}) (RRˉ) 代替原始奖励 R R R,并且利用同一个时序差分(TD)误差更新平均奖励 R ˉ \bar{R} Rˉ。下文会展示更完整的过程。

2. 一个小型神经网络示例

为了具体化,我们假设一个非常小的神经网络:

  1. 输入层:维度 = 2(状态/观测是 x ∈ R 2 \mathbf{x}\in \mathbb{R}^2 xR2)。
  2. 隐藏层:维度 = 2,带 ReLU 激活。
  3. 输出层:维度 = 2(表示有 2 个动作,输出对应 q ^ ( x , a 1 ) \hat{q}(\mathbf{x}, a_1) q^(x,a1) q ^ ( x , a 2 ) \hat{q}(\mathbf{x}, a_2) q^(x,a2))。

用符号表示:

  • 隐藏层
    h = max ⁡ { 0 ,    W 1 x + b 1 } , \mathbf{h} = \max\{0,\; W_1 \mathbf{x} + \mathbf{b}_1\}, h=max{0,W1x+b1},
    其中 W 1 W_1 W1 2 × 2 2\times 2 2×2 矩阵, b 1 \mathbf{b}_1 b1 是 2 维偏置, max ⁡ { 0 , ⋅ } \max\{0,\cdot\} max{0,} 表示 ReLU 逐元素操作。
  • 输出层
    q θ ( x ) = W 2 h + b 2 , \mathbf{q}_\theta(\mathbf{x}) = W_2 \mathbf{h} + \mathbf{b}_2, qθ(x)=W2h+b2,
    这是一个 2 维向量,分别对应动作 a 1 a_1 a1 a 2 a_2 a2 的 Q 值。

这样, θ \theta θ 包含 { W 1 , b 1 , W 2 , b 2 } \{W_1, \mathbf{b}_1, W_2, \mathbf{b}_2\} {W1,b1,W2,b2}。在实际DQN里可能更大更多层,但这里只演示一个非常小的网络方便手算。

3. 初始化与数据设定

我们随便给定一些初始参数(数字都很小、只作示例):

W 1 = ( 0.5 − 0.2 0.1 0.3 ) , b 1 = ( 0.0 0.1 ) , W_1 = \begin{pmatrix} 0.5 & -0.2 \\ 0.1 & 0.3 \end{pmatrix}, \quad \mathbf{b}_1 = \begin{pmatrix} 0.0 \\ 0.1 \end{pmatrix}, W1=(0.50.10.20.3),b1=(0.00.1),

W 2 = ( 0.4 0.2 − 0.1 0.3 ) , b 2 = ( 0.0 0.0 ) . W_2 = \begin{pmatrix} 0.4 & 0.2 \\ -0.1 & 0.3 \end{pmatrix}, \quad \mathbf{b}_2 = \begin{pmatrix} 0.0 \\ 0.0 \end{pmatrix}. W2=(0.40.10.20.3),b2=(0.00.0).

另外,设:

  • 当前平均奖励 R ˉ = 5 \bar{R} = 5 Rˉ=5(示例);
  • 折扣因子 γ = 0.9 \gamma=0.9 γ=0.9
  • 学习率 α = 0.01 \alpha=0.01 α=0.01(针对网络参数);
  • 平均奖励更新因子 η = 1 \eta=1 η=1(只为简化,实际可不一样)。

一条训练样本

假设我们只看一条样本(batch size=1):

  • 当前状态 x = [ 0.5 , − 1.2 ] ⊤ \mathbf{x}=[0.5, -1.2]^\top x=[0.5,1.2]
  • 动作 A = a 1 A=a_1 A=a1
  • 即时奖励 R = 7 R=7 R=7
  • 下一状态 x ′ = [ 1.0 , 0.3 ] ⊤ \mathbf{x}'=[1.0, 0.3]^\top x=[1.0,0.3]
  • 环境中还有另一个动作 a 2 a_2 a2,我们需要它来做 max ⁡ a Q ( x ′ , a ) \max_a Q(\mathbf{x}',a) maxaQ(x,a)

我们先做一次前向传播,计算出:

  1. 当前状态 x \mathbf{x} x下,对动作 a 1 a_1 a1 a 2 a_2 a2 的 Q 值;
  2. 下一状态 x ′ \mathbf{x}' x下,对动作 a 1 a_1 a1 a 2 a_2 a2 的 Q 值。

4. 前向传播(Forward Pass)

4.1 计算 q ^ θ ( x ) \hat{q}_\theta(\mathbf{x}) q^θ(x)

(1) 隐藏层激活 h \mathbf{h} h

z 1 = W 1 x + b 1 = ( 0.5 − 0.2 0.1 0.3 ) ( 0.5 − 1.2 ) + ( 0.0 0.1 ) . \mathbf{z}_1 = W_1 \mathbf{x} + \mathbf{b}_1 = \begin{pmatrix} 0.5 & -0.2 \\ 0.1 & 0.3 \end{pmatrix} \begin{pmatrix} 0.5 \\ -1.2 \end{pmatrix} + \begin{pmatrix} 0.0 \\ 0.1 \end{pmatrix}. z1=W1x+b1=(0.50.10.20.3)(0.51.2)+(0.00.1).

先做矩阵乘法:

  • 第一行: 0.5 ∗ 0.5 + ( − 0.2 ) ∗ ( − 1.2 ) = 0.25 + 0.24 = 0.49 0.5*0.5 + (-0.2)*(-1.2) = 0.25 + 0.24 = 0.49 0.50.5+(0.2)(1.2)=0.25+0.24=0.49
  • 第二行: 0.1 ∗ 0.5 + 0.3 ∗ ( − 1.2 ) = 0.05 − 0.36 = − 0.31 0.1*0.5 + 0.3*(-1.2) = 0.05 - 0.36 = -0.31 0.10.5+0.3(1.2)=0.050.36=0.31

然后加偏置 b 1 \mathbf{b}_1 b1:

  • 第一维: 0.49 + 0.0 = 0.49 0.49 + 0.0 = 0.49 0.49+0.0=0.49
  • 第二维: − 0.31 + 0.1 = − 0.21 -0.31 + 0.1 = -0.21 0.31+0.1=0.21

因此
z 1 = ( 0.49 − 0.21 ) . \mathbf{z}_1 = \begin{pmatrix} 0.49 \\ -0.21 \end{pmatrix}. z1=(0.490.21).
再做 ReLU: h = max ⁡ { 0 , z 1 } \mathbf{h} = \max\{0, \mathbf{z}_1\} h=max{0,z1}:

  • 第一维: max ⁡ { 0 , 0.49 } = 0.49 \max\{0,0.49\} = 0.49 max{0,0.49}=0.49
  • 第二维: max ⁡ { 0 , − 0.21 } = 0 \max\{0,-0.21\} = 0 max{0,0.21}=0(因为 -0.21 < 0)。

所以
h = ( 0.49 0 ) . \mathbf{h} = \begin{pmatrix} 0.49 \\ 0 \end{pmatrix}. h=(0.490).

(2) 输出层 q θ ( x ) \mathbf{q}_\theta(\mathbf{x}) qθ(x)

q θ ( x ) = W 2 h + b 2 = ( 0.4 0.2 − 0.1 0.3 ) ( 0.49 0 ) + ( 0.0 0.0 ) . \mathbf{q}_\theta(\mathbf{x}) = W_2 \mathbf{h} + \mathbf{b}_2 = \begin{pmatrix} 0.4 & 0.2 \\ -0.1 & 0.3 \end{pmatrix} \begin{pmatrix} 0.49 \\ 0 \end{pmatrix} + \begin{pmatrix} 0.0 \\ 0.0 \end{pmatrix}. qθ(x)=W2h+b2=(0.40.10.20.3)(0.490)+(0.00.0).
矩阵乘法:

  • 对输出第1维(动作 a 1 a_1 a1): 0.4 ∗ 0.49 + 0.2 ∗ 0 = 0.196 0.4*0.49 + 0.2*0 = 0.196 0.40.49+0.20=0.196
  • 对输出第2维(动作 a 2 a_2 a2): − 0.1 ∗ 0.49 + 0.3 ∗ 0 = − 0.049 -0.1*0.49 + 0.3*0 = -0.049 0.10.49+0.30=0.049

所以
q θ ( x ) = ( 0.196 − 0.049 ) . \mathbf{q}_\theta(\mathbf{x}) = \begin{pmatrix} 0.196 \\ -0.049 \end{pmatrix}. qθ(x)=(0.1960.049).
表示:

  • q ^ θ ( x , a 1 ) = 0.196 \hat{q}_\theta(\mathbf{x}, a_1)=0.196 q^θ(x,a1)=0.196
  • q ^ θ ( x , a 2 ) = − 0.049 \hat{q}_\theta(\mathbf{x}, a_2)=-0.049 q^θ(x,a2)=0.049

4.2 计算 q ^ θ ( x ′ ) \hat{q}_\theta(\mathbf{x}') q^θ(x)

同理,对下一状态 x ′ = [ 1.0 , 0.3 ] \mathbf{x}'=[1.0, 0.3] x=[1.0,0.3]:

  1. 隐藏层
    z 1 ′ = W 1 x ′ + b 1 = ( 0.5 − 0.2 0.1 0.3 ) ( 1.0 0.3 ) + ( 0.0 0.1 ) . \mathbf{z}_1' = W_1 \mathbf{x}' + \mathbf{b}_1 = \begin{pmatrix} 0.5 & -0.2 \\ 0.1 & 0.3 \end{pmatrix} \begin{pmatrix} 1.0 \\ 0.3 \end{pmatrix} + \begin{pmatrix} 0.0 \\ 0.1 \end{pmatrix}. z1=W1x+b1=(0.50.10.20.3)(1.00.3)+(0.00.1).

    • 第一行: 0.5 ∗ 1.0 + ( − 0.2 ) ∗ 0.3 = 0.5 − 0.06 = 0.44 0.5*1.0 + (-0.2)*0.3 = 0.5 - 0.06 = 0.44 0.51.0+(0.2)0.3=0.50.06=0.44
    • 第二行: 0.1 ∗ 1.0 + 0.3 ∗ 0.3 = 0.1 + 0.09 = 0.19 0.1*1.0 + 0.3*0.3 = 0.1 + 0.09=0.19 0.11.0+0.30.3=0.1+0.09=0.19
      加偏置 b 1 \mathbf{b}_1 b1:
    • 第一维: 0.44 + 0 = 0.44 0.44 + 0=0.44 0.44+0=0.44
    • 第二维: 0.19 + 0.1 = 0.29 0.19 + 0.1=0.29 0.19+0.1=0.29
      z 1 ′ = ( 0.44 0.29 ) . \mathbf{z}_1' = \begin{pmatrix} 0.44 \\ 0.29 \end{pmatrix}. z1=(0.440.29).
      ReLU:
      h ′ = ( max ⁡ { 0 , 0.44 } max ⁡ { 0 , 0.29 } ) = ( 0.44 0.29 ) . \mathbf{h}' = \begin{pmatrix} \max\{0,0.44\} \\ \max\{0,0.29\} \end{pmatrix} = \begin{pmatrix} 0.44 \\ 0.29 \end{pmatrix}. h=(max{0,0.44}max{0,0.29})=(0.440.29).
  2. 输出层
    q θ ( x ′ ) = W 2 h ′ + b 2 = ( 0.4 0.2 − 0.1 0.3 ) ( 0.44 0.29 ) + ( 0 0 ) . \mathbf{q}_\theta(\mathbf{x}') = W_2 \mathbf{h}' + \mathbf{b}_2 = \begin{pmatrix} 0.4 & 0.2 \\ -0.1 & 0.3 \end{pmatrix} \begin{pmatrix} 0.44 \\ 0.29 \end{pmatrix} + \begin{pmatrix} 0 \\ 0 \end{pmatrix}. qθ(x)=W2h+b2=(0.40.10.20.3)(0.440.29)+(00).

    • 对动作 a 1 a_1 a1: 0.4 ∗ 0.44 + 0.2 ∗ 0.29 = 0.176 + 0.058 = 0.234 0.4*0.44 + 0.2*0.29=0.176 + 0.058=0.234 0.40.44+0.20.29=0.176+0.058=0.234
    • 对动作 a 2 a_2 a2: − 0.1 ∗ 0.44 + 0.3 ∗ 0.29 = − 0.044 + 0.087 = 0.043 -0.1*0.44 + 0.3*0.29=-0.044 + 0.087=0.043 0.10.44+0.30.29=0.044+0.087=0.043
      q θ ( x ′ ) = ( 0.234 0.043 ) . \mathbf{q}_\theta(\mathbf{x}') = \begin{pmatrix} 0.234 \\ 0.043 \end{pmatrix}. qθ(x)=(0.2340.043).
    • q ^ θ ( x ′ , a 1 ) = 0.234 \hat{q}_\theta(\mathbf{x}', a_1)=0.234 q^θ(x,a1)=0.234
    • q ^ θ ( x ′ , a 2 ) = 0.043 \hat{q}_\theta(\mathbf{x}', a_2)=0.043 q^θ(x,a2)=0.043

5. 计算 TD 误差 δ \delta δ

在“value-based reward centering”中,TD 目标 = ( R − R ˉ ) + γ max ⁡ a q ^ θ ( x ′ , a ) (R - \bar{R}) + \gamma \max_{a} \hat{q}_\theta(\mathbf{x}', a) (RRˉ)+γmaxaq^θ(x,a)

  1. 中心化奖励 R − R ˉ = 7 − 5 = 2 R - \bar{R} = 7 - 5=2 RRˉ=75=2
  2. 下一状态最大 Q max ⁡ { 0.234 , 0.043 } = 0.234 \max\{0.234, 0.043\}=0.234 max{0.234,0.043}=0.234
  3. 当前 Q q ^ θ ( x , A = a 1 ) = 0.196 \hat{q}_\theta(\mathbf{x}, A=a_1)=0.196 q^θ(x,A=a1)=0.196
  4. 折扣因子 γ = 0.9 \gamma=0.9 γ=0.9

于是
δ = 7 − 5 + 0.9 × 0.234 − 0.196 = 2 + 0.2106 − 0.196 = 2.0146. \delta = 7 - 5 + 0.9 \times 0.234 - 0.196 = 2 + 0.2106 - 0.196 = 2.0146. δ=75+0.9×0.2340.196=2+0.21060.196=2.0146.

这是我们这条样本的时序差分误差。

6. 损失函数与梯度下降

我们用均方误差(MSE)来训练网络参数 θ \theta θ。对这条样本来说,损失可以写作:
L ( θ ) = 1 2 [ δ ( θ ) ] 2 , L(\theta) = \frac12 \bigl[\delta(\theta)\bigr]^2, L(θ)=21[δ(θ)]2,
其中 δ ( θ ) \delta(\theta) δ(θ) 是上面算出来的 TD 误差,会随 θ \theta θ 改变。为了简化,我们此处把 δ \delta δ 视为“只依赖当前 θ \theta θ”的值(实际 DQN 常用“目标网络”或“停止梯度”技巧来使 δ \delta δ 的一部分不随 θ \theta θ 变)。在示例中,我们就把 δ = 2.0146 \delta=2.0146 δ=2.0146当作固定,便于演示梯度下降主流程。

6.1 反向传播(Backprop)

要更新 θ \theta θ,我们要对 L ( θ ) = 1 2 δ 2 L(\theta)=\tfrac12 \delta^2 L(θ)=21δ2 做梯度下降:

∇ θ L ( θ ) = δ   ∇ θ δ . \nabla_\theta L(\theta) = \delta \,\nabla_\theta \delta. θL(θ)=δθδ.

δ ≈ q ^ θ ( x ′ , ⋅ ) \delta\approx \hat{q}_\theta(\mathbf{x}',\cdot) δq^θ(x,) 等项都和 θ \theta θ 有关。如果在纯DQN实现里,我们通常冻结下一状态的 max ⁡ q ^ θ ( x ′ , a ) \max \hat{q}_\theta(\mathbf{x}',a) maxq^θ(x,a)(用目标网络 θ − \theta^- θ)或做停止梯度,所以 δ \delta δ只有 q ^ θ ( x , A ) \hat{q}_\theta(\mathbf{x},A) q^θ(x,A)”那一部分对 θ \theta θ 求导。这样:
∇ θ δ ≈ −   ∇ θ q ^ θ ( x , A ) , \nabla_\theta \delta \approx -\,\nabla_\theta \hat{q}_\theta(\mathbf{x}, A), θδθq^θ(x,A),
因为 δ = (常数) − q ^ θ ( x , A ) \delta = \text{(常数)} - \hat{q}_\theta(\mathbf{x}, A) δ=(常数)q^θ(x,A) 在这种实现里“下一状态部分”不回传梯度。

为简单,我们就这么做:只对当前 Q 值 q ^ θ ( x , A ) \hat{q}_\theta(\mathbf{x}, A) q^θ(x,A) 求导。

小结

  • ∇ θ L ( θ ) ≈ δ × [ −   ∇ θ q ^ θ ( x , A ) ] \nabla_\theta L(\theta) \approx \delta \times \bigl[-\,\nabla_\theta \hat{q}_\theta(\mathbf{x}, A)\bigr] θL(θ)δ×[θq^θ(x,A)].

6.2 梯度下降更新

更新公式:
θ ← θ − α   ∇ θ L ( θ ) . \theta \leftarrow \theta - \alpha \,\nabla_\theta L(\theta). θθαθL(θ).
带入上面近似:
θ ← θ − α   δ   [ − ∇ θ q ^ θ ( x , A ) ] = θ + α   δ   ∇ θ q ^ θ ( x , A ) . \theta \leftarrow \theta - \alpha\,\delta \,\bigl[-\nabla_\theta \hat{q}_\theta(\mathbf{x}, A)\bigr] = \theta + \alpha\,\delta \,\nabla_\theta \hat{q}_\theta(\mathbf{x}, A). θθαδ[θq^θ(x,A)]=θ+αδθq^θ(x,A).

由于 α = 0.01 \alpha=0.01 α=0.01 δ = 2.0146 \delta=2.0146 δ=2.0146,剩下就是计算 ∇ θ q ^ θ ( x , A = a 1 ) \nabla_\theta \hat{q}_\theta(\mathbf{x}, A=a_1) θq^θ(x,A=a1)。这涉及到对 W 1 , b 1 , W 2 , b 2 W_1, b_1, W_2, b_2 W1,b1,W2,b2 做反向传播。下面我们只展示核心思路,不手算全部梯度细节——现实中由深度学习框架(如 PyTorch、TensorFlow)自动完成。

大体流程:

  1. 输出层 q ^ θ ( x , a 1 ) = z o u t , 1 \hat{q}_\theta(\mathbf{x}, a_1)=z_{out,1} q^θ(x,a1)=zout,1,梯度 ∂ z o u t , 1 / ∂ W 2 \partial z_{out,1}/\partial W_2 zout,1/W2 ∂ z o u t , 1 / ∂ b 2 \partial z_{out,1}/\partial b_2 zout,1/b2 依赖于隐藏层 h \mathbf{h} h
  2. 隐藏层:再把梯度传回去,计算 ∂ z o u t , 1 / ∂ W 1 \partial z_{out,1}/\partial W_1 zout,1/W1 等,因为 h \mathbf{h} h = ReLU( z 1 \mathbf{z}_1 z1),其中 z 1 = W 1 x + b 1 \mathbf{z}_1=W_1\mathbf{x}+b_1 z1=W1x+b1
  3. 最后:更新每个参数,形如
    W 2 ← W 2 + α   δ   ∂ q ^ θ ( x , a 1 ) ∂ W 2 , … W_2 \leftarrow W_2 + \alpha\,\delta \,\frac{\partial \hat{q}_\theta(\mathbf{x}, a_1)}{\partial W_2}, \quad\ldots W2W2+αδW2q^θ(x,a1),

在实际代码中,这都是自动微分搞定。我们这里只要明白:每个参数都会被往“让 q ^ θ ( x , a 1 ) \hat{q}_\theta(\mathbf{x}, a_1) q^θ(x,a1) 更接近 TD 目标”的方向调整。

7. 更新平均奖励 R ˉ \bar{R} Rˉ

按照“value-based reward centering”伪代码,还要更新 R ˉ \bar{R} Rˉ
R ˉ ← R ˉ + η α   δ _ m e a n \bar{R} \leftarrow \bar{R} + \eta\alpha\,\delta\_mean RˉRˉ+ηαδ_mean

  • 这里 δ _ m e a n \delta\_mean δ_mean 是对一个 batch 的平均。我们示例 batch size=1,所以 δ _ m e a n = δ = 2.0146 \delta\_mean=\delta=2.0146 δ_mean=δ=2.0146
  • α = 0.01 \alpha=0.01 α=0.01, η = 1 \eta=1 η=1,则
    R ˉ ← 5 + 0.01 × 2.0146 = 5 + 0.020146 ≈ 5.020146. \bar{R} \leftarrow 5 + 0.01\times 2.0146 = 5 + 0.020146 \approx 5.020146. Rˉ5+0.01×2.0146=5+0.0201465.020146.
  • 表示由于本次样本的 TD 误差为正,说明我们的“中心化奖励”在估计上偏低,于是稍微提高 R ˉ \bar{R} Rˉ(从5到5.020146)。

8. 结果与意义

  1. 神经网络参数 θ \theta θ 的意义

    • θ \theta θ 包含了所有层的权重和偏置。它决定了给定状态 x \mathbf{x} x 时,各动作的 Q 值输出。
    • 当我们执行梯度下降时,其实是在“微调”这些参数,以减少 δ 2 \delta^2 δ2(TD 误差的平方),让 Q 值逼近我们想要的目标。
  2. 为什么梯度下降?

    • 因为我们的损失函数 L ( θ ) = 1 2 δ 2 L(\theta)=\tfrac12\delta^2 L(θ)=21δ2 θ \theta θ 求导可得更新方向;更新后,网络输出的 q ^ θ ( x , a ) \hat{q}_\theta(\mathbf{x}, a) q^θ(x,a) 就会更接近“中心化奖励 + 折扣未来价值”。
  3. 数值更新后

    • θ \theta θ 中的所有参数( W 1 , b 1 , W 2 , b 2 W_1, b_1, W_2, b_2 W1,b1,W2,b2) 会小幅度调整;
    • R ˉ \bar{R} Rˉ 也小幅度提高。
    • 在多步迭代后, R ˉ \bar{R} Rˉ 收敛到策略的平均奖励水平,网络学习到一个Q值函数,不会出现因奖励有大常数偏移而导致的 Q 值无限膨胀。
  4. 非线性 vs. 线性

    • 跟线性Q-learning不同的是,这里 q ^ θ ( x , a ) \hat{q}_\theta(\mathbf{x}, a) q^θ(x,a) 是神经网络输出的一个非线性函数;我们需要用反向传播(backprop)来计算梯度。
    • 在例子中,我们手动演示了如何做前向传播得到 Q 值,反向传播的梯度更新就由深度学习库自动计算了。

9. 小结

  • θ \theta θ 是神经网络的所有可学习参数(权重、偏置等)。它把状态 x \mathbf{x} x 映射到各动作的Q值输出。
  • 梯度下降:我们对 1 2 δ 2 \tfrac12 \delta^2 21δ2 做最小化,通过反向传播更新 θ \theta θ。其中 δ = ( R − R ˉ ) + γ max ⁡ a Q θ ( x ′ , a ) − Q θ ( x , A ) \delta = (R - \bar{R}) + \gamma \max_a Q_\theta(\mathbf{x}',a) - Q_\theta(\mathbf{x},A) δ=(RRˉ)+γmaxaQθ(x,a)Qθ(x,A)
  • 示例
    • 前向传播:计算隐藏层 h \mathbf{h} h 和输出层 q θ ( x ) \mathbf{q}_\theta(\mathbf{x}) qθ(x),得出 q ^ θ ( x , a 1 ) \hat{q}_\theta(\mathbf{x}, a_1) q^θ(x,a1) 等值。
    • 计算 δ ≈ 2.0146 \delta\approx2.0146 δ2.0146 并做梯度更新:让 q ^ θ ( x , a 1 ) \hat{q}_\theta(\mathbf{x}, a_1) q^θ(x,a1) 朝目标 ( R − R ˉ ) + γ max ⁡ a q ^ θ ( x ′ , a ) (R-\bar{R}) + \gamma \max_a \hat{q}_\theta(\mathbf{x}',a) (RRˉ)+γmaxaq^θ(x,a) 靠近。
    • 同时更新平均奖励 R ˉ ← R ˉ + η α   δ _ m e a n \bar{R}\leftarrow \bar{R} + \eta\alpha\,\delta\_mean RˉRˉ+ηαδ_mean
  • 意义
    • 通过“奖励中心化”,我们去掉了奖励中的大偏移,使 Q 值学习更稳定;
    • 通过神经网络参数 θ \theta θ 的梯度下降,我们逐步逼近真正的Q值函数;
    • 每次更新都在自动微分框架下完成,无需手动算所有梯度。

希望这个更细致的示例能帮你理解:

  1. θ \theta θ 就是神经网络所有可学习参数;
  2. 梯度下降如何基于 δ \delta δ 进行一次更新(反向传播);
  3. 奖励中心化对 TD 目标的影响,以及** R ˉ \bar{R} Rˉ** 的更新方式。

效果

  • 本次更新后:
    • 动作 a 1 a_1 a1 在状态 m a t h b f x mathbf{x} mathbfx 下的估计值会稍微增大(因为 δ \delta δ 为正);
    • 平均奖励 R ˉ \bar{R} Rˉ 也稍微增大。
  • 在多步迭代后, R ˉ \bar{R} Rˉ 将逐渐收敛到一个与策略性能相关的平均奖励水平,Q值在数值上会更集中于“相对奖励”的范围,不会因为大常数奖励或 γ \gamma γ 高而无限膨胀。

我们建议对附录C中的通用伪代码进行两个小但有用的优化

Python代码可在以下地址获取: https://github.com/abhisheknaik96/continuing-rl-exps。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2306623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python量化金融实战】-第1章:Python量化金融概述:1.1量化金融的定义与发展历程

本小节学习建议&#xff1a;掌握Python编程、统计学&#xff08;时间序列分析&#xff09;、金融学基础&#xff08;资产定价理论&#xff09;三者结合&#xff0c;是进入量化领域的核心路径。 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章目录 1.1 量化金…

C#快速调用DeepSeek接口,winform接入DeepSeek查询资料 C#零门槛接入DeepSeek C#接入DeepSeek源代码下载

下载地址<------完整源码 在数字化转型加速的背景下&#xff0c;企业应用系统对智能服务的需求日益增长。DeepSeek作为先进的人工智能服务平台&#xff0c;其自然语言处理、图像识别等核心能力可显著提升业务系统的智能化水平。传统开发模式下&#xff0c;C#开发者需要耗费大…

Para-Lane: 首个真实世界多车道数据集,目的评估自动驾驶系统中的新型视角合成能力。

2025-02-22&#xff0c;阿里巴巴集团菜鸟自动驾驶实验室和百度研究院共同创建了一个名为 Para-Lane 的真实世界多车道数据集。该数据集目的评估自动驾驶系统中的新型视角合成&#xff08;NVS&#xff09;能力&#xff0c;通过提供大量真实世界的数据&#xff0c;弥补了现有合成…

[算法--前缀和] 一维前缀和

目录 1. 前缀和: 是一种对暴力求解的优化.2. 前缀和? 如何利用前面的计算结果提高效率?3. 如何预处理前缀和数组(如何让处理前缀和数组的复杂度是O(N))?接下来, 我们开启一个新的专题 -> 前缀和, 第一道是模板题, 一维前缀和 1. 前缀和: 是一种对暴力求解的优化. 前缀和…

《零基础学会!如何用 sql+Python 绘制柱状图和折线图,数据可视化一看就懂》

在数据驱动的时代&#xff0c;MySQL 是最常用的关系型数据库管理系统之一&#xff0c;广泛应用于各类数据存储和处理场景。数据分析的过程不仅仅是收集数据&#xff0c;还包括数据的清洗、转换、查询以及最终的报告和可视化。在本文中&#xff0c;我们将通过实际案例来介绍如何…

【算法系列】归并排序详解

文章目录 归并排序详解1. 基本原理1.1 分治法策略1.2 归并排序步骤1.3 图解示例 2. 时间复杂度与空间复杂度2.1 时间复杂度2.2 空间复杂度 3. 稳定性4. Java 实现示例5. 归并排序的优点与缺点5.1 优点5.2 缺点 6. 总结 归并排序详解 归并排序&#xff08;Merge Sort&#xff0…

Vue的项目创建以及项目目录与组合式API

一.创建Vue 1.Vue-CLI:创建Vue的脚手架工具 2.Create-vue&#xff1a;是Vue官方提供的脚手架之一,底层采用官方自主研发的vite,快捷&#xff0c;开发方便。 3.准备工作:系统中需要安装nodejs环境&#xff0c;在该环境中提供npm包管理器 4.创建Vue项目的命令:npm init vuela…

【学习笔记】计算机网络(四)

第4章 网络层 文章目录 第4章 网络层4.1 网络层的几个重要概念4.1.1 网络层提供的两种服务虚电路服务&#xff08;Virtual Circuit Service&#xff09;数据报服务&#xff08;Datagram Service&#xff09; 4.1.2 网络层的两个层面 4.2 网际协议 IP - IPv44.2.1 虚拟互连网络4…

DeepSeek-R1:通过强化学习激励大语言模型的推理能力

摘要 本文介绍了我们的第一代推理模型&#xff0c;DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是通过大规 模强化学习&#xff08;RL&#xff09;训练的模型&#xff0c;在没有使用监督微调&#xff08;SFT&#xff09;这个前置步骤的情况下&#xff0c;展示了卓越的推…

洛谷 P8705:[蓝桥杯 2020 省 B1] 填空题之“试题 E :矩阵” ← 卡特兰数

【题目来源】 https://www.luogu.com.cn/problem/P8705 【题目描述】 把 1∼2020 放在 21010 的矩阵里。要求同一行中右边的比左边大&#xff0c;同一列中下边的比上边的大。一共有多少种方案? 答案很大&#xff0c;你只需要给出方案数除以 2020 的余数即可。 【答案提交】 …

【无标题】网络安全公钥密码体制

第一节 网络安全 概述 一、基本概念 网络安全通信所需要的基本属性“ 机密性&#xff1b;消息完整性&#xff1b;可访问性与可用性&#xff1b;身份认证。 二、网络安全威胁 窃听&#xff1b;插入&#xff1b;假冒&#xff1b;劫持&#xff1b;拒绝服务Dos和分布式拒绝服务…

【含开题报告+文档+PPT+源码】基于SpringBoot的进销存管理系统的设计与实现

开题报告 本文提出并研发了一款基于Spring Boot框架构建的进销存管理系统&#xff0c;该系统集成了全方位的企业运营管理功能&#xff0c;涵盖了用户登录验证、系统公告管理、员工信息与权限管理、物料全流程&#xff08;采购入库、销售出库、退货处理&#xff09;控制、部门组…

Linux-SaltStack配置

文章目录 SaltStack配置 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Linux专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年02月24日20点51分 SaltStack配置 SaltStack 中既支持SSH协议也支持我们的一个客户端 #获取公钥&#xff08;…

事务的4个特性和4个隔离级别

事务的4个特性和4个隔离级别 1. 什么是事务2. 事务的ACID特性2.1 原子性2.2 一致性2.3 持久性2.4 隔离性 3. 事务的创建4. 事务并发时出现的问题4.1 DIRTY READ 脏读4.2 NON - REPEATABLR READ 不可重复读4.3 PHANTOM READ 幻读 5. 事务的隔离级别5.1 READ UNCOMMITTED 读未提交…

对计算机中缓存的理解和使用Redis作为缓存

使用Redis作为缓存缓存例子缓存的引入 Redis缓存的实现 使用Redis作为缓存 缓存 ​什么是缓存&#xff0c;第一次接触这个东西是在考研学习408的时候&#xff0c;计算机组成原理里面学习到Cache缓存&#xff0c;用于降低由于内存和CPU的速度的差异带来的延迟。它是在CPU和内存…

SOME/IP-SD -- 协议英文原文讲解5

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.5 S…

lowagie(itext)老版本手绘PDF,包含页码、水印、图片、复选框、复杂行列合并等。

入口类&#xff1a;exportPdf ​ package xcsy.qms.webapi.service;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.ibm.icu.text.RuleBasedNumberFormat; import com.lowa…

达梦有没有类似oerr的功能

在oracle 23ai的sqlplus中&#xff0c;直接看异常信息说明&#xff1a; 达梦没有此功能&#xff0c;但是可以造一个 cd /home/dmdba cat >err.sql<<eof set echo off set ver off set timing off set lineshow off set feedback off select * from V\$ERR_INFO wher…

实战-网安

面试感受:网安公司前端实习 今天我有幸面试了一家网络安全公司的前端开发实习岗位,整个过程让我受益匪浅,也让我对未来的职业发展有了更清晰的认识。 首先,面试官非常专业且友好,整个面试氛围轻松但不失严谨。面试一开始,面试官简单介绍了公司背景和团队文化,让我对公…

MybatisPlus-扩展功能-枚举处理器

在Mybatis里有一个叫TypeHandler的类型处理器&#xff0c;我们常见的PO当中的这些成员变量的数据类型&#xff0c;它都有对应的处理器&#xff0c;因此它就能自动实现这些Java数据类型与数据库类型的相互转换。 它里面还有一个叫EnumOrdinalTypeHandler的枚举处理器&#xff0…