@syuggupta: 从零开始学习强化学习的最佳资源!!
摘要
一本从零开始学习强化学习的实践指南,重点介绍使用PyTorch和Stable Baselines3库的CartPole环境。
查看缓存全文
缓存时间: 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:5092http://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()
...
仅凭几十行代码,你就训练出了一个通过试错学会平衡控制的智能体。这个黑匣子内部发生了什么?接下来的“核心概念“和“训练指标“部分将逐步为您解析。
相似文章
@syuggupta: 从零开始学习RL的最佳资源
一条推荐'Hands-on Modern RL'网站作为从零开始学习强化学习的最佳资源的推文,并附有关于BipedalWalker章节的链接。
@yashetal: https://github.com/alxndrTL/little-book-rl… RL小书也在此向社区提供,并附有补充材料…
《强化学习小书》(The Little Book of Reinforcement Learning)是一本简洁的RL入门书籍,包含PyTorch实现和补充材料,由Alexandre TL在GitHub上分享。
@SergioPaniego:如果你想在周末读点长文 ↓↓↓ @adithya_s_k 撰写的强化学习环境终极指南 https://hug…
本文由 AdithyaSK 在 Hugging Face Space 上发布,分享了在大型语言模型(LLM)时代构建和扩展强化学习环境的全面指南。
@_rohit_tiwari_: 强化学习课程 结构化学习路径,理解和应用强化学习。https://github.com/upb-lea/reinfor…
一门结构化的强化学习课程,包含讲义、教程任务和视频,作为帕德博恩大学和锡根大学的开源材料分享。
强化学习小手册
从基础到应用算法的强化学习简明介绍,包含PyTorch实现和补充证明。