@syuggupta: 从零开始学习强化学习的最佳资源!!

X AI KOLs Timeline 新闻

摘要

一本从零开始学习强化学习的实践指南,重点介绍使用PyTorch和Stable Baselines3库的CartPole环境。

从零开始学习强化学习的最佳资源!! https://t.co/Rc5rfQ5H65
查看原文
查看缓存全文

缓存时间: 2026/09/02 15:57

从零开始学习强化学习的最佳资源!!

https://t.co/Rc5rfQ5H65


实践现代强化学习

来源:https://walkinglabs.github.io/hands-on-modern-rl/en/chapter01_cartpole/principles

1.1 运行 CartPole 示例 (https://walkinglabs.github.io/hands-on-modern-rl/en/chapter01_cartpole/principles#_1-1-run-cartpole)

前言部分已阐述了基础的强化学习问题。第一部分将从最小的可运行任务开始:首先让 CartPole 训练工作起来,然后利用状态、动作、奖励和策略来解释智能体为何能学会平衡。后续关于马尔可夫决策过程、动态规划和时序差分学习的内容,都将建立在这个可观测的训练循环之上。

本章目标:从零开始运行你的第一个强化学习训练脚本,并通过试错过程,直观理解智能体如何学习策略。无需任何理论知识前提。

📁章节代码:1-ppo_cartpole.py (https://github.com/walkinglabs/hands-on-modern-rl/blob/main/code/chapter01_cartpole/1-ppo_cartpole.py)·2-pytorch_ppo.py (https://github.com/walkinglabs/hands-on-modern-rl/blob/main/code/chapter01_cartpole/2-pytorch_ppo.py)·requirements.txt (https://github.com/walkinglabs/hands-on-modern-rl/blob/main/code/chapter01_cartpole/requirements.txt)

实践:运行 CartPole 训练 (https://walkinglabs.github.io/hands-on-modern-rl/en/chapter01_cartpole/principles#hands-on-run-cartpole-training)

完成了前言部分,我们现在可以开始动手实践。回顾核心的强化学习设置:一个智能体与环境交互,不断尝试动作,接收奖励信号,并逐步学习在不同状态下哪些决策最为有效。

那么,何为“好的决策“呢?我们从一个经典任务开始:CartPole。正如 print("Hello World") 是编程的第一步,用几十行代码实现平衡杆控制,便是踏入强化学习的标准第一步。

来自训练策略的 Gymnasium 测量帧

图 1-1:在 Gymnasium 的 CartPole-v1 环境中,使用本仓库的纯 PyTorch PPO 实现(随机种子 42)训练后的确定性评估。帧画面直接来自 rgb\_array 渲染。该回合达到了 500 步限制;标题中的角度信息来源于记录的观测值。

你可能会问:训练这样一个智能体需要什么硬件配置?

实际上,这个任务非常轻量。一台普通的笔记本电脑或台式机(Intel Mac、Apple Silicon、Windows/Linux)都可以运行:

  • 无需 GPU:计算量很小,仅用 CPU 训练即可。
  • 模型非常小:纯 PyTorch 的 Actor 和 Critic 网络各使用两个 64 单元的隐藏层,并且脚本默认在 CPU 上运行。

我们将使用 Gymnasium(当前标准的强化学习环境 API)作为训练场景,并使用 Stable Baselines3(SB3)作为算法库。如果把 PyTorch 比作制造汽车的零件,那么 SB3 就是一台组装精良的发动机:它将 PPO 算法封装成了几行代码。

本章不需要微积分或线性代数知识。我们将直接进入代码,并训练一个 CartPole 智能体。

完整的 CartPole PPO 训练循环

图 1-2:PPO 数据流示意图,并非实验结果。运行时间取决于 CPU、Python 和依赖库的版本。

步骤 1:安装依赖 (https://walkinglabs.github.io/hands-on-modern-rl/en/chapter01_cartpole/principles#step-1-install-dependencies)

首先,打开终端,安装环境库和算法库:

bash

pip install "gymnasium[classic-control]" stable-baselines3

注意:stable-baselines3 依赖于 PyTorch。由于 PyTorch 相对较大,下载可能需要一些时间。这是第一章中唯一较重的依赖安装。

步骤 2:运行训练 (https://walkinglabs.github.io/hands-on-modern-rl/en/chapter01_cartpole/principles#step-2-run-training)

首先安装完整的依赖:

bash

pip install -r requirements.txt

本仓库提供了两个 CartPole 实现。任选一个作为你的首次运行均可

  • 1-ppo_cartpole.py (https://github.com/walkinglabs/hands-on-modern-rl/blob/main/code/chapter01_cartpole/1-ppo_cartpole.py):一个 SB3 PPO 封装器,最适合首次成功运行。
  • 2-pytorch_ppo.py (https://github.com/walkinglabs/hands-on-modern-rl/blob/main/code/chapter01_cartpole/2-pytorch_ppo.py):一个用纯 PyTorch 从零开始实现的 PPO,适合了解细节。

两个脚本都会将指标记录到 SwanLab。训练完成后,还可以通过 --gui 选项运行可视化演示窗口:

bash

# 选项 A:SB3 封装器(推荐首次使用)
python 1-ppo_cartpole.py
python 1-ppo_cartpole.py --gui

# 选项 B:纯 PyTorch 版本(如果你想了解实现细节)
python 2-pytorch_ppo.py
python 2-pytorch_ppo.py --gui

要重现第 1.2 和 1.3 节中的测量曲线,请使用以下固定配置:

bash

python 2-pytorch_ppo.py \
  --seed 42 \
  --iterations 40 \
  --steps-per-rollout 2048 \
  --swanlab-mode disabled \
  --log-csv output/training_metrics_seed42.csv

原始记录已提交为 training_metrics_seed42.csv (https://github.com/walkinglabs/hands-on-modern-rl/blob/main/code/chapter01_cartpole/output/training_metrics_seed42.csv),而 plot_curves.py (https://github.com/walkinglabs/hands-on-modern-rl/blob/main/code/chapter01_cartpole/plot_curves.py) 则直接从该 CSV 文件生成页面中的图表。

运行后,你将在终端看到滚动的训练日志。训练完成后,模型保存在 output/ 目录下。

关于 --gui:训练过程始终以无头模式(无渲染)进行,因此训练速度不受影响。--gui 仅控制在训练后演示期间是否显示 CartPole 窗口。开启图形界面时,每帧需等待屏幕刷新(约 16 毫秒),因此演示运行较慢;关闭图形界面时,演示纯粹是计算过程,几秒钟内即可完成。

步骤 3:查看 SwanLab 训练曲线的位置 (https://walkinglabs.github.io/hands-on-modern-rl/en/chapter01_cartpole/principles#step-3-where-to-view-swanlab-training-curves)

两个脚本默认将 SwanLab 设置为 mode="local",因此最常见的流程是查看本地仪表板。训练完成后,运行:

bash

swanlab watch swanlog

然后在浏览器中打开以下任一地址:

  • http://127.0.0.1:5092
  • http://localhost:5092

以下是两个截图,作为界面示例。它们用于解释导航,而非本章测量结果的来源:

SwanLab 本地仪表板项目页面

SwanLab 项目页面示例。布局可能因版本而异;请使用实验列表选择运行记录。

在实验内部,你将看到如下图表页面:

SwanLab 实验图表页面

SwanLab 图表页面示例。本章的正式分析使用原始 CSV 数值,而非从截图中读取数字。

通常首先查看的曲线是 rollout/ep_rew_mean,即平均回合回报。如果它持续上升,说明智能体在不断改进。

如果你后续将 SwanLab 切换到云模式,入口点是 SwanLab 网页控制台:

  • https://swanlab.cn

登录后,你可以在项目/实验页面中查看相同的曲线。我们从本地模式开始,这样你无需创建账户就能查看结果。

如果你想了解每条曲线的含义,请继续下一节:训练指标 (https://walkinglabs.github.io/hands-on-modern-rl/en/chapter01_cartpole/metrics)。

python

# 下面展示的是 SB3 版本;纯 PyTorch 版本记录相同的指标,但完整展开了 PPO 循环。
import gymnasium as gym
from stable_baselines3 import PPO
from swanlab.integration.sb3 import SwanLabCallback

env = gym.make("CartPole-v1")
model = PPO("MlpPolicy", env, verbose=1)

# 训练 (SwanLab 记录奖励曲线和其他指标)
model.learn(
    total_timesteps=80000,
    callback=SwanLabCallback(
        project="cartpole-ppo",
        experiment_name="PPO-CartPole-v1",
        mode="local",
    ),
)

# 评估与保存
mean_reward, std_reward = evaluate_policy(model, env, n_eval_episodes=10)
print(f"训练完成!平均奖励: {mean_reward} +/- {std_reward}")
model.save("output/ppo_cartpole")

# 演示 (使用 --gui 时 render_mode="human";否则以无头模式运行)
vis_env = gym.make("CartPole-v1", render_mode="human")  # 或 None
for episode in range(5):
    obs, info = vis_env.reset()
    ...

仅凭几十行代码,你就训练出了一个通过试错学会平衡控制的智能体。这个黑匣子内部发生了什么?接下来的“核心概念“和“训练指标“部分将逐步为您解析。

相似文章

强化学习小手册

Hacker News Top

从基础到应用算法的强化学习简明介绍,包含PyTorch实现和补充证明。