在深度强化学习(Deep Reinforcement Learning)中,我们的目标是:训练一个智能体(Agent),使其能够在复杂环境中通过交互、试错和学习,掌握解决任务的策略。
整个训练流程不是一行 .fit()
就能完成的,它涉及数据采集、策略评估、价值估计、梯度优化等多个协同模块。本文将逐步介绍训练所需的关键模块和完整流程。
DRL 训练流程的核心结构
一个标准的 DRL 系统至少包括以下几个部分:
1. 环境(Environment)
- 提供
reset()
和step(action)
接口 - 返回状态、奖励、终止信号和调试信息
- 通常使用 Gymnasium 编写,也可以是仿真器(如 PyBullet、AirSim)或实际系统接口
2. 策略网络(Policy Network)
- 输入当前状态,输出一个动作(或动作分布)
- 对于离散动作空间,常见输出为 softmax 分布;连续动作空间则直接输出浮点数
- 通常是 MLP(结构化输入)或 CNN(图像输入)网络
3. 值函数网络(Critic, 可选)
- 用于评估当前策略下某状态的“好坏”,即状态值 V(s) 或动作值 Q(s,a)
- 在 Actor-Critic 架构中,Actor 提出动作,Critic 提供反馈
4. 回放缓存(Replay Buffer)
- 保存经验
(state, action, reward, next_state, done)
- 支持随机采样,避免训练中数据高度相关
- 对于 off-policy 算法(如 DDPG、TD3)是必要组件
5. 优化器与更新规则(Optimizer)
- 根据策略梯度、TD 误差、KL 散度等损失函数对网络参数进行更新
- 通常使用 Adam 优化器
强化学习算法的三种主流架构
方法类别 | 特点 | 代表算法 | |
---|---|---|---|
Policy-based | 直接建模并优化策略 π(a,s),通过最大化期望回报更新策略 | REINFORCE, PPO, TRPO | |
Value-based | 学习动作价值函数 Q(s,a),通过贪婪策略导出动作选择 | DQN, Double DQN, Dueling DQN | |
Actor-Critic | 同时学习策略和价值函数,策略用于决策,价值函数用于评估 | A2C, A3C, DDPG, TD3, SAC, PPO |
- Policy-based 方法训练稳定性强、适合高维动作空间,但样本效率较低。
- Value-based 方法样本效率较高,适用于离散动作任务,但连续控制较困难。
- Actor-Critic 综合两者优势,是当前主流算法的主干框架。
一个完整训练循环的结构
以下是一个 off-policy 强化学习算法(如 DDPG)的大致流程:
for episode in range(num_episodes):
obs, _ = env.reset()
for step in range(max_steps):
action = policy(obs) # 根据当前策略选择动作
next_obs, reward, done, truncated, _ = env.step(action)
replay_buffer.add(obs, action, reward, next_obs, done)
if replay_buffer.size > batch_size:
batch = replay_buffer.sample()
loss = agent.update(batch) # 更新网络参数
obs = next_obs
if done or truncated:
break
对于 on-policy 方法(如 PPO),数据在采集后立即用于训练,不会重复利用。
使用 stable-baselines3 简化训练
对于标准任务,你也可以直接使用封装良好的开源库,如 stable-baselines3:
from stable_baselines3 import PPO
import gymnasium as gym
env = gym.make("CartPole-v1")
model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=100_000)
其内部集成了策略网络、值函数、采样器、优化器和学习率调度等。
训练中的常见问题与调参建议
问题类型 | 表现 | 建议处理方式 |
---|---|---|
奖励不增长 | 策略无法改进 | 检查 reward 设计是否过于稀疏,尝试 reward shaping |
模型震荡 | 训练不稳定 | 降低学习率,加入 entropy regularization |
动作超界 | 输出超过合法控制范围 | 使用 tanh 输出,并在环境中做动作缩放 |
状态未归一化 | 网络学习困难 | 对状态进行标准化(如减均值除标准差) |
收敛缓慢或停滞 | 训练初期策略没有探索能力 | 增加 epsilon 或 entropy,鼓励探索 |
总结:一个训练系统的核心闭环
训练一个 DRL 模型可以视作构建以下模块的闭环:
- 环境与交互机制
- 策略模型和采样方式(Policy / Value / Actor-Critic)
- 学习模块与优化规则
- 经验管理与调试工具
理解这些基础后,你可以更灵活地选择算法、调整结构、修改回报函数,并将其部署在真实系统或模拟环境中。