Axi's Blog

Back

RL 学习笔记(11):Actor-Critic 方法Blur image

本内容暂时为 PPT 转述,后续会进行修编

第 13 讲:Actor-Critic 方法#

一、Actor-Critic 方法介绍 (Introduction to Actor-Critic Methods)#

  • 目标 (Page 2):回顾策略梯度方法,其目标是直接优化参数化的策略 πθ\pi_{\theta},而无需学习价值函数(如纯策略梯度 REINFORCE)。但纯粹基于蒙特卡洛回报的策略梯度估计(如 REINFORCE)存在高方差问题。
  • 核心思想 (Page 3-4):Actor-Critic 方法通过引入一个评论家 (Critic) 来学习价值函数,以指导演员 (Actor)(策略)的学习,从而降低策略梯度的方差,并允许在线、单步更新。
    • 演员 (Actor):负责选择动作。它通常是一个参数化的策略 π(as;θ)\pi(a|s; \theta),根据当前状态 ss 输出动作(或动作的概率分布)。其目标是最大化期望回报。参数为 θ\theta
    • 评论家 (Critic):负责评估动作或状态的好坏。它学习一个价值函数,例如动作价值函数 Q(s,a;w)Q(s, a; w) 或状态价值函数 V(s;w)V(s; w),用于评价 Actor 所做的决策。参数为 ww
    • 交互流程 (Page 3 图示)
      1. Actor 根据状态 ss 选择动作 aa
      2. 动作 aa 在环境中执行,产生奖励 rr 和下一个状态 ss'
      3. Critic 利用这个转移 (s,a,r,s)(s, a, r, s') 来评估动作 aa 的好坏(例如,计算 TD 误差 δ\delta)。
      4. Critic 利用 TD 误差更新自身的参数 ww,以更准确地进行评估。
      5. Actor 利用 Critic 的评估信号(例如 TD 误差 δ\delta 或估计的 Q 值)来更新其参数 θ\theta,朝着能获得更高评价(更高价值/更低 TD 误差)的方向调整策略。
  • 基本 Actor-Critic 更新 (Page 5)
    • 动机:用 Critic 学习的动作价值 Qw(s,a)Q_w(s, a) 来替代 REINFORCE 中高方差的蒙特卡洛回报 GtG_t
    • 策略梯度近似θJ(θ)Eπθ[θlogπθ(s,a)Qw(s,a)]\nabla_{\theta} J(\theta) \approx \mathbb{E}_{\pi_{\theta}} [\nabla_{\theta} \log \pi_{\theta}(s, a) Q_w(s, a)]
    • Actor 更新规则 (随机梯度上升)Δθ=αθlogπθ(s,a)Qw(s,a)\Delta \theta = \alpha \nabla_{\theta} \log \pi_{\theta}(s, a) Q_w(s, a) (这里 s,as, a 是当前步的状态和动作,α\alpha 是 Actor 的学习率)。
    • Critic 更新规则:更新参数 ww 以使 Qw(s,a)Qπθ(s,a)Q_w(s, a) \approx Q^{\pi_{\theta}}(s, a),通常使用 TD 学习。

二、理论基础与算法变体 (Theoretical Basis and Algorithm Variants)#

  • 回顾:随机策略梯度 (Page 6)
    • 提醒策略梯度的基本形式:V(s;θ)θ=EAπ(S;θ)[θlogπ(As;θ)Qπ(s,A)]\frac{\partial V(s;\theta)}{\partial\theta}=\mathbb{E}_{A\sim\pi(\cdot|S;\theta)}[\nabla_{\theta} \log \pi(A|s;\theta) \cdot Q_{\pi}(s,A)]
    • 可以通过采样动作 a^\hat{a} 并计算 g(a^,θ)=θlogπ(a^s;θ)Qπ(s,a^)g(\hat{a},\theta)=\nabla_{\theta} \log \pi(\hat{a}|s;\theta) \cdot Q_{\pi}(s,\hat{a}) 来获得梯度的无偏估计。AC 的目标是用 Qw(s,a^)Q_w(s, \hat{a}) 替代 Qπ(s,a^)Q_{\pi}(s, \hat{a})
  • 价值函数估计关系 (Page 7-9)
    • 定理 1 (Q 与 V 的关系):动作价值函数 QπQ_{\pi} 可以通过下一个状态的状态价值函数 VπV_{\pi} 表示: Qπ(St,at)=ESt+1[Rt+1+γVπ(St+1)]Q_{\pi}(S_t, a_t) = \mathbb{E}_{S_{t+1}} [R_{t+1} + \gamma V_{\pi}(S_{t+1})] (期望是针对 St+1P(St,at)S_{t+1} \sim \mathcal{P}(\cdot|S_t, a_t))。
    • 定理 2 (贝尔曼期望方程 for V):状态价值函数 VπV_{\pi} 满足贝尔曼期望方程: Vπ(St)=EAt,St+1[Rt+1+γVπ(St+1)]V_{\pi}(S_t) = \mathbb{E}_{A_t, S_{t+1}} [R_{t+1} + \gamma V_{\pi}(S_{t+1})] (期望是针对 Atπ(St)A_t \sim \pi(\cdot|S_t)St+1P(St,At)S_{t+1} \sim \mathcal{P}(\cdot|S_t, A_t))。
    • 单样本近似 (Page 9):对于一个观测到的转移 (st,at,rt+1,st+1)(s_t, a_t, r_{t+1}, s_{t+1})
      • Qπ(st,at)Q_{\pi}(s_t, a_t) 的单样本估计:rt+1+γVπ(st+1)r_{t+1} + \gamma V_{\pi}(s_{t+1})
      • Vπ(st)V_{\pi}(s_t) 的单样本估计 (TD 目标):rt+1+γVπ(st+1)r_{t+1} + \gamma V_{\pi}(s_{t+1})
  • 基于 V 值的 Actor-Critic 更新 (Page 10)
    • 假设 Critic 学习状态价值 v(s;w)Vπ(s)v(s; w) \approx V_{\pi}(s)
    • Critic 更新 (TD(0) Learning):
      • TD 目标:yt=rt+1+γv(st+1;w)y_t = r_{t+1} + \gamma v(s_{t+1}; w)
      • TD 误差:δt=ytv(st;w)\delta_t = y_t - v(s_t; w) (标准的 TD 误差:目标 - 当前估计)
      • Critic 参数更新:ww+αδtwv(st;w)w \leftarrow w + \alpha \delta_t \nabla_w v(s_t; w)
    • Actor 更新:使用 TD 误差 δt\delta_t 作为 Qπ(st,at)Q_{\pi}(s_t, a_t) 的(有偏)替代品(或者更准确地说,作为优势函数 A(st,at)=Qπ(st,at)Vπ(st)A(s_t, a_t) = Q_{\pi}(s_t, a_t) - V_{\pi}(s_t) 的估计)。
      • Actor 参数更新:θθ+βδtθlogπ(atst;θ)\theta \leftarrow \theta + \beta \delta_t \nabla_{\theta} \log \pi(a_t|s_t; \theta) (注意:Page 10 的公式是 θθβδt\theta \leftarrow \theta - \beta \delta_t \dotsδt=vyt\delta_t = v - y_t,两者负号抵消,结果与这里一致)。
  • 基于 Q 值的 Actor-Critic 更新 (Page 11)
    • 假设 Critic 学习动作价值 Qw(s,a)Qπθ(s,a)Q_w(s, a) \approx Q_{\pi_{\theta}}(s, a),例如使用线性近似 Qw(s,a)=ϕ(s,a)TwQ_w(s, a) = \phi(s, a)^T w
    • Critic 更新 (线性 TD(0),类似 Sarsa):
      • 观察 (s,a,r,s,a)(s, a, r, s', a')
      • TD 误差:δ=r+γQw(s,a)Qw(s,a)\delta = r + \gamma Q_w(s', a') - Q_w(s, a)
      • Critic 参数更新:ww+βδϕ(s,a)w \leftarrow w + \beta \delta \phi(s, a)β\beta 是 Critic 学习率)
    • Actor 更新
      • Actor 参数更新:θθ+αθlogπθ(s,a)Qw(s,a)\theta \leftarrow \theta + \alpha \nabla_{\theta} \log \pi_{\theta}(s, a) Q_w(s, a)α\alpha 是 Actor 学习率)
    • 算法:QAC (Page 11)
      function QAC
        初始化状态 s, 策略参数 theta, 价值参数 w
        采样动作 a ~ pi_theta(s, a)
        循环 对每一步:
          // 与环境交互
          采样奖励 r = R_s^a; 采样下一状态 s' ~ P_ss'^a
          // Actor 选择下一动作 (用于 Critic 更新目标)
          采样下一动作 a' ~ pi_theta(s', a')
          // Critic 更新
          delta = r + gamma * Q_w(s', a') - Q_w(s, a)
          w <- w + beta * delta * phi(s, a)  // 假设线性 Q_w = phi^T w
          // Actor 更新 (使用更新前的 Q_w(s, a)?)
          theta <- theta + alpha * nabla_theta log pi_theta(s, a) * Q_w(s, a)
          // 状态动作更新
          a <- a', s <- s'
        结束循环
      end function
      plaintext
      • 注意: 这个版本的 Actor 更新直接使用了 Qw(s,a)Q_w(s, a),而不是 TD 误差。这可能导致高方差。更常见的 AC 形式会使用某种形式的优势估计。

三、Actor-Critic 神经网络 (Actor-Critic Neural Networks)#

  • 网络结构 (Page 12-15)
    • 使用神经网络来参数化 Actor 和 Critic。
    • 策略网络 (Actor) π(as;θ)\pi(a|s; \theta) (Page 14):输入状态 ss,输出动作的概率分布(例如,通过 Softmax 层)。
    • 价值网络 (Critic) (Page 15)
      • Q-Critic q(s,a;w)q(s, a; w):输入状态 ss,输出每个动作的 Q 值。
      • V-Critic v(s;w)v(s; w):输入状态 ss,输出一个状态价值 V 值。
    • 共享网络 (Page 23):Actor 和 Critic 可以共享底层的特征提取层(例如 CNN 处理图像输入),然后在顶部分别接策略头(Policy Head)和价值头(Value Head)。
  • 训练过程 (Page 16-22)
    • 目标 (Page 16):同时优化 Actor (θ\theta) 和 Critic (ww)。Actor 试图改进策略以获得更高价值,Critic 试图更准确地估计价值以更好地指导 Actor。
    • 通用流程 (Page 17, 20):通过与环境交互获得转移 (st,at,rt+1,st+1)(s_t, a_t, r_{t+1}, s_{t+1}),然后分别更新 Critic 和 Actor。
    • Critic 更新 (Q-Critic, Page 18)
      • 需要下一个状态-动作对 (st+1,at+1)(s_{t+1}, a_{t+1}) 的 Q 值。通常 at+1a_{t+1}π(st+1;θ)\pi(\cdot|s_{t+1}; \theta) 采样 (Sarsa 风格)。
      • TD 目标:yt=rt+1+γq(st+1,at+1;wt)y_t = r_{t+1} + \gamma q(s_{t+1}, a_{t+1}; w_t)
      • 损失(MSE):L(w)=12[q(st,at;w)yt]2L(w) = \frac{1}{2} [q(s_t, a_t; w) - y_t]^2
      • 更新:通过梯度下降最小化损失 wwαwL(w)w \leftarrow w - \alpha \nabla_w L(w)
    • Actor 更新 (Q-Critic, Page 19)
      • 随机梯度:g(at,θt)=θlogπ(atst;θt)q(st,at;wt)g(a_t, \theta_t) = \nabla_{\theta} \log \pi(a_t|s_t; \theta_t) \cdot q(s_t, a_t; w_t)
      • 更新:θθ+βg(at,θt)\theta \leftarrow \theta + \beta g(a_t, \theta_t)
    • 训练算法示例 (Q-Critic AC, Page 20)
      1. 观测 StS_t,采样 Atπ(St;θt)A_t \sim \pi(\cdot|S_t; \theta_t)
      2. 执行 AtA_t,观测 Rt+1,St+1R_{t+1}, S_{t+1}
      3. 采样下一个动作 A~t+1π(St+1;θt)\tilde{A}_{t+1} \sim \pi(\cdot|S_{t+1}; \theta_t) (仅用于计算 TD 目标)。
      4. 计算 Q 值:qt=q(St,At;wt)q_t = q(S_t, A_t; w_t), qt+1=q(St+1,A~t+1;wt)q_{t+1} = q(S_{t+1}, \tilde{A}_{t+1}; w_t)
      5. 计算 TD 误差:δt=(Rt+1+γqt+1)qt\delta_t = (R_{t+1} + \gamma q_{t+1}) - q_t (目标 - 预测)。
      6. 计算 Critic 梯度:dw,t=wq(St,At;wt)d_{w, t} = \nabla_w q(S_t, A_t; w_t)
      7. 更新 Critic:wt+1=wt+αδtdw,tw_{t+1} = w_t + \alpha \delta_t d_{w, t} (使用正的 TD 误差)。
      8. 计算 Actor 梯度项:dθ,t=θlogπ(AtSt;θt)d_{\theta, t} = \nabla_{\theta} \log \pi(A_t|S_t; \theta_t)
      9. 更新 Actor:θt+1=θt+βqtdθ,t\theta_{t+1} = \theta_t + \beta q_t d_{\theta, t}注意:这里仍使用 qtq_t 而非 δt\delta_t)。
    • 训练后使用 (Page 21):训练完成后,通常只需要 Actor(策略网络)来与环境交互并做出决策,Critic 不再需要。

四、优势 Actor-Critic (Advantage Actor-Critic, A2C)#

  • 动机 (Page 23, 31):直接使用 Qw(s,a)Q_w(s, a) 更新 Actor 可能方差较大。引入基线 V(s)V(s),使用优势函数 (Advantage Function) A(s,a)=Q(s,a)V(s)A(s, a) = Q(s, a) - V(s) 来更新 Actor,可以降低方差。
  • 网络结构 (Page 23):通常使用 V-Critic,学习状态价值 v(s;w)Vπ(s)v(s; w) \approx V_{\pi}(s)。策略网络 π(as;θ)\pi(a|s; \theta) 和价值网络 v(s;w)v(s; w) 可以共享底层参数。
  • 优势函数的估计 (Page 24, 31)
    • 理论优势函数 Aπ(st,at)=Qπ(st,at)Vπ(st)A_{\pi}(s_t, a_t) = Q_{\pi}(s_t, a_t) - V_{\pi}(s_t)
    • 使用单步 TD 误差作为优势函数的估计: Aπ(st,at)(rt+1+γVπ(st+1))Vπ(st)A_{\pi}(s_t, a_t) \approx (r_{t+1} + \gamma V_{\pi}(s_{t+1})) - V_{\pi}(s_t) 使用 Critic 的估计值 v(s;w)v(s; w) 代替 Vπ(s)V_{\pi}(s)Aπ(st,at)δt=(rt+1+γv(st+1;w))v(st;w)A_{\pi}(s_t, a_t) \approx \delta_t = (r_{t+1} + \gamma v(s_{t+1}; w)) - v(s_t; w) TD 误差 δt\delta_t 是对优势函数 Aπ(st,at)A_{\pi}(s_t, a_t) 的(有偏但方差较低的)估计。
  • A2C 更新规则 (Page 25, 28)
    • Critic 更新 (学习 V(s;w)V(s; w)):
      • TD 目标:yt=rt+1+γv(st+1;w)y_t = r_{t+1} + \gamma v(s_{t+1}; w)
      • TD 误差:δt=ytv(st;w)\delta_t = y_t - v(s_t; w)
      • 更新:ww+αδtwv(st;w)w \leftarrow w + \alpha \delta_t \nabla_w v(s_t; w)
    • Actor 更新 (使用 TD 误差 δt\delta_t 作为优势估计):
      • 更新:θθ+βδtθlogπ(atst;θ)\theta \leftarrow \theta + \beta \delta_t \nabla_{\theta} \log \pi(a_t|s_t; \theta)
  • A2C 训练算法 (Page 28)
    1. 观测转移 (st,at,rt+1,st+1)(s_t, a_t, r_{t+1}, s_{t+1})atπ(st;θ)a_t \sim \pi(\cdot|s_t; \theta))。
    2. 计算 TD 目标:yt=rt+1+γv(st+1;w)y_t = r_{t+1} + \gamma v(s_{t+1}; w)
    3. 计算 TD 误差:δt=ytv(st;w)\delta_t = y_t - v(s_t; w)
    4. 更新 Actor:θθ+βδtθlogπ(atst;θ)\theta \leftarrow \theta + \beta \delta_t \nabla_{\theta} \log \pi(a_t|s_t; \theta)
    5. 更新 Critic:ww+αδtwv(st;w)w \leftarrow w + \alpha \delta_t \nabla_w v(s_t; w)
  • 多步目标 (Multi-Step Targets) (Page 32-34)
    • 可以使用 n 步回报来计算 Critic 的 TD 目标,以在偏差和方差之间进行权衡。
    • n 步 TD 目标yt(n)=Rt+1+γRt+2++γn1Rt+n+γnv(St+n;w)y_t^{(n)} = R_{t+1} + \gamma R_{t+2} + \dots + \gamma^{n-1} R_{t+n} + \gamma^n v(S_{t+n}; w)
    • n 步 TD 误差δt(n)=yt(n)v(St;w)\delta_t^{(n)} = y_t^{(n)} - v(S_t; w)
    • A2C with n-step TD Target (Page 34)
      • Actor 更新:θθ+βδt(n)θlogπ(AtSt;θ)\theta \leftarrow \theta + \beta \delta_t^{(n)} \nabla_{\theta} \log \pi(A_t|S_t; \theta)
      • Critic 更新:ww+αδt(n)wv(St;w)w \leftarrow w + \alpha \delta_t^{(n)} \nabla_w v(S_t; w)
  • A2C 与 REINFORCE 的比较 (Page 35)
    • REINFORCE (with Baseline):使用蒙特卡洛回报 GtG_t 作为 QπQ_{\pi} 的估计,并使用 Gtv(St;w)G_t - v(S_t; w) 来更新 Actor θ\theta;可能使用 GtG_t 作为目标更新 Critic ww无自举(除了 Critic 的 V 值本身)。
    • A2C (n-step):使用 n 步 TD 回报(包含自举项 γnv(St+n;w)\gamma^n v(S_{t+n}; w))作为 Critic 的目标 yt(n)y_t^{(n)},并使用 n 步 TD 误差 δt(n)\delta_t^{(n)} 来更新 Actor θ\theta 和 Critic ww有自举
    • n 步 A2C 中的 nn 控制了偏差和方差的权衡。当 nn \to \infty 时,n 步 TD 目标接近蒙特卡洛回报,A2C 接近带基线的 REINFORCE。

五、小结 (Page 36)#

  • Actor-Critic (AC) 方法结合了策略学习(Actor)和价值学习(Critic)。
  • Critic 学习价值函数(Q 或 V),用于评估 Actor 的行为。
  • Actor 根据 Critic 的评估信号(Q 值、TD 误差、优势估计)更新策略参数。
  • 相比纯策略梯度(如 REINFORCE),AC 方法(尤其是 A2C)通常具有更低的方差,允许更稳定和高效的学习,能够进行在线单步更新。
  • 引入基线(如 V 函数)并使用优势函数(通常用 TD 误差近似)是 AC 方法的关键改进 (A2C)。
  • 可以使用单步或多步 TD 目标来训练 Critic 和指导 Actor。
RL 学习笔记(11):Actor-Critic 方法
https://axi404.top/blog/rl-note-11
Author 阿汐
Published at April 18, 2025
Comment seems to stuck. Try to refresh?✨