Axi's Blog

Back

RL 学习笔记(10):策略梯度方法Blur image

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

第 12 讲:策略梯度方法#

一、策略的函数近似 (Policy Function Approximation)#

  • 背景 (Page 3)
    • 对于状态和动作空间有限的问题,我们可以用表格(例如矩阵)来表示和学习策略 π(as)\pi(a|s) 或确定性策略 π(s)\pi(s)
    • 但当状态或动作空间非常大甚至是连续的时候,表格方法不再可行。
  • 回顾价值函数近似 (Page 4)
    • 之前的方法是使用参数化的函数来近似价值函数:
      • 状态价值函数:Vθ(s)Vπ(s)V_{\theta}(s) \approx V^{\pi}(s)
      • 动作价值函数:Qθ(s,a)Qπ(s,a)Q_{\theta}(s, a) \approx Q^{\pi}(s, a)
    • 在这种方法中,策略通常是从近似的价值函数中间接派生出来的,例如使用 ϵ\epsilon-greedy 策略选择具有最高估计 Q 值的动作。
  • 直接策略近似 (Page 4)
    • 策略梯度方法的核心思想是:直接参数化策略本身
    • 我们将策略表示为一个以 θ\theta 为参数的函数 πθ(s,a)\pi_{\theta}(s, a),它表示在状态 ss 下选择动作 aa 的概率(对于随机策略): πθ(s,a)=P[as,θ]\pi_{\theta}(s, a) = \mathbb{P}[a|s, \theta]
    • 目标是直接学习最优的参数 θ\theta
  • 策略函数的要求 (Page 5)
    • 为了使用基于梯度的优化方法,策略函数 π(as,θ)\pi(a|s, \theta) 必须相对于参数 θ\theta 可微分
    • 其梯度 θπ(as,θ)\nabla_{\theta} \pi(a|s, \theta) 必须存在且有限。
  • 示例:Softmax 策略 (Page 5)
    • 常用于离散动作空间。
    • 首先,定义一个状态-动作对的偏好函数 (preference function) h(s,a,θ)h(s, a, \theta),通常使用线性模型或神经网络。例如,使用特征 x(s,a)x(s, a) 的线性组合: h(s,a,θ)=θTx(s,a)h(s, a, \theta) = \theta^T x(s, a)
    • 然后,通过 softmax 函数将偏好转换为概率分布: π(as,θ)=exp(h(s,a,θ))bexp(h(s,b,θ))\pi(a|s, \theta) = \frac{\exp(h(s, a, \theta))}{\sum_{b} \exp(h(s, b, \theta))}
    • 这个 softmax 策略是关于 θ\theta 可微的。
  • 与梯度赌博机算法的联系 (Page 6)
    • 回顾之前学习的梯度赌博机算法 (Gradient-bandit Algorithm)。该算法不直接估计动作价值 Qt(a)Q_t(a),而是维护一个动作偏好 Ht(a)H_t(a)
    • 动作选择概率由 softmax 给出:πt(a)=eHt(a)beHt(b)\pi_t(a) = \frac{e^{H_t(a)}}{\sum_b e^{H_t(b)}}
    • 偏好更新规则为: Ht+1(a)=Ht(a)+α(RtRˉt)(1a=Atπt(a))H_{t+1}(a) = H_t(a) + \alpha (R_t - \bar{R}_t) (\mathbf{1}_{a=A_t} - \pi_t(a)) 其中 RtR_t 是奖励,Rˉt\bar{R}_t 是奖励基线 (baseline),AtA_t 是实际选择的动作,1a=At\mathbf{1}_{a=A_t} 是指示函数(如果 a=Ata=A_t 则为 1,否则为 0)。
    • 这个更新形式与后续的策略梯度更新有相似之处,特别是 (RtRˉt)(R_t - \bar{R}_t) 项(奖励减去基线,类似于优势函数)和 (1a=Atπt(a))(\mathbf{1}_{a=A_t} - \pi_t(a)) 项(与策略梯度中的 logπ\nabla \log \pi 相关)。
  • 参数化策略的优劣势 (Page 7)
    • 优势
      • 通常具有更好的收敛特性
      • 高维或连续动作空间中非常有效(相比于需要对所有动作计算 Q 值的价值方法)。
      • 可以学习随机性策略,这在某些问题中(例如部分可观测环境或需要探索时)是最优的。
      • 策略函数本身可能比价值函数更简单,更容易近似。
      • 可以实现更平滑的策略改进。
      • 避免了在每一步选择动作时进行最大化搜索。
      • 与生物学习机制有一定关联。
    • 劣势
      • 通常收敛到局部最优,而非全局最优。
      • 评估一个策略(计算其梯度)通常效率较低,且具有高方差

二、策略梯度 (Policy Gradient)#

  • 目标函数设定 (Page 8)
    • 目标是找到最优的策略参数 θ\theta。为此,需要定义一个目标函数 J(θ)J(\theta) (PPT 中也用 η(θ)\eta(\theta)) 来衡量策略 πθ\pi_{\theta} 的性能(越高越好)。
    • 分幕式任务 (Episodic Tasks):常用初始状态 s1s_1 的价值作为目标函数: J1(θ)=Vπθ(s1)=Eπθ[G1]J_1(\theta) = V^{\pi_{\theta}}(s_1) = \mathbb{E}_{\pi_{\theta}}[G_1] 其中 G1G_1 是从 s1s_1 开始的完整回报。
    • 连续性任务 (Continuing Tasks):常用平均价值或平均奖励作为目标函数:
      • 平均价值:JavV(θ)=sdπθ(s)Vπθ(s)J_{avV}(\theta) = \sum_{s} d^{\pi_{\theta}}(s) V^{\pi_{\theta}}(s)
      • 平均每步奖励:JavR(θ)=sdπθ(s)aπθ(s,a)RsaJ_{avR}(\theta) = \sum_{s} d^{\pi_{\theta}}(s) \sum_{a} \pi_{\theta}(s, a) \mathcal{R}_{s}^{a} 其中 dπθ(s)d^{\pi_{\theta}}(s) 是策略 πθ\pi_{\theta} 下马尔可夫链的稳态分布(状态 ss 被访问的长期概率),Rsa\mathcal{R}_{s}^{a} 是在状态 ss 执行动作 aa 的期望立即奖励。
  • 优化方法:梯度上升 (Page 9, 14)
    • 为了最大化目标函数 J(θ)J(\theta),使用梯度上升法更新参数 θ\thetaθt+1θt+αθJ(θt)\theta_{t+1} \leftarrow \theta_t + \alpha \nabla_{\theta} J(\theta_t)
    • 其中 α\alpha 是学习率 (步长),θJ(θ)\nabla_{\theta} J(\theta) 是目标函数关于参数 θ\theta 的梯度,称为策略梯度 (Policy Gradient)θJ(θ)=(J(θ)θ1  J(θ)θd)\nabla_{\theta} J(\theta) = \begin{pmatrix} \frac{\partial J(\theta)}{\partial \theta_1} \ \vdots \ \frac{\partial J(\theta)}{\partial \theta_d} \end{pmatrix}
  • 策略梯度定理 (Policy Gradient Theorem) (Page 9, 11, 12)
    • 该定理给出了策略梯度 θJ(θ)\nabla_{\theta} J(\theta) 的一个重要表达式,它将目标函数的梯度与策略函数 πθ\pi_{\theta} 和动作价值函数 qπθq_{\pi_{\theta}} 联系起来,并且不依赖于状态分布 dπθ(s)d^{\pi_{\theta}}(s) 的梯度(这使得计算更容易)。
    • 定理表达式(对于上面定义的几种目标函数都成立): θJ(θ)sdπθ(s)aqπθ(s,a)θπθ(as,θ)\nabla_{\theta} J(\theta) \propto \sum_{s} d^{\pi_{\theta}}(s) \sum_{a} q_{\pi_{\theta}}(s, a) \nabla_{\theta} \pi_{\theta}(a|s, \theta) (这里的 dπθ(s)d^{\pi_{\theta}}(s) 含义略有不同,对于分幕式任务起始状态价值目标,它是状态 ss 在策略 πθ\pi_{\theta} 下被访问的折扣频率)。
    • 期望形式 (Page 12, 21):可以将策略梯度写成期望的形式,这对于推导基于采样的算法至关重要: θJ(θ)=Eπθ[qπθ(St,At)θlogπθ(AtSt,θ)]\nabla_{\theta} J(\theta) = \mathbb{E}_{\pi_{\theta}} [ q_{\pi_{\theta}}(S_t, A_t) \nabla_{\theta} \log \pi_{\theta}(A_t|S_t, \theta) ] (这里 St,AtS_t, A_t 是在策略 πθ\pi_{\theta} 下在时间 tt 访问的状态和采取的动作,期望是对轨迹进行的)。
      • 推导关键步骤 (Page 12, 20, 21)
        1. θJ(θ)sdπθ(s)aqπθ(s,a)θπθ(as,θ)\nabla_{\theta} J(\theta) \propto \sum_{s} d^{\pi_{\theta}}(s) \sum_{a} q_{\pi_{\theta}}(s, a) \nabla_{\theta} \pi_{\theta}(a|s, \theta) 出发。
        2. 引入 πθ(as,θ)\pi_{\theta}(a|s, \theta)aqπθ(s,a)θπθ(as,θ)=aπθ(as,θ)qπθ(s,a)θπθ(as,θ)πθ(as,θ)\sum_{a} q_{\pi_{\theta}}(s, a) \nabla_{\theta} \pi_{\theta}(a|s, \theta) = \sum_{a} \pi_{\theta}(a|s, \theta) q_{\pi_{\theta}}(s, a) \frac{\nabla_{\theta} \pi_{\theta}(a|s, \theta)}{\pi_{\theta}(a|s, \theta)}
        3. 使用对数导数技巧 (log-derivative trick)θlogπθ(as,θ)=θπθ(as,θ)πθ(as,θ)\nabla_{\theta} \log \pi_{\theta}(a|s, \theta) = \frac{\nabla_{\theta} \pi_{\theta}(a|s, \theta)}{\pi_{\theta}(a|s, \theta)}
        4. 将求和转换为期望:sdπθ(s)aπθ(as,θ)[]\sum_s d^{\pi_{\theta}}(s) \sum_a \pi_{\theta}(a|s, \theta) [\dots] 形式可以写成 ESdπθ,Aπθ(S)[]\mathbb{E}_{S \sim d^{\pi_{\theta}}, A \sim \pi_{\theta}(\cdot|S)} [\dots]
        5. 最终得到 Eπθ[qπθ(St,At)θlogπθ(AtSt,θ)]\mathbb{E}_{\pi_{\theta}} [ q_{\pi_{\theta}}(S_t, A_t) \nabla_{\theta} \log \pi_{\theta}(A_t|S_t, \theta) ]
  • 策略梯度计算 (Page 22-24)
    • 策略梯度是一个期望值,可以通过蒙特卡洛采样来近似。
    • 对于给定的状态 sts_t
      1. 根据当前策略 π(st;θ)\pi(\cdot|s_t; \theta) 采样一个动作 ata_t
      2. 需要得到该状态-动作对的价值 qπθ(st,at)q_{\pi_{\theta}}(s_t, a_t) 的估计值,记为 qtq_t
      3. 计算得分函数 (score function) θlogπ(atst;θ)\nabla_{\theta} \log \pi(a_t|s_t; \theta)
      4. 构造梯度的单样本估计g(at,θ)=qtθlogπ(atst;θ)g(a_t, \theta) = q_t \cdot \nabla_{\theta} \log \pi(a_t|s_t; \theta)
    • 这个 g(at,θ)g(a_t, \theta) 是真实策略梯度 θJ(θ)\nabla_{\theta} J(\theta) (或 V(st;θ)θ\frac{\partial V(s_t; \theta)}{\partial \theta} 如果考虑单状态价值梯度) 的无偏估计
    • 参数更新 (Page 24):使用这个随机梯度估计来更新参数: θt+1θt+βg(at,θt)\theta_{t+1} \leftarrow \theta_t + \beta \cdot g(a_t, \theta_t) ( β\beta 是学习率)。
  • 如何估计 Qπ(st,at)Q_{\pi}(s_t, a_t) (Page 25)
    • 选项 1: REINFORCE 算法:使用当前 episode 中从时间 tt 开始的完整样本回报 (Monte Carlo return) ut=k=tTγktrk+1u_t = \sum_{k=t}^T \gamma^{k-t} r_{k+1} 作为 Qπ(st,at)Q_{\pi}(s_t, a_t) 的无偏估计。
    • 选项 2: Actor-Critic 方法:使用另一个函数(通常是神经网络),称为评论家 (Critic),来学习和估计 Qπ(s,a)Q_{\pi}(s, a)Vπ(s)V_{\pi}(s)

三、带基线 (Baseline) 的策略梯度#

  • 动机 (Page 26, 30):策略梯度的蒙特卡洛估计通常具有很方差,这会使得学习过程缓慢且不稳定。引入基线 (Baseline) 是降低方差的常用技巧。
  • 核心思想 (Page 26, 28):从动作价值 Qπ(s,a)Q_{\pi}(s, a) 中减去一个只依赖于状态 ss 而不依赖于动作 aa 的函数 b(s)b(s)\nabla_{\theta} J(\theta) = \mathbb{E}_{\pi_{\theta}} [ (Q_{\pi_{\theta}}(S_t, A_t) - b(S_t)) \nabla_{\theta} \log \pi_{\theta}(A_t|S_t, \theta) ]$$
  • 为什么可行 (Page 27, 28):减去基线 b(s)b(s) 不会改变梯度的期望值(即梯度估计仍然是无偏的)。这是因为: EAπ(s;θ)[b(s)θlogπ(As;θ)]\mathbb{E}_{A \sim \pi(\cdot|s; \theta)} [ b(s) \nabla_{\theta} \log \pi(A|s; \theta) ] =b(s)θaπ(as;θ)= b(s) \nabla_{\theta} \sum_a \pi(a|s; \theta)
  • 随机梯度估计 (带基线) (Page 29)g(at)=(Qπθ(St,at)b(St))θlogπθ(atSt;θ)g(a_t) = (Q_{\pi_{\theta}}(S_t, a_t) - b(S_t)) \nabla_{\theta} \log \pi_{\theta}(a_t|S_t; \theta)
  • 基线的作用 (Page 30):虽然期望不变,但基线 b(s)b(s) 会影响随机梯度 g(at)g(a_t)方差。选择一个好的基线可以显著降低方差,从而加速收敛。
  • 常用基线:状态价值函数 (Page 31, 43)
    • 一个非常自然且常用的选择是使用状态价值函数 Vπθ(s)V_{\pi_{\theta}}(s) 作为基线 b(s)b(s)b(St)=Vπθ(St)b(S_t) = V_{\pi_{\theta}}(S_t)
    • 此时,(Qπθ(St,At)Vπθ(St))(Q_{\pi_{\theta}}(S_t, A_t) - V_{\pi_{\theta}}(S_t)) 正是优势函数 (Advantage Function) Aπθ(St,At)A_{\pi_{\theta}}(S_t, A_t) 的定义。它衡量了在状态 StS_t 选择动作 AtA_t 相对于平均动作的好坏程度。
    • 策略梯度变为: θJ(θ)=Eπθ[Aπθ(St,At)θlogπθ(AtSt,θ)]\nabla_{\theta} J(\theta) = \mathbb{E}_{\pi_{\theta}} [ A_{\pi_{\theta}}(S_t, A_t) \nabla_{\theta} \log \pi_{\theta}(A_t|S_t, \theta) ]
    • 直观上,这使得策略倾向于增加比平均水平好的动作(A>0A>0)的概率,减少比平均水平差的动作(A<0A<0)的概率。
    • 选择 Vπ(s)V_{\pi}(s) 作为基线的原因 (Page 43)
      • Vπ(St)V_{\pi}(S_t)Qπ(St,At)Q_{\pi}(S_t, A_t) 在动作 AtA_t 上的期望值,即 Vπ(St)=EAtπ(St)[Qπ(St,At)]V_{\pi}(S_t) = \mathbb{E}_{A_t \sim \pi(\cdot|S_t)}[Q_{\pi}(S_t, A_t)]
      • 选择 Vπ(St)V_{\pi}(S_t) 作为基线,理论上可以最小化梯度的方差(在某些假设下)。

四、REINFORCE 算法#

  • 基本 REINFORCE (无基线) (Page 33, 36)
    • 是一种蒙特卡洛策略梯度 (Monte Carlo Policy Gradient) 方法。
    • 使用完整的样本回报 GtG_t (或 utu_t) 作为 Qπθ(St,At)Q_{\pi_{\theta}}(S_t, A_t)无偏估计
    • 更新规则θθ+αGtθlogπθ(AtSt,θ)\theta \leftarrow \theta + \alpha G_t \nabla_{\theta} \log \pi_{\theta}(A_t|S_t, \theta) (这里的 AtA_t 是在时间 tt 实际采取的动作,GtG_t 是从该步开始直到 episode 结束的总折扣回报)。
    • 算法流程 (Page 36)
      1. 初始化策略参数 θ\theta
      2. 对每个 episode:
        • 根据当前策略 πθ\pi_{\theta} 生成一个完整的轨迹(状态、动作、奖励序列)。
        • 对 episode 中的每一步 tt
          • 计算从 tt 开始的回报 GtG_t
          • 计算策略的对数梯度 θlogπθ(AtSt,θ)\nabla_{\theta} \log \pi_{\theta}(A_t|S_t, \theta)
          • 更新参数 θθ+αGtθlogπθ(AtSt,θ)\theta \leftarrow \theta + \alpha G_t \nabla_{\theta} \log \pi_{\theta}(A_t|S_t, \theta)
  • 带基线的 REINFORCE (REINFORCE with Baseline) (Page 42-43, 57-58)
    • 核心思想:在 REINFORCE 算法中引入状态价值函数 Vπ(St)V_{\pi}(S_t) 作为基线,以降低梯度估计的方差。
    • 价值函数近似 (Page 37, 39, 51-52, 54):通常使用一个独立的价值网络(参数为 ww)来近似状态价值函数 Vπθ(St)V_{\pi_{\theta}}(S_t)v^(s;w)Vπθ(s)\hat{v}(s; w) \approx V_{\pi_{\theta}}(s)
    • 近似策略梯度 (Page 37, 52, 53, 56)
      • 使用样本回报 utu_t (或 GtG_t) 估计 Qπ(St,At)Q_{\pi}(S_t, A_t)
      • 使用价值网络 v^(st;w)\hat{v}(s_t; w) 估计基线 Vπ(St)V_{\pi}(S_t)
      • 随机梯度估计: g(at)(utv^(st;w))θlogπ(atSt;θ)g(a_t) \approx (u_t - \hat{v}(s_t; w)) \nabla_{\theta} \log \pi(a_t|S_t; \theta)
    • 双网络更新 (Page 40-42, 55-57):需要同时更新策略网络(参数 θ\theta)和价值网络(参数 ww)。
      • 策略网络更新 (Actor Update) (Page 41, 56):
        • 计算优势估计(或 TD 误差,如果用 utu_t 作为目标):δt=utv^(st;w)\delta_t = u_t - \hat{v}(s_t; w)
        • 更新 θ\thetaθθ+βδtθlogπ(atst;θ)\theta \leftarrow \theta + \beta \delta_t \nabla_{\theta} \log \pi(a_t|s_t; \theta)
      • 价值网络更新 (Critic Update) (Page 40, 55):
        • 目标是让 v^(st;w)\hat{v}(s_t; w) 接近样本回报 utu_t。通常最小化均方误差 (utv^(st;w))2(u_t - \hat{v}(s_t; w))^2
        • 计算误差 δt=utv^(st;w)\delta_t = u_t - \hat{v}(s_t; w) (注意 Page 40 定义反了,应为 Target - Prediction)。
        • 更新 wwww+αδtwv^(st;w)w \leftarrow w + \alpha \delta_t \nabla_{w} \hat{v}(s_t; w)
    • 算法流程 (Page 43, 58)
      1. 初始化策略参数 θ\theta 和价值网络参数 ww
      2. 对每个 episode:
        • 根据 πθ\pi_{\theta} 生成轨迹。
        • 对 episode 中的每一步 tt
          • 计算回报 Gk=t+1Tγkt1RkG \leftarrow \sum_{k=t+1}^T \gamma^{k-t-1} R_k (Page 58 的公式似乎少了折扣因子 γ\gamma 且下标为 RkR_k)。更标准的 Gt=k=tTγktrk+1G_t = \sum_{k=t}^T \gamma^{k-t} r_{k+1}
          • 计算 TD 误差(或优势估计) δGv^(St,w)\delta \leftarrow G - \hat{v}(S_t, w)
          • 更新价值网络参数 ww+αwδwv^(St,w)w \leftarrow w + \alpha^w \delta \nabla_w \hat{v}(S_t, w) (Page 58 中多了 γt\gamma^t)。
          • 更新策略网络参数 θθ+αθδθlogπ(AtSt,θ)\theta \leftarrow \theta + \alpha^{\theta} \delta \nabla_{\theta} \log \pi(A_t|S_t, \theta) (Page 58 中多了 γt\gamma^t)。
      • 注意:Page 58 的伪代码在 GG 的定义和更新规则中包含了 γt\gamma^t 因子,这可能与特定目标函数或推导有关,但基本的带基线的 REINFORCE 通常形式如上所述。
    • 特点 (Page 43)
      • 同时学习策略和状态价值函数。
      • 价值函数主要用作基线以减小方差。
      • 仍然基于蒙特卡洛回报 GtG_t,因此更新需要等到 episode 结束,学习速度可能较慢,不适合在线或连续任务。

五、小结 (Page 44, 59-61)#

  • 对比
    • 基于价值 (Value-Based):学习价值函数,策略隐式导出(如 ϵ\epsilon-greedy)。
    • 基于策略 (Policy-Based):直接学习参数化策略,可能没有显式价值函数。
    • 演员-评论家 (Actor-Critic):结合两者,学习策略(Actor)和价值函数(Critic)。带基线的 REINFORCE 可以看作一种简单的 Actor-Critic 方法。
  • 核心知识点
    • 策略梯度定理。
    • 引入基线(特别是状态价值函数 Vπ(s)V_\pi(s))来降低方差。
    • REINFORCE 算法(蒙特卡洛策略梯度)。
    • 带基线的 REINFORCE 算法。
    • 策略网络 π(as;θ)\pi(a|s; \theta) 和价值网络 v^(s;w)\hat{v}(s; w) 的概念和更新。
  • 策略梯度流程总结 (Page 45, 60)
    • 用策略网络 π(as;θ)\pi(a|s; \theta) 近似策略。
    • 目标是找到最大化期望回报(例如 J(θ)=Es[V(S;θ)]J(\theta) = \mathbb{E}_s[V(S; \theta)])的参数 θ\theta
    • 使用策略梯度上升法更新 θ\theta
    • 梯度估计通常涉及 Qπ(s,a)Q_\pi(s, a) 或优势 Aπ(s,a)A_\pi(s, a)
    • REINFORCE 使用蒙特卡洛回报 utu_t 估计 QπQ_\pi,并可选地使用价值网络 v^(s;w)\hat{v}(s; w) 作为基线。
RL 学习笔记(10):策略梯度方法
https://axi404.top/blog/rl-note-10
Author 阿汐
Published at April 17, 2025
Comment seems to stuck. Try to refresh?✨