公司动态
DDPG算法在Pendulum控制中的实现与调优
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, theta0.15, dt1e-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(sizeself.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(fEpisode {ep}: Avg Reward {avg_reward})4. 关键参数调优指南4.1 学习率设置评论家网络学习率(0.002)通常比演员(0.001)大使用Adam优化器效果较好4.2 折扣因子与软更新折扣因子γ0.99目标网络更新系数τ0.0054.3 噪声参数OU噪声标准差初始0.2θ0.15控制均值回归速度dt0.01时间步长5. 训练效果分析与改进5.1 典型训练曲线训练初期平均奖励从-1500左右开始上升经过100轮训练后能达到-200到-100区间。完全收敛可能需要300-500轮。5.2 常见问题排查奖励不上升检查噪声是否过大验证网络是否正常更新确认经验回放是否有效训练不稳定减小学习率增大缓冲区容量调整τ值探索不足增加噪声标准差尝试不同的噪声类型6. 扩展应用DDPG可应用于其他连续控制问题LunarLanderContinuous-v2BipedalWalker-v3自定义机器人控制任务对于更复杂任务可以考虑使用优先级经验回放尝试TD3等改进算法结合课程学习策略