策略梯度方法介绍——策略梯度定理推导过程

本文深入探讨了强化学习中的策略梯度方法,介绍了目标函数与状态分布的关系,并详细推导了策略梯度定理。通过状态分布,展示了状态出现的平均次数和出现概率,进而阐述了策略梯度定理的求解过程,解释了如何利用状态转移概率和策略函数的梯度来更新策略。最后,总结了策略梯度的方向对于优化目标函数的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

策略梯度方法介绍——策略梯度定理推导过程

目录

上一节介绍了Policy-Based强化学习方法的优势,并介绍了影响目标函数梯度 ∇ J ( θ ) \nabla\mathcal J(\theta) J(θ)的核心要素——状态分布本节将使用状态分布策略梯度定理进行表示

回顾:目标函数与状态分布

上一节介绍到:

  • 通常将目标函数 J ( θ ) \mathcal J(\theta) J(θ)定义为 情节中初始状态回报的期望,即初始状态的状态价值函数
    J ( θ ) = E π ( a ∣ s ; θ ) [ G 0 ∣ S = s 0 ] ≜ V π ( a ∣ s ; θ ) ( s 0 ) \mathcal J(\theta) = \mathbb E_{\pi(a \mid s;\theta)}[G_0 \mid S = s_0] \triangleq V_{\pi(a \mid s;\theta)}(s_0) J(θ)=Eπ(as;θ)[G0S=s0]Vπ(as;θ)(s0)

  • 情节中策略函数 π ( a ∣ s ; θ ) \pi(a \mid s;\theta) π(as;θ)的变化会影响状态分布的变化,而状态分布的变化直接影响目标函数 J ( θ ) \mathcal J(\theta) J(θ)的变化。

    关于状态 s s s出现的平均次数表示如下:
    η ( s ) = h ( s ) + ∑ s ˉ η ( s ˉ ) ∑ a π ( a ∣ s ˉ ) P ( s ∣ s ˉ , a ) = ∑ k = 0 T − 1 P r { s 0 → s , k , π } \begin{aligned} \eta(s) & = h(s) + \sum_{\bar s}\eta(\bar s)\sum_{a}\pi(a \mid \bar s)P(s \mid \bar s,a) \\ & = \sum_{k=0}^{T-1}P_r\{s_0 \to s,k,\pi\} \end{aligned} η(s)=h(s)+sˉη(sˉ)aπ(asˉ)P(ssˉ,a)=k=0T1Pr{ s0s,k,π}
    其中, P r { s 0 → s , k , π } P_r\{s_0 \to s,k,\pi\} Pr{ s0s,k,π}表示初始状态 s 0 s_0 s0,在策略函数 π \pi π的条件下,经过 k k k状态转移,最终达到状态 s s s的概率。即 存在 P r { s 0 → s , k , π } P_r\{s_0 \to s,k,\pi\} Pr{ s0s,k,π}的概率,初始状态 s 0 s_0 s0经过 k k k次状态转移后的状态必然是状态 s s s(必出现一次状态 s s s)
    因而,状态 s s s在情节中出现的平均次数 η ( s ) \eta(s) η(s)从初始时刻 t = 0 t = 0 t=0开始,到情节结束的前一个时刻 T − 1 T-1 T1之间所有时刻“出现一次状态 s s s”的平均次数之和

  • 状态 s s s出现概率表示如下:
    μ ( s ) = η ( s ) ∑ s ′ η ( s ′ ) \mu(s) = \frac{\eta(s)}{\sum_{s'} \eta(s')} μ(s)=sη(s)η(s)

策略梯度定理

策略梯度定理本质就是求解 目标函数的梯度 ∇ J ( θ ) \nabla \mathcal J(\theta) J(θ) ∇ J ( θ ) \nabla \mathcal J(\theta) J(θ)自身是一个向量,它包含两个要素:

  • 梯度数值
  • 梯度方向

相比于梯度数值,我们更关心的是梯度方向——梯度方向会 引导目标函数 J ( θ ) \mathcal J(\theta) J(θ)向最优方向收敛,而梯度数值在迭代过程中会与学习率 α \alpha α相乘,它只参与决定 J ( θ ) \mathcal J(\theta) J(θ)收敛的 步长(step)
在后续推导过程中会用到该思想。

策略梯度定理求解过程

根据目标函数的描述,将 ∇ J ( θ ) \nabla \mathcal J(\theta) J(θ)表示如下:
为了使推导过程更具有‘普遍性’ -> 将s_0用s表达;
∇ J ( θ ) = ∇ V π ( s ) \nabla \mathcal J(\theta) = \nabla V_\pi(s) J(θ)=Vπ(s)
V π ( s ) V_\pi(s) Vπ(s)使用贝尔曼期望方程进行展开:
∇ V π ( s ) = ∇ ∑ a ∈ A ( s ) π ( a ∣ s ) q π ( s , a ) \nabla V_\pi(s) = \nabla \sum_{a \in \mathcal A(s)}\pi(a \mid s)q_\pi(s,a) Vπ(s)=aA(s)π(as)qπ(s,a)
连加符号 ∑ a ∈ A ( s ) \sum_{a \in \mathcal A(s)} aA(s)梯度符号交换位置——即对连加操作中的每一项求解梯度,并对 π ( a ∣ s ) q π ( s , a ) \pi(a \mid s)q_\pi(s,a) π(as)qπ(s,a)求解梯度;
可以看成‘乘法求导’。
∑ a ∈ A ( s ) ∇ π ( a ∣ s ) q π ( s , a ) + ∑ a ∈ A ( s ) π ( a ∣ s ) ∇ q π ( s , a ) \sum_{a \in \mathcal A(s)} \nabla \pi(a \mid s)q_\pi(s,a) + \sum_{a \in \mathcal A(s)}\pi(a \mid s)\nabla q_\pi(s,a) aA(s)π(as)qπ(s,a)+aA(s)π(as)qπ(s,a)

此时观察第二项 ∑ a ∈ A ( s ) π ( a ∣ s ) ∇ q π ( s , a ) \sum_{a \in \mathcal A(s)}\pi(a \mid s)\nabla q_\pi(s,a) aA(s)π(as)qπ(s,a) q π ( s , a ) q_\pi(s,a) qπ(s,a)可以继续展开,即状态 s s s条件下选择并执行动作 a a a,经过状态转移得到下一时刻状态 s ′ s' s
∇ q π ( s , a ) = ∇ ∑ s ′ , r P ( s ′ , r ∣ s , a ) [ r + γ V π ( s ′ ) ] = ∇ ∑ s ′ , r P ( s ′ , r ∣ s , a ) ⋅ r + ∇ ∑ s ′ , r γ P ( s ′ , r ∣ s , a ) V π ( s ′ ) \begin{aligned} \nabla q_\pi(s,a) & = \nabla \sum_{s',r}P(s',r \mid s,a)[r + \gamma V_\pi(s')] \\ & = \nabla \sum_{s',r}P(s',r \mid s,a) \cdot r + \nabla \sum_{s',r} \gamma P(s',r \mid s,a) V_\pi(s') \end{aligned} qπ(s,a)=s,rP(s,rs,a)[r+γVπ(s)]=s,rP(s,rs,a)r+s,rγP(s,rs,a)Vπ(s)
我们要对 θ \theta θ求解梯度,只有策略函数 π ( a ∣ s ; θ ) \pi(a \mid s;\theta) π(as;θ)包含策略函数 V π , q π V_\pi,q_\pi Vπ,qπ中含有 θ \theta θ。因此:动态特性函数 P ( s ′ , r ∣ s , a ) P(s',r \mid s,a) P(s

### 策略梯度定理的数学推导过程 策略梯度定理是强化学习中一种重要的理论基础,其核心在于通过优化参数化的策略 $\pi(a|s, \theta)$ 来最大化期望回报 $J(\theta)$。以下是该定理的具体数学推导过程: #### 定义目标函数 目标函数定义为策略在所有可能轨迹上的期望回报: $$ J(\theta) = \mathbb{E}_{\tau \sim p_{\theta}(\tau)}[R(\tau)] $$ 其中,$\tau$ 是由状态序列、动作序列以及奖励组成的轨迹;$p_\theta(\tau)$ 是在当前策略下生成轨迹的概率分布;$R(\tau)$ 是轨迹的累积奖励。 展开轨迹概率分布可得: $$ p_\theta(\tau) = p(s_0)\prod_t \pi(a_t | s_t, \theta)p(s_{t+1}|s_t,a_t) $$ 因此, $$ J(\theta) = \int p_\theta(\tau) R(\tau)d\tau = \sum_s d^\pi(s) \sum_a q^\pi(s, a) \pi(a|s,\theta), $$ 这里引入了平稳状态分布 $d^\pi(s)$ 和状态-动作价值函数 $q^\pi(s, a)$[^1]。 #### 计算梯度 为了更新策略参数 $\theta$,我们需要计算目标函数相对于 $\theta$ 的梯度: $$ \nabla_\theta J(\theta) = \nabla_\theta \mathbb{E}_{\tau \sim p_\theta(\tau)}[R(\tau)]. $$ 利用积分与微分交换顺序的原则,得到: $$ \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim p_\theta(\tau)}[\nabla_\theta \log p_\theta(\tau) R(\tau)]. $$ 进一步分解轨迹概率分布的对数项: $$ \nabla_\theta \log p_\theta(\tau) = \sum_t \nabla_\theta \log \pi(a_t|s_t,\theta). $$ 代入上式后,最终可以写成: $$ \nabla_\theta J(\theta) = \mathbb{E}_\tau \left[\sum_t \nabla_\theta \log \pi(a_t|s_t,\theta) R(\tau)\right]. $$ 注意到这里的奖励信号 $R(\tau)$ 可能存在高方差问题,为此可以用基线(Baseline)替代原始奖励值,从而降低估计的波动性。具体形式为: $$ \nabla_\theta J(\theta) = \mathbb{E}_\tau \left[\sum_t \nabla_\theta \log \pi(a_t|s_t,\theta)(G_t - b(s_t))\right], $$ 其中 $b(s_t)$ 是任意的状态依赖基线[^2]。 #### 推广到优势函数 更一般的形式会涉及优势函数 $A^\pi(s, a)$,即相对收益的概念。此时梯度表达式变为: $$ \nabla_\theta J(\theta) = \mathbb{E}_{s,a}\left[A^\pi(s, a) \nabla_\theta \log \pi(a|s,\theta)\right]. $$ 这种表示方式不仅能够减少采样噪声,还提供了更加灵活的设计框架[^3]。 ```python import numpy as np def policy_gradient_update(theta, trajectories, gamma=0.99): """ 实现简单的策略梯度更新逻辑。 参数: theta: 当前策略参数向量 trajectories: 收集的一批轨迹数据 [(state, action, reward), ...] gamma: 折扣因子 返回: 更新后的参数向量 """ gradients = [] for trajectory in trajectories: states, actions, rewards = zip(*trajectory) # 计算折扣累计奖励 G_t discounted_rewards = np.zeros_like(rewards, dtype=np.float32) running_add = 0 for t in reversed(range(len(rewards))): running_add = rewards[t] + gamma * running_add discounted_rewards[t] = running_add # 归一化奖励以稳定训练 discounted_rewards -= np.mean(discounted_rewards) discounted_rewards /= np.std(discounted_rewards) # 计算 log π(a|s,θ) 对 θ 的梯度并加权求和 gradient_sum = sum( grad_log_pi(states[t], actions[t]) * discounted_rewards[t] for t in range(len(actions)) ) gradients.append(gradient_sum) avg_gradient = np.mean(gradients, axis=0) new_theta = theta + learning_rate * avg_gradient return new_theta ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静静的喝酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值