在深度强化学习(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 模型可以视作构建以下模块的闭环:

  1. 环境与交互机制
  2. 策略模型和采样方式(Policy / Value / Actor-Critic)
  3. 学习模块与优化规则
  4. 经验管理与调试工具

理解这些基础后,你可以更灵活地选择算法、调整结构、修改回报函数,并将其部署在真实系统或模拟环境中。


下一篇:训练好的模型如何保存和加载?如何部署模型进行预测?