1. DDPG算法与Pendulum控制问题概述
深度确定性策略梯度(DDPG)是一种用于解决连续动作空间强化学习问题的算法。它结合了确定性策略梯度(DPG)和深度Q网络(DQN)的优点,特别适合像Pendulum这样的物理控制问题。
Pendulum-v1是OpenAI Gym中的一个经典控制环境,目标是通过施加扭矩使倒立摆保持直立状态。与离散动作空间不同,Pendulum需要输出连续的扭矩值(-2到2之间),这使得传统的Q-learning算法难以直接应用。
2. DDPG核心组件解析
2.1 网络架构设计
DDPG使用四个神经网络:
- 演员网络(Actor):输入状态,输出连续动作
- 评论家网络(Critic):输入状态和动作,输出Q值
- 对应的两个目标网络(延迟更新)
演员网络最后一层使用tanh激活函数,将输出限制在[-1,1]范围内,然后乘以动作上限值进行缩放。初始化时最后一层权重应在[-0.003,0.003]之间,防止初期梯度消失。
2.2 关键技术点
经验回放(Experience Replay):
- 存储转移样本(state, action, reward, next_state)
- 随机采样打破数据相关性
- 典型缓冲区容量50,000,批量大小64
目标网络软更新:
- 更新公式:θ_target = τ*θ + (1-τ)*θ_target
- τ通常取0.005,实现缓慢跟踪
探索噪声:
- 使用Ornstein-Uhlenbeck过程生成相关噪声
- 比高斯噪声更适合物理系统
3. 完整实现步骤
3.1 环境配置
import gymnasium as gym env = gym.make("Pendulum-v1") num_states = env.observation_space.shape[0] # 3 (cosθ, sinθ, θ') num_actions = env.action_space.shape[0] # 1 (扭矩) upper_bound = env.action_space.high[0] # 2.0 lower_bound = env.action_space.low[0] # -2.03.2 噪声生成器
class OUActionNoise: def __init__(self, mean, std_dev, theta=0.15, dt=1e-2): self.theta = theta self.mean = mean self.std_dev = std_dev self.dt = dt self.x_prev = np.zeros_like(mean) def __call__(self): x = self.x_prev + self.theta*(self.mean-self.x_prev)*self.dt + \ self.std_dev*np.sqrt(self.dt)*np.random.normal(size=self.mean.shape) self.x_prev = x return x3.3 训练循环
for ep in range(total_episodes): state, _ = env.reset() episodic_reward = 0 while True: # 选择动作并添加噪声 tf_state = tf.expand_dims(tf.convert_to_tensor(state), 0) action = actor_model(tf_state) + ou_noise() action = np.clip(action, lower_bound, upper_bound) # 执行动作 next_state, reward, done, _ = env.step(action) # 存储经验 buffer.record((state, action, reward, next_state)) # 学习 buffer.learn() update_target(target_actor, actor_model, tau) update_target(target_critic, critic_model, tau) state = next_state episodic_reward += reward if done: break # 记录和打印进度 ep_reward_list.append(episodic_reward) avg_reward = np.mean(ep_reward_list[-40:]) print(f"Episode {ep}: Avg Reward {avg_reward}")4. 关键参数调优指南
4.1 学习率设置
- 评论家网络学习率(0.002)通常比演员(0.001)大
- 使用Adam优化器效果较好
4.2 折扣因子与软更新
- 折扣因子γ=0.99
- 目标网络更新系数τ=0.005
4.3 噪声参数
- OU噪声标准差初始0.2
- θ=0.15控制均值回归速度
- dt=0.01时间步长
5. 训练效果分析与改进
5.1 典型训练曲线
训练初期平均奖励从-1500左右开始上升,经过100轮训练后能达到-200到-100区间。完全收敛可能需要300-500轮。
5.2 常见问题排查
奖励不上升:
- 检查噪声是否过大
- 验证网络是否正常更新
- 确认经验回放是否有效
训练不稳定:
- 减小学习率
- 增大缓冲区容量
- 调整τ值
探索不足:
- 增加噪声标准差
- 尝试不同的噪声类型
6. 扩展应用
DDPG可应用于其他连续控制问题:
- LunarLanderContinuous-v2
- BipedalWalker-v3
- 自定义机器人控制任务
对于更复杂任务,可以考虑:
- 使用优先级经验回放
- 尝试TD3等改进算法
- 结合课程学习策略