策略梯度算法(Policy Gradient Methods)​​:直接优化策略的强化学习范式

核心思想​

策略梯度算法通过​​直接优化策略函数​​(Policy Function)来最大化累积奖励,而非间接优化值函数(如Q-learning)。其核心是​​梯度上升​​:计算预期回报对策略参数的梯度,并沿梯度方向更新策略。
​关键公式​​(梯度计算):

\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(s_t,a_t)\right]

其中,θ 是策略参数,τ 是轨迹(Trajectory),Q^\pi 是状态-动作值函数。


​一、策略梯度 vs. 值函数方法​

​维度​​策略梯度(Policy Gradient)​​值函数方法(Q-learning等)​
​动作空间​适用于连续或离散动作通常需离散动作(Q表或函数逼近限制)
​策略类型​支持显式随机策略(如概率分布)通常为确定性策略(如贪心选择)
​探索方式​通过策略的随机性自然探索需手动设计探索策略(如ε-greedy)
​典型算法​REINFORCE、Actor-Critic、PPO、TRPODQN、SARSA、Double DQN

​二、策略梯度算法流程​

  1. ​初始化策略参数​​ θ(如神经网络权重)。
  2. ​生成轨迹​​:使用当前策略 πθ​ 与环境交互,收集轨迹数据\tau=(s_{0},a_{0},r_{0},...,s_{T})
  3. ​计算梯度​​:根据轨迹数据计算预期回报对 θ 的梯度。
  4. ​更新策略​​:沿梯度方向调整参数 \theta\leftarrow\theta+\alpha\nabla_{\theta}J(\theta)
  5. ​重复​​步骤2-4,直到策略收敛。

​三、策略梯度改进方法​

​1. 基准(Baseline)减方差​

在梯度公式中引入基准函数 b(s_{t}),减少方差而不改变期望:

\nabla_{\theta}J(\theta)=\mathbb{E}\left[\sum_{t=0}^{T}\nabla_{\theta}\log\pi_{\theta}(a_{t}|s_{t})\cdot(Q^{\pi}(s_{t},a_{t})-b(s_{t}))\right]

​常用基准​​:状态值函数 V(s),此时梯度公式变为优势函数A(s,a)=Q(s,a)-V(s)

​2. Actor-Critic框架​
  • ​Actor​​:策略函数 πθ​(a∣s),负责生成动作。
  • ​Critic​​:值函数 Vw​(s) 或 Qw​(s,a),评估状态或动作的价值并提供梯度修正。
  • ​优势​​:利用Critic的估计值替代蒙特卡洛回报,降低方差,提升稳定性。
​3. 近端策略优化(PPO)​

通过限制策略更新的幅度,避免训练崩溃:

J^{\text{CLIP}}(\theta) = \mathbb{E} \left[ \min \left( \frac{\pi_{\theta}(a|s)}{\pi_{\theta_{\text{old}}}(a|s)} A(s,a), \text{clip} \left( \frac{\pi_{\theta}(a|s)}{\pi_{\theta_{\text{old}}}(a|s)}, 1-\epsilon, 1+\epsilon \right) A(s,a) \right) \right]

其中,ϵ 是裁剪阈值,通常设为0.1~0.3。


​四、策略梯度的优缺点​

​优点​​缺点​
直接优化策略,避免值函数近似误差高方差(需大量样本或方差缩减技术)
支持连续动作空间和随机策略训练不稳定(策略可能剧烈波动)
自然探索(通过策略的随机性)样本效率低(需大量环境交互)

​五、代码示例:用PyTorch实现REINFORCE算法​

import torch
import torch.nn as nn
import torch.optim as optim
import gym

class PolicyNetwork(nn.Module):
    def __init__(self, state_dim, action_dim):
        super().__init__()
        self.fc = nn.Sequential(
            nn.Linear(state_dim, 64),
            nn.ReLU(),
            nn.Linear(64, action_dim),
            nn.Softmax(dim=-1)
        )
    
    def forward(self, state):
        return self.fc(state)

env = gym.make('CartPole-v1')
state_dim = env.observation_space.shape[0]
action_dim = env.action_space.n
policy = PolicyNetwork(state_dim, action_dim)
optimizer = optim.Adam(policy.parameters(), lr=0.01)

def train(num_episodes=1000):
    for episode in range(num_episodes):
        states, actions, rewards = [], [], []
        state = env.reset()
        done = False
        
        # 生成轨迹
        while not done:
            state_tensor = torch.FloatTensor(state)
            action_probs = policy(state_tensor)
            action = torch.multinomial(action_probs, 1).item()
            
            next_state, reward, done, _ = env.step(action)
            
            states.append(state)
            actions.append(action)
            rewards.append(reward)
            state = next_state
        
        # 计算折扣回报
        returns = []
        G = 0
        for r in reversed(rewards):
            G = r + 0.99 * G  # 折扣因子γ=0.99
            returns.insert(0, G)
        
        # 转换为Tensor
        states = torch.FloatTensor(states)
        actions = torch.LongTensor(actions)
        returns = torch.FloatTensor(returns)
        
        # 计算策略梯度
        log_probs = torch.log(policy(states).gather(1, actions.unsqueeze(1)))
        loss = -torch.sum(log_probs * returns)
        
        # 更新参数
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        if episode % 100 == 0:
            print(f"Episode {episode}, Total Reward: {sum(rewards)}")

train()

​六、实际应用案例​

  1. ​机器人控制​

    • ​场景​​:训练机械臂抓取物体,策略梯度直接优化动作(如关节角度)的概率分布。
    • ​方法​​:PPO算法在仿真环境中训练,迁移到真实机器人。
  2. ​游戏AI​

    ​案例​​:AlphaGo的初始版本使用策略梯度优化落子策略,结合蒙特卡洛树搜索(MCTS)。
  3. ​自动驾驶​

    应用​​:通过策略网络输出方向盘角度和油门刹车的连续控制信号。

​总结​

策略梯度算法是强化学习的核心方法之一,尤其适合​​复杂动作空间​​和​​需要随机策略​​的场景(如机器人控制、游戏AI)。其改进方法(如Actor-Critic、PPO)通过平衡偏差与方差,大幅提升了实用性和稳定性。掌握策略梯度,是解锁深度强化学习应用的关键一步。 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值