强化学习--4.策略梯度方法(蒙特卡罗)
策略梯度方法
- 1、策略梯度方法
- **一、强化学习基础回顾**
- **二、策略梯度方法的核心思想**
- 1.**核心公式:策略梯度定理**
- **2. 目标函数定义**
- **3. 策略梯度定理**
- **三、策略梯度的工作流程**
- **步骤1:参数化策略**
- **步骤2:采样轨迹**
- **步骤3:计算轨迹的回报**
- **步骤4:计算策略梯度**
- **步骤5:更新策略参数**
- **四、具体示例:REINFORCE算法**
- **示例:CartPole平衡问题**
- **1. 策略定义**
- **2. 采样轨迹**
- **3. 计算回报**
- **4. 计算梯度**
- **5. 参数更新**
- **五、策略梯度的优缺点**
- **优点**
- **缺点**
- 六、公式推导
- **1. 目标函数定义**
- **2. 梯度计算**
- **3. 对数概率的引入**
- **4. 轨迹概率分解**
- **5. 策略梯度定理**
- **6. 优势函数与方差降低**
- **七、改进方法**
- **八、总结**
- 2、蒙特卡洛
- 一、蒙特卡洛原理
- **1.核心思想与基本原理**
- 2.举例说明
- 例子1:估算圆周率π
- **经典案例:蒙特卡洛积分**
- 二、数学原理:从目标函数到梯度推导
- 1. **目标函数定义**
- 2. **梯度推导:对数导数技巧**
- 3. **梯度估计:蒙特卡洛采样**
- 三、经典算法:REINFORCE(蒙特卡洛策略梯度)
- 四、举例说明:CartPole环境中的策略梯度
- 1. **问题设定**
- 2. **梯度计算步骤**
- 3. **伪代码**
- 五、关键特性与优缺点
- 六、扩展:Actor-Critic方法
- 3、公式推导
- 推导1
- **1. 目标函数定义**
- **2. 策略梯度定理**
- **3. 公式推导步骤**
- **(1) 对期望的梯度求导**
- **(2) 分解轨迹概率**
- **(3) 最终梯度公式**
- **4. 引入基线(Baseline)**
- **5. 参数更新规则**
- **6. 示例:两臂老虎机问题**
- **总结**
- 推导2
- 强化学习策略梯度方法公式推导详解
- **1. 目标函数定义**
- **2. 梯度计算**
- **3. 对数概率的引入**
- **4. 轨迹概率分解**
- **5. 策略梯度定理**
- **6. 优势函数与方差降低**
- **7. 示例:CartPole 环境中的策略梯度**
- **7.1 策略网络定义**
- **7.2 损失函数与梯度更新**
- **7.3 算法流程**
- **8. 关键点总结**
- **9. 扩展与改进**
- **10. 结论**
- 推导3
- **一、目标函数的定义**
- **二、策略梯度定理的推导**
- **步骤1:将目标函数展开为轨迹期望**
- **步骤2:对目标函数求梯度**
- **步骤3:使用对数导数技巧(Log-Derivative Trick)**
- **步骤4:分解轨迹概率**
- **步骤5:计算梯度并消去无关项**
- **步骤6:引入折扣回报的因果关系**
- **三、具体示例:CartPole环境中的推导**
- **1. 计算对数概率的梯度**
- **2. 梯度更新公式**
- **四、从策略梯度定理到REINFORCE算法**
- **示例推导:**
- **五、关键公式总结**
- **六、策略梯度的高方差问题**
- **七、总结**
1、策略梯度方法
一、强化学习基础回顾
强化学习(Reinforcement Learning, RL)的核心是 Agent(智能体) 通过与 Environment(环境) 的交互,学习一个最优策略(Policy),使得长期累积奖励最大化。策略通常表示为:
π ( a ∣ s ) = P ( A t = a ∣ S t = s ) \pi(a|s) = P(A_t=a | S_t=s) π(a∣s)=P(At=a∣St=s)
即 在状态 s s s 下选择动作 a a a 的概率。
二、策略梯度方法的核心思想
策略梯度方法直接对策略进行参数化(例如用神经网络表示),通过梯度上升(Gradient Ascent)优化策略参数,使得期望回报最大化。与基于值函数的方法(如Q-Learning)不同,策略梯度直接优化策略,避免了值函数估计的误差传递问题。
1.核心公式:策略梯度定理
策略梯度定理证明了策略性能的梯度可以表示为:
∇ θ J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ Q π θ ( s t , a t ) ] \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot Q^{\pi_\theta}(s_t, a_t) \right] ∇θJ(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅Qπθ(st,at)]
其中:
- J ( θ ) J(\theta) J(θ) 是策略的期望回报;
- τ \tau τ 是轨迹(状态-动作序列);
- Q π θ ( s t , a t ) Q^{\pi_\theta}(s_t, a_t) Qπθ(st,at) 是状态-动作值函数。
2. 目标函数定义
策略 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(a∣s) 是一个由参数 θ \theta θ 决定的概率分布,表示在状态 s s s 下选择动作 a a a 的概率。目标函数 J ( θ ) J(\theta) J(θ) 定义为:
J ( θ ) = E τ ∼ π θ [ R ( τ ) ] J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \right] J(θ)=Eτ∼πθ[R(τ)]
其中 τ = ( s 0 , a 0 , s 1 , a 1 , … ) \tau = (s_0, a_0, s_1, a_1, \dots) τ=(s0,a0,s1,a1,…) 是轨迹, R ( τ ) = ∑ t = 0 T γ t r t R(\tau) = \sum_{t=0}^T \gamma^t r_t R(τ)=∑t=0Tγtrt 是折扣累积回报, γ ∈ [ 0 , 1 ] \gamma \in [0,1] γ∈[0,1] 是折扣因子 。
3. 策略梯度定理
目标是求 ∇ J ( θ ) \nabla J(\theta) ∇J(θ) 并利用梯度上升更新参数:
θ new = θ old + α ∇ J ( θ ) \theta_{\text{new}} = \theta_{\text{old}} + \alpha \nabla J(\theta) θnew=θold+α∇J(θ)
其中 α \alpha α 是学习率。根据策略梯度定理,梯度可表示为:
∇ J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ G t ] \nabla J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t \right] ∇J(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅Gt]
其中 G t = ∑ k = t T γ k − t r k G_t = \sum_{k=t}^T \gamma^{k-t} r_k Gt=∑k=tTγk−trk 是从时刻 t t t 开始的累积折扣回报 。
三、策略梯度的工作流程
步骤1:参数化策略
用带参数 θ \theta θ 的函数(如神经网络)表示策略:
π θ ( a ∣ s ) = 神经网络 ( s ) → 动作概率 \pi_\theta(a|s) = \text{神经网络}(s) \rightarrow \text{动作概率} πθ(a∣s)=神经网络(s)→动作概率
例如,在CartPole环境中,输入状态(小车位置、杆角度等),输出向左或向右的概率。
步骤2:采样轨迹
根据当前策略 π θ \pi_\theta πθ 与环境交互,生成轨迹 τ = ( s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , … ) \tau = (s_0, a_0, r_0, s_1, a_1, r_1, \dots) τ=(s0,a0,r0,s1,a1,r1,…)。
步骤3:计算轨迹的回报
计算每个时刻的累积回报(如折扣回报):
G t = ∑ k = t T γ k − t r k G_t = \sum_{k=t}^T \gamma^{k-t} r_k Gt=k=t∑Tγk−trk
其中 γ \gamma γ 是折扣因子。
步骤4:计算策略梯度
根据策略梯度定理,梯度计算公式为:
∇ θ J ( θ ) ≈ 1 N ∑ τ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ G t \nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{\tau} \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t ∇θJ(θ)≈N1τ∑t=0∑T∇θlogπθ(at∣st)⋅Gt
步骤5:更新策略参数
使用梯度上升更新参数:
θ ← θ + α ∇ θ J ( θ ) \theta \leftarrow \theta + \alpha \nabla_\theta J(\theta) θ←θ+α∇θJ(θ)
其中 α \alpha α 是学习率。
四、具体示例:REINFORCE算法
REINFORCE是策略梯度的经典算法,直接使用蒙特卡洛方法估计回报。
REINFORCE算法是策略梯度的蒙特卡洛实现,直接使用轨迹的完整回报Gt估计梯度。
算法流程
- 采样轨迹:通过当前策略 π θ \pi_\theta πθ 与环境交互,生成多条轨迹 τ = ( s 0 , a 0 , r 0 , … , s T ) \tau = (s_0, a_0, r_0, \dots, s_T) τ=(s0,a0,r0,…,sT)。
- 计算回报:对轨迹中的每个时刻 t t t,计算 G t = ∑ k = t T γ k − t r k G_t = \sum_{k=t}^T \gamma^{k-t} r_k Gt=∑k=tTγk−trk。
- 计算梯度:对每个 ( s t , a t ) (s_t, a_t) (st,at),计算损失函数:
L ( θ ) = − ∑ t = 0 T G t log π θ ( a t ∣ s t ) \mathcal{L}(\theta) = -\sum_{t=0}^T G_t \log \pi_\theta(a_t|s_t) L(θ)=−t=0∑TGtlogπθ(at∣st)
(负号是为了将梯度上升转化为梯度下降) - 参数更新:通过反向传播计算梯度并更新 θ \theta θ 。
示例:CartPole平衡问题
任务目标:控制小车移动,使杆子保持竖直。
1. 策略定义
用神经网络表示策略:
- 输入:状态 s s s(4维向量:小车位置、速度、杆角度、角速度);
- 输出:动作概率(向左或向右,使用Softmax函数)。
2. 采样轨迹
根据当前策略生成轨迹,例如:
τ = ( s 0 → a 0 = 右 → r 0 = 1 → s 1 → a 1 = 左 → r 1 = 1 → … ) \tau = (s_0 \rightarrow a_0=右 \rightarrow r_0=1 \rightarrow s_1 \rightarrow a_1=左 \rightarrow r_1=1 \rightarrow \dots) τ=(s0→a0=右→r0=1→s1→a1=左→r1=1→…)
3. 计算回报
假设轨迹长度为3,折扣因子 γ = 0.99 \gamma=0.99 γ=0.99,则:
G 0 = r 0 + γ r 1 + γ 2 r 2 G_0 = r_0 + \gamma r_1 + \gamma^2 r_2 G0=r0+γr1+γ2r2
4. 计算梯度
假设在状态 s 0 s_0 s0 选择了动作“右”,概率为 p 0 p_0 p0,则:
∇ θ log π θ ( 右 ∣ s 0 ) = ∇ θ log p 0 \nabla_\theta \log \pi_\theta(右|s_0) = \nabla_\theta \log p_0 ∇θlogπθ(右∣s0)=∇θlogp0
梯度计算为:
∇ θ J ( θ ) ≈ ∇ θ log p 0 ⋅ G 0 + ∇ θ log p 1 ⋅ G 1 + … \nabla_\theta J(\theta) \approx \nabla_\theta \log p_0 \cdot G_0 + \nabla_\theta \log p_1 \cdot G_1 + \dots ∇θJ(θ)≈∇θlogp0⋅G0+∇θlogp1⋅G1+…
5. 参数更新
更新神经网络参数 θ \theta θ,使得高回报的动作概率增加。
五、策略梯度的优缺点
优点
- 直接优化策略,适合连续动作空间(如机器人控制);
- 可以学习随机策略(例如石头剪刀布游戏需随机出招);
- 避免值函数逼近的误差。
缺点
- 高方差(Monte Carlo采样导致梯度估计不稳定);
- 样本效率低(需要大量轨迹);
- 收敛速度较慢。
六、公式推导
1. 目标函数定义
策略梯度的目标是最大化期望回报 J ( θ ) J(\theta) J(θ),其中 θ \theta θ 是策略参数(例如神经网络权重)。
目标函数:
J ( θ ) = E τ ∼ π θ [ R ( τ ) ] J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}[R(\tau)] J(θ)=Eτ∼πθ[R(τ)]
- τ \tau τ 表示轨迹(trajectory),即状态-动作序列 ( s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , . . . , s T ) (s_0, a_0, r_0, s_1, a_1, r_1, ..., s_T) (s0,a0,r0,s1,a1,r1,...,sT)。
- R ( τ ) R(\tau) R(τ) 是轨迹的总回报(未折扣或折扣后的累积奖励)。
2. 梯度计算
为了优化策略参数 θ \theta θ,我们需要计算目标函数 J ( θ ) J(\theta) J(θ) 的梯度:
∇ θ J ( θ ) = ∇ θ E τ ∼ π θ [ R ( τ ) ] \nabla_\theta J(\theta) = \nabla_\theta \mathbb{E}_{\tau \sim \pi_\theta}[R(\tau)] ∇θJ(θ)=∇θEτ∼πθ[R(τ)]
根据数学期望的定义,将其展开为积分形式:
∇ θ J ( θ ) = ∇ θ ∫ P ( τ ∣ θ ) R ( τ ) d τ \nabla_\theta J(\theta) = \nabla_\theta \int P(\tau|\theta) R(\tau) d\tau ∇θJ(θ)=∇θ∫P(τ∣θ)R(τ)dτ
由于 R ( τ ) R(\tau) R(τ) 与 θ \theta θ 无关,可交换积分和梯度:
∇ θ J ( θ ) = ∫ ∇ θ P ( τ ∣ θ ) R ( τ ) d τ \nabla_\theta J(\theta) = \int \nabla_\theta P(\tau|\theta) R(\tau) d\tau ∇θJ(θ)=∫∇θP(τ∣θ)R(τ)dτ
3. 对数概率的引入
利用微分恒等式: ∇ P ( τ ∣ θ ) = P ( τ ∣ θ ) ∇ log P ( τ ∣ θ ) \nabla P(\tau|\theta) = P(\tau|\theta) \nabla \log P(\tau|\theta) ∇P(τ∣θ)=P(τ∣θ)∇logP(τ∣θ),代入上式:
∇ θ J ( θ ) = ∫ P ( τ ∣ θ ) ∇ θ log P ( τ ∣ θ ) R ( τ ) d τ \nabla_\theta J(\theta) = \int P(\tau|\theta) \nabla_\theta \log P(\tau|\theta) R(\tau) d\tau ∇θJ(θ)=∫P(τ∣θ)∇θlogP(τ∣θ)R(τ)dτ
这一步的关键是将复杂的概率梯度 ∇ P ( τ ∣ θ ) \nabla P(\tau|\theta) ∇P(τ∣θ) 转换为更易处理的对数形式 ∇ log P ( τ ∣ θ ) \nabla \log P(\tau|\theta) ∇logP(τ∣θ)。
4. 轨迹概率分解
轨迹 τ \tau τ 的概率 P ( τ ∣ θ ) P(\tau|\theta) P(τ∣θ) 可分解为:
P ( τ ∣ θ ) = P ( s 0 ) ∏ t = 0 T π θ ( a t ∣ s t ) P ( s t + 1 ∣ s t , a t ) P(\tau|\theta) = P(s_0) \prod_{t=0}^T \pi_\theta(a_t|s_t) P(s_{t+1}|s_t, a_t) P(τ∣θ)=P(s0)t=0∏Tπθ(at∣st)P(st+1∣st,at)
其中:
- P ( s 0 ) P(s_0) P(s0) 是初始状态分布;
- π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) πθ(at∣st) 是策略在状态 s t s_t st 下选择动作 a t a_t at 的概率;
- P ( s t + 1 ∣ s t , a t ) P(s_{t+1}|s_t, a_t) P(st+1∣st,at) 是环境转移概率(与 θ \theta θ 无关)。
因此,对数概率为:
log P ( τ ∣ θ ) = log P ( s 0 ) + ∑ t = 0 T log π θ ( a t ∣ s t ) + ∑ t = 0 T log P ( s t + 1 ∣ s t , a t ) \log P(\tau|\theta) = \log P(s_0) + \sum_{t=0}^T \log \pi_\theta(a_t|s_t) + \sum_{t=0}^T \log P(s_{t+1}|s_t, a_t) logP(τ∣θ)=logP(s0)+t=0∑Tlogπθ(at∣st)+t=0∑TlogP(st+1∣st,at)
由于 P ( s 0 ) P(s_0) P(s0) 和 P ( s t + 1 ∣ s t , a t ) P(s_{t+1}|s_t, a_t) P(st+1∣st,at) 与 θ \theta θ 无关,其梯度为 0。最终:
∇ θ log P ( τ ∣ θ ) = ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) \nabla_\theta \log P(\tau|\theta) = \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) ∇θlogP(τ∣θ)=t=0∑T∇θlogπθ(at∣st)
5. 策略梯度定理
将上述结果代入梯度公式:
∇ θ J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ R ( τ ) ] \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot R(\tau) \right] ∇θJ(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅R(τ)]
这就是策略梯度定理,它表明策略梯度可以通过采样轨迹的对数概率乘以总回报来估计。
6. 优势函数与方差降低
在实际应用中,直接使用总回报 R ( τ ) R(\tau) R(τ) 可能导致高方差。为此,引入优势函数 A ( s t , a t ) A(s_t, a_t) A(st,at) 来替代 R ( τ ) R(\tau) R(τ):
∇ θ J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ A ( s t , a t ) ] \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot A(s_t, a_t) \right] ∇θJ(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅A(st,at)]
常见的优势函数包括:
- 蒙特卡洛回报: A ( s t , a t ) = G t A(s_t, a_t) = G_t A(st,at)=Gt(从时间步 t t t 开始的累积折扣回报)。
- 广义优势估计 (GAE):结合多步回报,平衡偏差和方差。
七、改进方法
- 降低方差:引入基线(Baseline),如使用状态值函数 V ( s ) V(s) V(s):
∇ θ J ( θ ) ≈ E [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ ( Q ( s t , a t ) − V ( s t ) ) ] \nabla_\theta J(\theta) \approx \mathbb{E} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot (Q(s_t,a_t) - V(s_t)) \right] ∇θJ(θ)≈E[t=0∑T∇θlogπθ(at∣st)⋅(Q(st,at)−V(st))] - Actor-Critic:结合值函数(Critic)和策略梯度(Actor),用Critic估计值函数辅助训练。
- 自然策略梯度/TRPO/PPO:通过约束策略更新的幅度,保证稳定性。
扩展与改进
- REINFORCE 算法:基于蒙特卡洛方法的策略梯度算法,直接使用总回报 G t G_t Gt。
- Actor-Critic 方法:结合值函数(Critic)评估优势函数,提升策略更新效率。
- PPO(Proximal Policy Optimization):通过约束策略更新幅度,避免过大的参数变化。
八、总结
策略梯度通过直接优化策略参数,利用轨迹的回报信号调整动作概率,是强化学习中的重要方法。其核心在于梯度估计和方差控制,后续的Actor-Critic、PPO等算法均在此基础上改进。
2、蒙特卡洛
一、蒙特卡洛原理
蒙特卡洛方法(Monte Carlo method)是一种通过使用随机数(或更常见的伪随机数)来解决各种计算问题的数学技术。这种方法的名字来源于摩纳哥的蒙特卡洛赌场,象征着随机性。蒙特卡洛方法可以用来模拟复杂的系统、估算数值积分、优化问题等,特别适用于那些难以用解析方法求解的问题。
蒙特卡洛方法的核心思想是通过大量随机采样来逼近真实结果。对于一些复杂的问题,如果直接求解非常困难,可以通过对问题进行简化,然后利用大量的随机样本点来估计答案。随着样本数量的增加,估计的结果会越来越接近真实的值。
1.核心思想与基本原理
蒙特卡洛方法(又称统计模拟方法)是一种基于概率统计理论的数值计算方法,通过随机抽样和统计模拟来解决复杂的数学问题。其核心思想是:
- 将待求解的问题转化为概率模型,通过大量随机样本的统计结果来估计目标值(如积分、概率、期望值等)。
- 利用“随机性”模拟现实中的不确定性,通过样本数量的增加,逐步逼近真实结果(大数定律保证收敛性)。
关键理论基础:
- 大数定律:当样本量足够大时,样本均值趋近于总体均值。
- 中心极限定理:样本统计量的分布趋近于正态分布,可用于误差分析。
2.举例说明
例子1:估算圆周率π
一个经典的例子是用来估算圆周率π的值。考虑一个边长为2的正方形,里面内切一个半径为1的圆。根据几何知识,圆的面积与正方形面积之比等于π/4。因此,如果我们能估算出这个比例,就可以计算出π的近似值。
- 步骤1:在正方形内随机生成大量的点。
- 步骤2:统计落在圆内的点的数量。
- 步骤3:计算这些点的比例,即圆内点数除以总点数。
- 步骤4:将上述比例乘以4得到π的近似值。
假设我们随机生成了N个点,其中有M个点落在了圆内,则有:
π ≈ 4 × M N \pi \approx 4 \times \frac{M}{N} π≈4×NM
随着N的增大,这个估算值会越来越接近真实的π值。
经典案例:蒙特卡洛积分
问题背景
假设需要计算函数 $ f(x) = x^2 $ 在区间 [ 0 , 1 ] [0, 1] [0,1] 上的定积分:
∫ 0 1 x 2 d x \int_0^1 x^2 \, dx ∫01x2dx
解析解为 1 3 \frac{1}{3} 31,但若无法直接积分,则可通过蒙特卡洛方法近似求解 。
实施步骤
-
构建概率模型
- 将积分转化为期望形式:
∫ 0 1 x 2 d x = E [ X 2 ] , X ∼ U ( 0 , 1 ) \int_0^1 x^2 \, dx = \mathbb{E}[X^2], \quad X \sim U(0,1) ∫01x2dx=E[X2],X∼U(0,1)
其中 $ X $ 是区间 [ 0 , 1 ] [0,1] [0,1] 上的均匀分布随机变量 。
- 将积分转化为期望形式:
-
随机抽样与计算
- 生成 $ N $ 个独立同分布的随机数 $ x_1, x_2, …, x_N $,计算每个样本的函数值 $ x_i^2 $。
- 取样本均值作为积分近似值:
I ^ = 1 N ∑ i = 1 N x i 2 \hat{I} = \frac{1}{N} \sum_{i=1}^N x_i^2 I^=N1i=1∑Nxi2
-
误差分析
- 理论误差与 $ \frac{1}{\sqrt{N}} $ 成正比,即样本量每增加100倍,误差缩小至1/10 。例如:
- 当 $ N=10^4 $ 时,误差约1%;当 $ N=10^6 $ 时,误差降至0.1% 。
- 理论误差与 $ \frac{1}{\sqrt{N}} $ 成正比,即样本量每增加100倍,误差缩小至1/10 。例如:
二、数学原理:从目标函数到梯度推导
1. 目标函数定义
根据任务类型,目标函数有三种常见形式:
- 初始状态价值: J 1 ( θ ) = E π θ [ R 1 ] J_1(\theta) = \mathbb{E}_{\pi_\theta}[R_1] J1(θ)=Eπθ[R1](单步初始状态回报期望)
- ** episodic 回报**: J e p ( θ ) = E π θ [ ∑ t = 1 T γ t − 1 r t ] J_{ep}(\theta) = \mathbb{E}_{\pi_\theta}\left[\sum_{t=1}^T \gamma^{t-1} r_t\right] Jep(θ)=Eπθ[∑t=1Tγt−1rt](折扣回报期望,适用于 episodic 任务)
- 平均奖励: J a v g ( θ ) = lim T → ∞ 1 T E π θ [ ∑ t = 1 T r t ] J_{avg}(\theta) = \lim_{T\to\infty} \frac{1}{T} \mathbb{E}_{\pi_\theta}\left[\sum_{t=1}^T r_t\right] Javg(θ)=limT→∞T1Eπθ[∑t=1Trt](适用于连续任务)
以 episodic 回报 为例,目标是最大化 J e p ( θ ) J_{ep}(\theta) Jep(θ)。
2. 梯度推导:对数导数技巧
目标函数的梯度为:
∇ θ J e p ( θ ) = E π θ [ ∑ t = 1 T ∇ θ log π θ ( a t ∣ s t ) ⋅ G t ] \nabla_\theta J_{ep}(\theta) = \mathbb{E}_{\pi_\theta}\left[\sum_{t=1}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t\right] ∇θJep(θ)=Eπθ[t=1∑T∇θlogπθ(at∣st)⋅Gt]
其中 G t = ∑ k = t T γ k − t r k G_t = \sum_{k=t}^T \gamma^{k-t} r_k Gt=∑k=tTγk−trk 是从时间步 t t t 开始的折扣回报(蒙特卡洛回报)。
推导关键在于利用 对数导数性质: ∇ θ π θ ( a ∣ s ) = π θ ( a ∣ s ) ∇ θ log π θ ( a ∣ s ) \nabla_\theta \pi_\theta(a|s) = \pi_\theta(a|s) \nabla_\theta \log \pi_\theta(a|s) ∇θπθ(a∣s)=πθ(a∣s)∇θlogπθ(a∣s),将概率的梯度转化为对数概率的梯度,便于结合期望计算。
3. 梯度估计:蒙特卡洛采样
由于期望难以直接计算,通过采样 N N N 条轨迹 τ = ( s 1 , a 1 , r 1 , … , s T , a T , r T ) \tau = (s_1, a_1, r_1, \dots, s_T, a_T, r_T) τ=(s1,a1,r1,…,sT,aT,rT),梯度近似为:
∇ θ J e p ( θ ) ≈ 1 N ∑ n = 1 N ∑ t = 1 T n ∇ θ log π θ ( a t n ∣ s t n ) ⋅ G t n \nabla_\theta J_{ep}(\theta) \approx \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} \nabla_\theta \log \pi_\theta(a_t^n|s_t^n) \cdot G_t^n ∇θJep(θ)≈N1n=1∑Nt=1∑Tn∇θlogπθ(atn∣stn)⋅Gtn
其中 G t n G_t^n Gtn 是第 n n n 条轨迹中时间步 t t t 的回报。
三、经典算法:REINFORCE(蒙特卡洛策略梯度)
REINFORCE算法 是策略梯度的基础实现,步骤如下:
- 初始化策略参数 θ \theta θ。
- 采样轨迹:根据当前策略 π θ \pi_\theta πθ 与环境交互,生成轨迹 τ \tau τ。
- 计算回报:对每个时间步 t t t,计算 G t = ∑ k = t T γ k − t r k G_t = \sum_{k=t}^T \gamma^{k-t} r_k Gt=∑k=tTγk−trk。
- 计算梯度:对每个 ( s t , a t ) (s_t, a_t) (st,at),计算 ∇ θ log π θ ( a t ∣ s t ) ⋅ G t \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t ∇θlogπθ(at∣st)⋅Gt 并累加。
- 更新参数:通过梯度上升更新 θ ← θ + α ∇ θ J e p ( θ ) \theta \leftarrow \theta + \alpha \nabla_\theta J_{ep}(\theta) θ←θ+α∇θJep(θ),其中 α \alpha α 是学习率。
改进:引入基线函数
为减少方差,用基线 b ( s t ) b(s_t) b(st)(如状态价值函数 V ( s t ) V(s_t) V(st))替换 G t G_t Gt,梯度变为:
∇ θ J e p ( θ ) ≈ ∑ t = 1 T ∇ θ log π θ ( a t ∣ s t ) ⋅ ( G t − b ( s t ) ) \nabla_\theta J_{ep}(\theta) \approx \sum_{t=1}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot (G_t - b(s_t)) ∇θJep(θ)≈t=1∑T∇θlogπθ(at∣st)⋅(Gt−b(st))
G t − b ( s t ) G_t - b(s_t) Gt−b(st) 称为 优势函数 A ( s t , a t ) A(s_t, a_t) A(st,at),表示动作 a t a_t at 相对于平均水平的优势。
四、举例说明:CartPole环境中的策略梯度
1. 问题设定
- 环境:CartPole 平衡杆,状态 s = ( x , x ˙ , θ , θ ˙ ) s = (x, \dot{x}, \theta, \dot{\theta}) s=(x,x˙,θ,θ˙),动作 a ∈ { 0 , 1 } a \in \{0, 1\} a∈{0,1}(左/右推)。
- 策略:参数化策略为线性模型 + softmax,即:
log π θ ( a = 1 ∣ s ) = θ T s , π θ ( a = 0 ∣ s ) = 1 − π θ ( a = 1 ∣ s ) \log \pi_\theta(a=1|s) = \theta^T s, \quad \pi_\theta(a=0|s) = 1 - \pi_\theta(a=1|s) logπθ(a=1∣s)=θTs,πθ(a=0∣s)=1−πθ(a=1∣s)
2. 梯度计算步骤
假设采样一条轨迹 τ = ( s 1 , a 1 , r 1 , … , s T , a T , r T ) \tau = (s_1, a_1, r_1, \dots, s_T, a_T, r_T) τ=(s1,a1,r1,…,sT,aT,rT),其中每步奖励 r t = 1 r_t = 1 rt=1(未倒下时)。
- 步骤1:计算回报 G t G_t Gt
假设折扣因子 γ = 1 \gamma = 1 γ=1,则 G t = T − t + 1 G_t = T - t + 1 Gt=T−t+1(剩余步数)。 - 步骤2:计算对数概率梯度
对动作 a t = 1 a_t=1 at=1, ∇ θ log π θ ( a t = 1 ∣ s t ) = s t \nabla_\theta \log \pi_\theta(a_t=1|s_t) = s_t ∇θlogπθ(at=1∣st)=st;
对动作 a t = 0 a_t=0 at=0, ∇ θ log π θ ( a t = 0 ∣ s t ) = − s t \nabla_\theta \log \pi_\theta(a_t=0|s_t) = -s_t ∇θlogπθ(at=0∣st)=−st。 - 步骤3:更新参数
梯度为 ∑ t = 1 T ( G t − b ) ⋅ ∇ θ log π θ ( a t ∣ s t ) \sum_{t=1}^T (G_t - b) \cdot \nabla_\theta \log \pi_\theta(a_t|s_t) ∑t=1T(Gt−b)⋅∇θlogπθ(at∣st),其中 b b b 可取平均回报减少方差。
3. 伪代码
初始化 θ,学习率 α,折扣 γ
for 每个 episode:采样轨迹 τ = (s_1, a_1, r_1, ..., s_T, a_T, r_T) 从 π_θ计算每个 t 的 G_t = sum_{k=t}^T γ^(k-t) r_k计算梯度 grad = 0for t in 1到T:prob = π_θ(a_t|s_t)log_prob = log(prob) if a_t=1 else log(1-prob)grad += ∇θ log_prob * G_t # 或 (G_t - b)θ += α * grad
五、关键特性与优缺点
- 优点:
- 直接优化目标,适用于连续动作空间和随机策略。
- 可处理高维或复杂动作空间(如神经网络策略)。
- 缺点:
- 梯度估计方差较大,需大量样本(通过优势函数、基线函数缓解)。
- 可能收敛到局部最优(依赖优化器和初始化)。
六、扩展:Actor-Critic方法
结合策略梯度(Actor)和值函数估计(Critic),用Critic估计优势函数 A ( s t , a t ) = Q ( s t , a t ) − V ( s t ) A(s_t, a_t) = Q(s_t, a_t) - V(s_t) A(st,at)=Q(st,at)−V(st),替代蒙特卡洛回报,减少方差并提高效率(如A2C、A3C算法)。
通过以上原理和例子,策略梯度方法的核心是通过梯度上升直接优化策略参数,利用采样轨迹的回报作为权重调整动作选择的概率,从而逐步提升期望回报。
3、公式推导
详细解释举例说明:强化学习策略梯度方法公式推导过程
推导1
强化学习中的策略梯度方法(Policy Gradient Method)旨在直接优化策略参数 θ \theta θ 以最大化目标函数 J ( θ ) J(\theta) J(θ)(通常定义为期望回报),其核心思想是通过梯度上升法更新参数。以下是详细的公式推导过程及示例:
1. 目标函数定义
策略 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(a∣s) 是一个由参数 θ \theta θ 决定的概率分布,表示在状态 s s s 下选择动作 a a a 的概率。目标函数 J ( θ ) J(\theta) J(θ) 定义为:
J ( θ ) = E τ ∼ π θ [ R ( τ ) ] J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \right] J(θ)=Eτ∼πθ[R(τ)]
其中 τ = ( s 0 , a 0 , s 1 , a 1 , … ) \tau = (s_0, a_0, s_1, a_1, \dots) τ=(s0,a0,s1,a1,…) 是轨迹, R ( τ ) = ∑ t = 0 T γ t r t R(\tau) = \sum_{t=0}^T \gamma^t r_t R(τ)=∑t=0Tγtrt 是折扣累积回报, γ ∈ [ 0 , 1 ] \gamma \in [0,1] γ∈[0,1] 是折扣因子 。
2. 策略梯度定理
目标是求 ∇ J ( θ ) \nabla J(\theta) ∇J(θ) 并利用梯度上升更新参数:
θ new = θ old + α ∇ J ( θ ) \theta_{\text{new}} = \theta_{\text{old}} + \alpha \nabla J(\theta) θnew=θold+α∇J(θ)
其中 α \alpha α 是学习率。根据策略梯度定理,梯度可表示为:
∇ J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ G t ] \nabla J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t \right] ∇J(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅Gt]
其中 G t = ∑ k = t T γ k − t r k G_t = \sum_{k=t}^T \gamma^{k-t} r_k Gt=∑k=tTγk−trk 是从时刻 t t t 开始的累积折扣回报 。
3. 公式推导步骤
(1) 对期望的梯度求导
目标函数 J ( θ ) J(\theta) J(θ) 的梯度为:
∇ J ( θ ) = ∫ τ R ( τ ) ⋅ ∇ θ P ( τ ∣ θ ) d τ \nabla J(\theta) = \int_{\tau} R(\tau) \cdot \nabla_\theta P(\tau|\theta) d\tau ∇J(θ)=∫τR(τ)⋅∇θP(τ∣θ)dτ
利用对数导数技巧(Likelihood Ratio):
∇ θ P ( τ ∣ θ ) = P ( τ ∣ θ ) ⋅ ∇ θ log P ( τ ∣ θ ) \nabla_\theta P(\tau|\theta) = P(\tau|\theta) \cdot \nabla_\theta \log P(\tau|\theta) ∇θP(τ∣θ)=P(τ∣θ)⋅∇θlogP(τ∣θ)
代入后得到:
∇ J ( θ ) = E τ ∼ π θ [ R ( τ ) ⋅ ∇ θ log P ( τ ∣ θ ) ] \nabla J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \cdot \nabla_\theta \log P(\tau|\theta) \right] ∇J(θ)=Eτ∼πθ[R(τ)⋅∇θlogP(τ∣θ)]
(2) 分解轨迹概率
轨迹概率 P ( τ ∣ θ ) P(\tau|\theta) P(τ∣θ) 可分解为:
P ( τ ∣ θ ) = μ ( s 0 ) ∏ t = 0 T π θ ( a t ∣ s t ) P ( s t + 1 ∣ s t , a t ) P(\tau|\theta) = \mu(s_0) \prod_{t=0}^T \pi_\theta(a_t|s_t) P(s_{t+1}|s_t, a_t) P(τ∣θ)=μ(s0)t=0∏Tπθ(at∣st)P(st+1∣st,at)
其中 μ ( s 0 ) \mu(s_0) μ(s0) 是初始状态分布, P ( s t + 1 ∣ s t , a t ) P(s_{t+1}|s_t, a_t) P(st+1∣st,at) 是环境动力学。由于环境动力学不含 θ \theta θ,对其取对数后仅保留策略项:
log P ( τ ∣ θ ) = log μ ( s 0 ) + ∑ t = 0 T log π θ ( a t ∣ s t ) \log P(\tau|\theta) = \log \mu(s_0) + \sum_{t=0}^T \log \pi_\theta(a_t|s_t) logP(τ∣θ)=logμ(s0)+t=0∑Tlogπθ(at∣st)
因此:
∇ θ log P ( τ ∣ θ ) = ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) \nabla_\theta \log P(\tau|\theta) = \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) ∇θlogP(τ∣θ)=t=0∑T∇θlogπθ(at∣st)
(3) 最终梯度公式
将上述结果代入 ∇ J ( θ ) \nabla J(\theta) ∇J(θ):
∇ J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ R ( τ ) ] \nabla J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot R(\tau) \right] ∇J(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅R(τ)]
进一步简化为:
∇ J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ G t ] \nabla J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t \right] ∇J(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅Gt]
其中 G t G_t Gt 替换为从时刻 t t t 开始的累积回报,因为未来奖励仅依赖于当前动作后的轨迹 。
4. 引入基线(Baseline)
为降低方差,通常引入基线 b ( s t ) b(s_t) b(st),梯度变为:
∇ J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ ( G t − b ( s t ) ) ] \nabla J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot (G_t - b(s_t)) \right] ∇J(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅(Gt−b(st))]
基线 b ( s t ) b(s_t) b(st) 可以是状态价值函数 V ( s t ) V(s_t) V(st) 或简单均值,不影响期望值但能减少方差 。
5. 参数更新规则
使用梯度上升更新参数:
θ new = θ old + α ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ G t \theta_{\text{new}} = \theta_{\text{old}} + \alpha \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t θnew=θold+αt=0∑T∇θlogπθ(at∣st)⋅Gt
若采用基线,则替换为 ( G t − b ( s t ) ) (G_t - b(s_t)) (Gt−b(st)) 。
6. 示例:两臂老虎机问题
假设有一个两臂老虎机(Multi-Armed Bandit),策略 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(a∣s) 为 softmax 函数:
π θ ( a ∣ s ) = exp ( θ a ) ∑ a ′ exp ( θ a ′ ) \pi_\theta(a|s) = \frac{\exp(\theta_a)}{\sum_{a'} \exp(\theta_{a'})} πθ(a∣s)=∑a′exp(θa′)exp(θa)
- 步骤1:初始化参数 θ = [ θ 1 , θ 2 ] \theta = [\theta_1, \theta_2] θ=[θ1,θ2]。
- 步骤2:在状态 s s s 下,按 π θ \pi_\theta πθ 选择动作 a a a,获得即时奖励 r r r。
- 步骤3:计算 G t = r G_t = r Gt=r(因单步任务),更新参数:
θ a ← θ a + α ( r − b ( s ) ) ⋅ ∇ θ a log π θ ( a ∣ s ) \theta_a \leftarrow \theta_a + \alpha \left( r - b(s) \right) \cdot \nabla_{\theta_a} \log \pi_\theta(a|s) θa←θa+α(r−b(s))⋅∇θalogπθ(a∣s)
若某次选择动作 a = 1 a=1 a=1 获得高奖励,则 θ 1 \theta_1 θ1 增大,下次更可能选择该动作;反之则减小 。
总结
策略梯度方法通过直接对策略参数求导,利用轨迹的累积回报调整动作概率,最终收敛到最优策略。其核心在于将目标函数的梯度转化为策略对数概率与累积回报的乘积期望,并可通过引入基线优化性能 。
推导2
强化学习策略梯度方法公式推导详解
策略梯度(Policy Gradient, PG)方法是一种直接优化策略参数的强化学习算法,其核心思想是通过计算策略的梯度,使智能体的行为逐步逼近最优策略。以下是详细的推导过程及示例说明。
1. 目标函数定义
策略梯度的目标是最大化期望回报 J ( θ ) J(\theta) J(θ),其中 θ \theta θ 是策略参数(例如神经网络权重)。
目标函数:
J ( θ ) = E τ ∼ π θ [ R ( τ ) ] J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}[R(\tau)] J(θ)=Eτ∼πθ[R(τ)]
- τ \tau τ 表示轨迹(trajectory),即状态-动作序列 ( s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , . . . , s T ) (s_0, a_0, r_0, s_1, a_1, r_1, ..., s_T) (s0,a0,r0,s1,a1,r1,...,sT)。
- R ( τ ) R(\tau) R(τ) 是轨迹的总回报(未折扣或折扣后的累积奖励)。
2. 梯度计算
为了优化策略参数 θ \theta θ,我们需要计算目标函数 J ( θ ) J(\theta) J(θ) 的梯度:
∇ θ J ( θ ) = ∇ θ E τ ∼ π θ [ R ( τ ) ] \nabla_\theta J(\theta) = \nabla_\theta \mathbb{E}_{\tau \sim \pi_\theta}[R(\tau)] ∇θJ(θ)=∇θEτ∼πθ[R(τ)]
根据数学期望的定义,将其展开为积分形式:
∇ θ J ( θ ) = ∇ θ ∫ P ( τ ∣ θ ) R ( τ ) d τ \nabla_\theta J(\theta) = \nabla_\theta \int P(\tau|\theta) R(\tau) d\tau ∇θJ(θ)=∇θ∫P(τ∣θ)R(τ)dτ
由于 R ( τ ) R(\tau) R(τ) 与 θ \theta θ 无关,可交换积分和梯度:
∇ θ J ( θ ) = ∫ ∇ θ P ( τ ∣ θ ) R ( τ ) d τ \nabla_\theta J(\theta) = \int \nabla_\theta P(\tau|\theta) R(\tau) d\tau ∇θJ(θ)=∫∇θP(τ∣θ)R(τ)dτ
3. 对数概率的引入
利用微分恒等式: ∇ P ( τ ∣ θ ) = P ( τ ∣ θ ) ∇ log P ( τ ∣ θ ) \nabla P(\tau|\theta) = P(\tau|\theta) \nabla \log P(\tau|\theta) ∇P(τ∣θ)=P(τ∣θ)∇logP(τ∣θ),代入上式:
∇ θ J ( θ ) = ∫ P ( τ ∣ θ ) ∇ θ log P ( τ ∣ θ ) R ( τ ) d τ \nabla_\theta J(\theta) = \int P(\tau|\theta) \nabla_\theta \log P(\tau|\theta) R(\tau) d\tau ∇θJ(θ)=∫P(τ∣θ)∇θlogP(τ∣θ)R(τ)dτ
这一步的关键是将复杂的概率梯度 ∇ P ( τ ∣ θ ) \nabla P(\tau|\theta) ∇P(τ∣θ) 转换为更易处理的对数形式 ∇ log P ( τ ∣ θ ) \nabla \log P(\tau|\theta) ∇logP(τ∣θ)。
4. 轨迹概率分解
轨迹 τ \tau τ 的概率 P ( τ ∣ θ ) P(\tau|\theta) P(τ∣θ) 可分解为:
P ( τ ∣ θ ) = P ( s 0 ) ∏ t = 0 T π θ ( a t ∣ s t ) P ( s t + 1 ∣ s t , a t ) P(\tau|\theta) = P(s_0) \prod_{t=0}^T \pi_\theta(a_t|s_t) P(s_{t+1}|s_t, a_t) P(τ∣θ)=P(s0)t=0∏Tπθ(at∣st)P(st+1∣st,at)
其中:
- P ( s 0 ) P(s_0) P(s0) 是初始状态分布;
- π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) πθ(at∣st) 是策略在状态 s t s_t st 下选择动作 a t a_t at 的概率;
- P ( s t + 1 ∣ s t , a t ) P(s_{t+1}|s_t, a_t) P(st+1∣st,at) 是环境转移概率(与 θ \theta θ 无关)。
因此,对数概率为:
log P ( τ ∣ θ ) = log P ( s 0 ) + ∑ t = 0 T log π θ ( a t ∣ s t ) + ∑ t = 0 T log P ( s t + 1 ∣ s t , a t ) \log P(\tau|\theta) = \log P(s_0) + \sum_{t=0}^T \log \pi_\theta(a_t|s_t) + \sum_{t=0}^T \log P(s_{t+1}|s_t, a_t) logP(τ∣θ)=logP(s0)+t=0∑Tlogπθ(at∣st)+t=0∑TlogP(st+1∣st,at)
由于 P ( s 0 ) P(s_0) P(s0) 和 P ( s t + 1 ∣ s t , a t ) P(s_{t+1}|s_t, a_t) P(st+1∣st,at) 与 θ \theta θ 无关,其梯度为 0。最终:
∇ θ log P ( τ ∣ θ ) = ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) \nabla_\theta \log P(\tau|\theta) = \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) ∇θlogP(τ∣θ)=t=0∑T∇θlogπθ(at∣st)
5. 策略梯度定理
将上述结果代入梯度公式:
∇ θ J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ R ( τ ) ] \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot R(\tau) \right] ∇θJ(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅R(τ)]
这就是策略梯度定理,它表明策略梯度可以通过采样轨迹的对数概率乘以总回报来估计。
6. 优势函数与方差降低
在实际应用中,直接使用总回报 R ( τ ) R(\tau) R(τ) 可能导致高方差。为此,引入优势函数 A ( s t , a t ) A(s_t, a_t) A(st,at) 来替代 R ( τ ) R(\tau) R(τ):
∇ θ J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ A ( s t , a t ) ] \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot A(s_t, a_t) \right] ∇θJ(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅A(st,at)]
常见的优势函数包括:
- 蒙特卡洛回报: A ( s t , a t ) = G t A(s_t, a_t) = G_t A(st,at)=Gt(从时间步 t t t 开始的累积折扣回报)。
- 广义优势估计 (GAE):结合多步回报,平衡偏差和方差。
7. 示例:CartPole 环境中的策略梯度
以经典的 CartPole 环境为例,策略梯度的具体实现步骤如下:
7.1 策略网络定义
import torch
import torch.nn as nnclass PolicyNetwork(nn.Module):def __init__(self, input_dim, action_dim):super(PolicyNetwork, self).__init__()self.fc1 = nn.Linear(input_dim, 128)self.fc2 = nn.Linear(128, action_dim)def forward(self, state):x = torch.relu(self.fc1(state))return torch.softmax(self.fc2(x), dim=-1)
- 输入维度
input_dim
为状态空间大小(CartPole 中为 4)。 - 输出维度
action_dim
为动作空间大小(CartPole 中为 2)。
7.2 损失函数与梯度更新
def compute_loss(policy_net, states, actions, returns):# 计算每个时间步的对数概率logits = policy_net(states)log_probs = torch.log(logits.gather(1, actions))# 损失函数为负的期望回报(梯度上升转为梯度下降)loss = -torch.mean(log_probs * returns)return loss# 更新策略参数
optimizer = torch.optim.Adam(policy_net.parameters(), lr=0.01)
loss.backward()
optimizer.step()
7.3 算法流程
- 与环境交互:使用当前策略 π θ \pi_\theta πθ 生成轨迹 τ \tau τ,记录状态、动作和奖励。
- 计算回报:根据轨迹计算每个时间步的累积折扣回报 G t G_t Gt。
- 更新策略:通过反向传播计算梯度并更新 θ \theta θ。
8. 关键点总结
- 策略梯度定理:核心公式将复杂梯度转化为对数概率与回报的乘积期望。
- 对数概率的性质:利用 ∇ log P ( τ ∣ θ ) \nabla \log P(\tau|\theta) ∇logP(τ∣θ) 简化计算,避免显式求解轨迹概率的梯度。
- 优势函数的作用:降低方差,提高训练稳定性。
- 采样与估计:通过有限轨迹的采样均值近似期望值,实现高效的参数更新。
9. 扩展与改进
- REINFORCE 算法:基于蒙特卡洛方法的策略梯度算法,直接使用总回报 G t G_t Gt。
- Actor-Critic 方法:结合值函数(Critic)评估优势函数,提升策略更新效率。
- PPO(Proximal Policy Optimization):通过约束策略更新幅度,避免过大的参数变化。
10. 结论
策略梯度方法通过直接优化策略参数,提供了一种直观且高效的学习框架。其推导过程的关键在于巧妙利用对数概率的性质,将复杂梯度转化为可计算的形式。通过合理设计优势函数和采样策略,策略梯度方法在连续动作空间和复杂环境中展现出强大的适应性。
推导3
好的,我将通过严格的数学推导,详细解释强化学习中策略梯度方法(Policy Gradient)的公式形成过程,并结合具体示例说明。
一、目标函数的定义
强化学习的核心目标是最大化 期望累积奖励(Expected Return)。假设策略由参数 θ \theta θ 参数化(即 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(a∣s)),则目标函数定义为:
J ( θ ) = E τ ∼ π θ [ R ( τ ) ] J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \right] J(θ)=Eτ∼πθ[R(τ)]
其中:
- τ = ( s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , … ) \tau = (s_0, a_0, r_0, s_1, a_1, r_1, \dots) τ=(s0,a0,r0,s1,a1,r1,…) 是一个轨迹;
- R ( τ ) = ∑ t = 0 T γ t r t R(\tau) = \sum_{t=0}^T \gamma^t r_t R(τ)=∑t=0Tγtrt 是轨迹的折扣回报, γ ∈ [ 0 , 1 ] \gamma \in [0,1] γ∈[0,1] 是折扣因子。
二、策略梯度定理的推导
策略梯度方法通过梯度上升优化参数 θ \theta θ,即:
θ ← θ + α ∇ θ J ( θ ) \theta \leftarrow \theta + \alpha \nabla_\theta J(\theta) θ←θ+α∇θJ(θ)
关键在于如何计算梯度 ∇ θ J ( θ ) \nabla_\theta J(\theta) ∇θJ(θ)。以下是详细推导过程:
步骤1:将目标函数展开为轨迹期望
J ( θ ) = E τ ∼ π θ [ R ( τ ) ] = ∫ τ P ( τ ∣ θ ) R ( τ ) d τ J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} [R(\tau)] = \int_\tau P(\tau|\theta) R(\tau) d\tau J(θ)=Eτ∼πθ[R(τ)]=∫τP(τ∣θ)R(τ)dτ
其中 P ( τ ∣ θ ) P(\tau|\theta) P(τ∣θ) 是策略 π θ \pi_\theta πθ 生成轨迹 τ \tau τ 的概率。
步骤2:对目标函数求梯度
∇ θ J ( θ ) = ∇ θ ∫ τ P ( τ ∣ θ ) R ( τ ) d τ = ∫ τ ∇ θ P ( τ ∣ θ ) R ( τ ) d τ \nabla_\theta J(\theta) = \nabla_\theta \int_\tau P(\tau|\theta) R(\tau) d\tau = \int_\tau \nabla_\theta P(\tau|\theta) R(\tau) d\tau ∇θJ(θ)=∇θ∫τP(τ∣θ)R(τ)dτ=∫τ∇θP(τ∣θ)R(τ)dτ
这里交换了积分和梯度的顺序(需满足一定数学条件)。
步骤3:使用对数导数技巧(Log-Derivative Trick)
注意到:
∇ θ P ( τ ∣ θ ) = P ( τ ∣ θ ) ∇ θ log P ( τ ∣ θ ) \nabla_\theta P(\tau|\theta) = P(\tau|\theta) \nabla_\theta \log P(\tau|\theta) ∇θP(τ∣θ)=P(τ∣θ)∇θlogP(τ∣θ)
代入上式:
∇ θ J ( θ ) = ∫ τ P ( τ ∣ θ ) ∇ θ log P ( τ ∣ θ ) ⋅ R ( τ ) d τ = E τ ∼ π θ [ ∇ θ log P ( τ ∣ θ ) ⋅ R ( τ ) ] \nabla_\theta J(\theta) = \int_\tau P(\tau|\theta) \nabla_\theta \log P(\tau|\theta) \cdot R(\tau) d\tau = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \nabla_\theta \log P(\tau|\theta) \cdot R(\tau) \right] ∇θJ(θ)=∫τP(τ∣θ)∇θlogP(τ∣θ)⋅R(τ)dτ=Eτ∼πθ[∇θlogP(τ∣θ)⋅R(τ)]
步骤4:分解轨迹概率
轨迹概率 P ( τ ∣ θ ) P(\tau|\theta) P(τ∣θ) 可分解为:
P ( τ ∣ θ ) = p ( s 0 ) ∏ t = 0 T π θ ( a t ∣ s t ) p ( s t + 1 ∣ s t , a t ) P(\tau|\theta) = p(s_0) \prod_{t=0}^T \pi_\theta(a_t|s_t) p(s_{t+1}|s_t, a_t) P(τ∣θ)=p(s0)t=0∏Tπθ(at∣st)p(st+1∣st,at)
其中 p ( s 0 ) p(s_0) p(s0) 是初始状态分布, p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t, a_t) p(st+1∣st,at) 是环境的状态转移概率。
取对数后:
log P ( τ ∣ θ ) = log p ( s 0 ) + ∑ t = 0 T [ log π θ ( a t ∣ s t ) + log p ( s t + 1 ∣ s t , a t ) ] \log P(\tau|\theta) = \log p(s_0) + \sum_{t=0}^T \left[ \log \pi_\theta(a_t|s_t) + \log p(s_{t+1}|s_t, a_t) \right] logP(τ∣θ)=logp(s0)+t=0∑T[logπθ(at∣st)+logp(st+1∣st,at)]
步骤5:计算梯度并消去无关项
对 log P ( τ ∣ θ ) \log P(\tau|\theta) logP(τ∣θ) 求梯度时,只有策略相关项 log π θ ( a t ∣ s t ) \log \pi_\theta(a_t|s_t) logπθ(at∣st) 与 θ \theta θ 有关:
∇ θ log P ( τ ∣ θ ) = ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) \nabla_\theta \log P(\tau|\theta) = \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) ∇θlogP(τ∣θ)=t=0∑T∇θlogπθ(at∣st)
代入梯度公式:
∇ θ J ( θ ) = E τ ∼ π θ [ ( ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ) ⋅ R ( τ ) ] \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \left( \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \right) \cdot R(\tau) \right] ∇θJ(θ)=Eτ∼πθ[(t=0∑T∇θlogπθ(at∣st))⋅R(τ)]
步骤6:引入折扣回报的因果关系
由于当前动作 a t a_t at 只能影响未来奖励 r t , r t + 1 , … , r T r_{t}, r_{t+1}, \dots, r_T rt,rt+1,…,rT,因此将 R ( τ ) R(\tau) R(τ) 替换为 从时刻 t t t 开始的累积回报:
G t = ∑ k = t T γ k − t r k G_t = \sum_{k=t}^T \gamma^{k-t} r_k Gt=k=t∑Tγk−trk
最终梯度公式为:
∇ θ J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ G t ] \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t \right] ∇θJ(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅Gt]
三、具体示例:CartPole环境中的推导
假设在CartPole环境中,策略网络输出两个动作(左、右)的概率,参数化为:
π θ ( a ∣ s ) = Softmax ( θ T s ) \pi_\theta(a|s) = \text{Softmax}(\theta^T s) πθ(a∣s)=Softmax(θTs)
其中 s s s 是状态向量, θ \theta θ 是参数矩阵。
1. 计算对数概率的梯度
对动作 a t a_t at 的对数概率为:
log π θ ( a t ∣ s t ) = θ a t T s t − log ∑ a ′ exp ( θ a ′ T s t ) \log \pi_\theta(a_t|s_t) = \theta_{a_t}^T s_t - \log \sum_{a'} \exp(\theta_{a'}^T s_t) logπθ(at∣st)=θatTst−loga′∑exp(θa′Tst)
梯度计算为:
∇ θ log π θ ( a t ∣ s t ) = s t ⋅ ( 1 ( a = a t ) − π θ ( a ∣ s t ) ) \nabla_\theta \log \pi_\theta(a_t|s_t) = s_t \cdot \left( \mathbf{1}(a=a_t) - \pi_\theta(a|s_t) \right) ∇θlogπθ(at∣st)=st⋅(1(a=at)−πθ(a∣st))
其中 1 ( a = a t ) \mathbf{1}(a=a_t) 1(a=at) 是指示函数。
2. 梯度更新公式
假设采样到一个轨迹,折扣回报为 G 0 , G 1 , … , G T G_0, G_1, \dots, G_T G0,G1,…,GT,则参数更新为:
θ ← θ + α ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ G t \theta \leftarrow \theta + \alpha \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t θ←θ+αt=0∑T∇θlogπθ(at∣st)⋅Gt
四、从策略梯度定理到REINFORCE算法
REINFORCE算法是策略梯度的蒙特卡洛实现,直接使用轨迹的完整回报 G t G_t Gt 估计梯度。其更新公式为:
θ ← θ + α ∑ t = 0 T γ t G t ∇ θ log π θ ( a t ∣ s t ) \theta \leftarrow \theta + \alpha \sum_{t=0}^T \gamma^t G_t \nabla_\theta \log \pi_\theta(a_t|s_t) θ←θ+αt=0∑TγtGt∇θlogπθ(at∣st)
示例推导:
假设在CartPole中采样到一条轨迹:
τ = ( s 0 → a 0 = 右 → r 0 = 1 → s 1 → a 1 = 左 → r 1 = 1 → s 2 → 结束 ) \tau = (s_0 \rightarrow a_0=右 \rightarrow r_0=1 \rightarrow s_1 \rightarrow a_1=左 \rightarrow r_1=1 \rightarrow s_2 \rightarrow \text{结束}) τ=(s0→a0=右→r0=1→s1→a1=左→r1=1→s2→结束)
折扣回报计算为(假设 γ = 0.9 \gamma=0.9 γ=0.9):
G 0 = r 0 + γ r 1 + γ 2 ⋅ 0 = 1 + 0.9 × 1 = 1.9 G_0 = r_0 + \gamma r_1 + \gamma^2 \cdot 0 = 1 + 0.9 \times 1 = 1.9 G0=r0+γr1+γ2⋅0=1+0.9×1=1.9
G 1 = r 1 + γ ⋅ 0 = 1 G_1 = r_1 + \gamma \cdot 0 = 1 G1=r1+γ⋅0=1
梯度更新为:
θ ← θ + α ( ∇ θ log π θ ( 右 ∣ s 0 ) ⋅ 1.9 + ∇ θ log π θ ( 左 ∣ s 1 ) ⋅ 1 ) \theta \leftarrow \theta + \alpha \left( \nabla_\theta \log \pi_\theta(右|s_0) \cdot 1.9 + \nabla_\theta \log \pi_\theta(左|s_1) \cdot 1 \right) θ←θ+α(∇θlogπθ(右∣s0)⋅1.9+∇θlogπθ(左∣s1)⋅1)
五、关键公式总结
公式 | 说明 |
---|---|
J ( θ ) = E τ ∼ π θ [ R ( τ ) ] J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} [R(\tau)] J(θ)=Eτ∼πθ[R(τ)] | 目标函数:期望累积奖励 |
$\nabla_\theta J(\theta) = \mathbb{E}\tau \left[ \sum{t=0}^T \nabla_\theta \log \pi_\theta(a_t | s_t) \cdot G_t \right]$ |
G t = ∑ k = t T γ k − t r k G_t = \sum_{k=t}^T \gamma^{k-t} r_k Gt=∑k=tTγk−trk | 从时刻 t t t 开始的折扣回报 |
六、策略梯度的高方差问题
由于梯度估计依赖于蒙特卡洛采样,方差较高。改进方法包括:
- 引入基线(Baseline):用 G t − b ( s t ) G_t - b(s_t) Gt−b(st) 替代 G t G_t Gt,其中 b ( s t ) b(s_t) b(st) 可以是状态值函数 V ( s t ) V(s_t) V(st)。
- Actor-Critic方法:用Critic网络估计 Q ( s t , a t ) Q(s_t, a_t) Q(st,at) 或 V ( s t ) V(s_t) V(st),替代蒙特卡洛回报。
七、总结
策略梯度的核心思想是通过直接优化策略参数,利用轨迹的回报信号调整动作概率。其数学推导依赖对数导数技巧和蒙特卡洛估计,最终公式清晰地展示了如何通过策略的局部调整最大化全局回报。后续方法(如PPO、TRPO)在此基础上进一步解决了方差和稳定性问题。