策略梯度方法(Policy Gradient Methods)

策略梯度方法是强化学习中直接优化策略的一类算法,通过梯度上升最大化期望回报。

一 核心思想

1.1直接策略参数化

将策略(即状态到动作的映射)通过参数化的模型(如神经网络)显式表示,从而通过优化模型参数来提升策略性能。

(1)策略的本质

在强化学习中,策略定义了智能体在状态 s 时选择动作 a 的规则,通常分为:

确定性策略$a = \mu_\theta(s)$ ,直接输出具体动作(适用于连续控制)。

随机性策略$a \sim \pi_\theta(a|s)$ ,输出动作的概率分布(适用于探索与随机环境)。

(2)参数化的意义

通过可学习参数 $\theta$(如神经网络的权重)显式表示策略,使得梯度上升算法可以直接调整参数以优化长期回报。传统方法(如 Q-Learning)间接优化值函数,而策略梯度直接对策略建模,自然支持复杂动作空间(如连续、高维动作)。

(3)参数化形式

离散动作空间:

输出层设计:神经网络最后一层为 Softmax 层,生成每个动作的概率。

输入:状态 s(如图像、向量)。

输出$\pi_\theta(a|s) = \text{Softmax}(f_\theta(s))$ ,其中 $f_\theta(s)$ 为神经网络输出的 logitsLogits 是机器学习和深度学习中用于分类模型的术语,指代模型最后一层(全连接层)的原始输出值未经任何归一化或概率转换(如 Softmax 或 Sigmoid))。

eg:

在 CartPole 任务中,状态是车的位移和速度,动作为“向左”或“向右”。

网络输出每个动作的概率,例如 [0.7,0.3],表示向左的概率为 70%。

 连续动作空间:

概率分布建模:输出动作的概率分布参数(如高斯分布的均值和方差)。

输入:状态 s。

输出设计

均值 $\mu_\theta(s)$ :由神经网络直接输出,表示动作的中心值。

方差 $\sigma_\theta(s)$$\log\sigma_\theta(s)$:可固定(如 $\sigma=0.1$),也可由网络输出(需保证正值,常用指数函数转换)。

动作采样:$a \sim \mathcal{N}(\mu_\theta(s), \sigma_\theta(s))$

eg:

机器人控制中,关节扭矩是一个连续值,策略网络输出扭矩的均值和方差,然后按高斯分布采样。

混合动作空间:

若同时存在离散和连续动作(如“发射导弹”+“导弹方向”),可组合两种参数化方式:

离散分支选择是否发射导弹(Softmax)

连续分支控制导弹方向(高斯分布)

直接策略参数化为强化学习提供了灵活的策略建模方式,是策略梯度方法、Actor-Critic 系列算法等技术的基础。

1.2 目标函数

最大化期望回报 $J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}[R(\tau)]$, 其中 $R(\tau)$ 是轨迹 $\tau$ 的累积回报。

$\pi_\theta(a|s)$  是参数为 θ 的策略

$\tau = (s_0, a_0, r_0, s_1, a_1, r_1, \dots, s_T)$ 是策略与环境交互生成的轨迹。

$R(\tau)$ 是轨迹的累积回报,通常为折扣形式:

$ R(\tau) = \sum_{t=0}^T \gamma^{t} r_t \quad $

​γ∈[0,1] 为折扣因子

在实际算法中,目标函数及其梯度的计算需基于采样估计,步骤如下:

(1)采集轨迹数据

用当前策略 $\pi_\theta$ 与环境交互,生成 N 条轨迹 $\{\tau^{(i)}\}$,每条轨迹包含状态、动作及奖励序列。  

(2) 计算每条轨迹的回报

对轨迹$\tau^{(i)} = (s_0^{(i)}, a_0^{(i)}, r_0^{(i)}, \dots, s_T^{(i)})$,计算每个时间步 t 的折扣回报:

$ G_t^{(i)} = \sum_{k=t}^T \gamma^{k-t} r_k^{(i)}. $

(3)估计梯度 

通过蒙特卡洛平均估计梯度:

$ \nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i=1}^N \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t^{(i)}|s_t^{(i)}) \cdot G_t^{(i)}. $

1.3 梯度计算

通过似然比技巧将梯度转换为期望形式:

$ \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] $

似然比是策略梯度方法推导中的核心数学工具,它将策略参数的梯度转化为可估计的期望形式,使得无需直接计算环境动态模型,仅通过采样即可优化策略。

似然比的本质是策略的对数概率对参数的导数:

$ \nabla_\theta \log \pi_\theta(a_t|s_t) = \frac{\nabla_\theta \pi_\theta(a_t|s_t)}{\pi_\theta(a_t|s_t)}. $

它衡量了参数 θ 调整时,采取动作 $a_t$ 的对数概率的相对变化。

该技巧将梯度表达为 策略概率的变化率乘以回报 的加权平均,通过采样轨迹进行估计。

二 优化技术

2.1 因果关系与折扣因子

修正梯度仅考虑当前动作之后的回报,使用折扣累计回报          $G_t = \sum_{k=t}^T \gamma^{k-t} r_k$

$ \nabla_\theta J(\theta) = \mathbb{E} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t \right] $

之前的做一下对比:$ \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] $、、$ R(\tau) = \sum_{t=0}^T \gamma^{t} r_t \quad $

2.2 基线(Baseline)

引入状态值函数 V(s) 作为基线,降低方差。优势函数  $A(s,a) = Q(s,a) - V(s)$,梯度变为:

$ \nabla_\theta J(\theta) = \mathbb{E} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot A(s_t,a_t) \right] $

$Q(s,a)$ : 状态-动作对的长期价值。

$V(s)$ :状态的长期平均价值。

$A(s,a)$ : 动作相对于策略平均水平的优势,是策略梯度更新的核心驱动力。

通过估计和使用 A(s,a),策略梯度方法能更高效地选择高收益动作,同时保持更新过程的稳定性。

三 算法分类

REINFORCE:蒙特卡洛方法,使用完整轨迹回报更新策略,方差较高。

Actor-Critic:结合策略(Actor)与值函数(Critic),Critic评估 V(s) 或 Q(s,a) ,提供低方差梯度估计。常见变体包括:

A2C/A3C:同步/异步框架,并行采样加速训练。

GAE(Generalized Advantage Estimation):多步优势估计,平衡偏差与方差。

高级优化方法

TRPO(Trust Region Policy Optimization):通过KL散度约束限制策略更新幅度。

PPO(Proximal Policy Optimization):简化TRPO,使用概率比裁剪控制更新,稳定高效。

 四 应用场景

机器人控制、游戏AI(如OpenAI Five)、金融交易策略等需精细动作调控的领域。

策略梯度方法通过直接优化策略参数,结合值函数近似及高级优化技术,成为强化学习中的核心范式,尤其以PPO为代表的算法在实践中广泛应用。

### 策略梯度法的基本原理与核心概念 策略梯度方法是一种重要的强化学习算法,用于寻找最优策略以最大化智能体的期望累积奖励。其核心思想是通过参数化的方式定义行为策略,并利用梯度上升的方法不断优化这一策略函数[^1]。 #### 参数化的策略函数 在策略梯度方法中,智能体的行为策略被表示为一个参数化的概率分布函数 $\pi_\theta(a|s)$,其中 $a$ 表示动作,$s$ 表示状态,$\theta$ 是可调优的参数向量。此函数直接输出在给定状态下应采取的动作的概率分布[^3]。 #### 目标函数 策略梯度算法的目标函数通常设定为期望累积奖励 $J(\theta)$,即智能体在未来一段时间内所能获得的折扣奖励总和。形式上可以写成: $$ J(\theta) = \mathbb{E}_{\tau \sim p_\theta}[\sum_{t=0}^{T}\gamma^t r_t] $$ 这里,$\tau$ 表示一条轨迹(一系列的状态、动作和奖励),$p_\theta$ 是由当前策略生成的轨迹分布,$\gamma$ 是折扣因子,$r_t$ 是第$t$步的即时奖励[^2]。 #### 策略更新机制 为了改进策略,需要计算目标函数相对于策略参数的梯度 $\nabla_\theta J(\theta)$ 并据此调整参数。根据政策梯度定理,该梯度可以通过采样得到近似值。具体而言,梯度表达式如下所示: $$ \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim p_\theta}[ \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t | s_t) Q(s_t, a_t)] $$ 这里的 $Q(s_t, a_t)$ 可以替换为优势函数 $A(s_t, a_t)$ 来减少方差。 #### 探索与利用的平衡 在训练过程中,策略梯度方法还需要考虑如何合理分配资源,在探索新策略的同时充分利用已知的有效策略。这一步骤直接影响到最终收敛的速度和质量。 ```python import numpy as np def compute_policy_gradient(log_probs, advantages): """ 计算策略梯度。 :param log_probs: 动作对应的对数概率列表 :param advantages: 优势函数值列表 :return: 策略梯度 """ policy_grad = [] for lp, adv in zip(reversed(log_probs), reversed(advantages)): policy_grad.append(-lp * adv) return sum(policy_grad) # 示例数据 log_probs_example = [-np.log(0.7), -np.log(0.8)] advantages_example = [1.2, -0.5] gradient = compute_policy_gradient(log_probs_example, advantages_example) print(f"Computed Policy Gradient: {gradient}") ``` 上述代码片段展示了如何基于记录的日志概率和优势函数值来计算简单的策略梯度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值