news 2026/4/17 7:47:13

智能体(Agent)开发入门:基于PyTorch与强化学习库的实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
智能体(Agent)开发入门:基于PyTorch与强化学习库的实战

智能体(Agent)开发入门:基于PyTorch与强化学习库的实战

1. 为什么学习智能体开发

最近几年,智能体技术越来越火。从游戏AI到自动驾驶,从聊天机器人到自动化交易系统,智能体正在改变我们与技术互动的方式。简单来说,智能体就是一个能感知环境、做出决策并采取行动的程序。

强化学习是训练智能体的主要方法之一。通过PyTorch这样的深度学习框架,配合Gymnasium这样的强化学习环境库,我们可以相对轻松地构建和训练自己的智能体。今天我们就从最经典的CartPole平衡问题开始,带你一步步搭建你的第一个智能体。

2. 环境准备与快速部署

2.1 安装必要工具

首先确保你已经安装了Python 3.8或更高版本。然后创建一个新的虚拟环境:

python -m venv rl_env source rl_env/bin/activate # Linux/Mac rl_env\Scripts\activate # Windows

接下来安装必要的库:

pip install torch gymnasium matplotlib

2.2 验证环境

让我们先快速验证一下环境是否正常工作:

import gymnasium as gym env = gym.make("CartPole-v1") observation, info = env.reset() print("初始观察值:", observation) env.close()

如果运行后看到类似"初始观察值: [-0.012 0.041 -0.03 0.039]"的输出,说明环境已经正确安装。

3. 理解CartPole问题

CartPole是一个经典的强化学习测试环境。问题描述很简单:一个小车可以在轨道上左右移动,车上有一根可以自由旋转的杆子。你的目标是控制小车移动,让杆子保持直立不倒。

环境会给你4个观察值:

  1. 小车位置
  2. 小车速度
  3. 杆子角度
  4. 杆子顶端速度

你的智能体需要根据这些观察值,决定是向左推(0)还是向右推(1)小车。每保持杆子直立一步,就会得到1分的奖励。如果杆子倾斜超过15度,或者小车移动超过轨道边界,游戏就结束了。

4. 构建智能体的大脑

4.1 设计策略网络

我们的智能体需要一个"大脑"来做决策。这里我们用一个简单的神经网络:

import torch import torch.nn as nn import torch.nn.functional as F class PolicyNetwork(nn.Module): def __init__(self): super().__init__() self.fc1 = nn.Linear(4, 128) # 输入层:4个观察值 self.fc2 = nn.Linear(128, 2) # 输出层:2个动作 def forward(self, x): x = F.relu(self.fc1(x)) x = F.softmax(self.fc2(x), dim=-1) return x

这个网络接收4个观察值,经过一个128个神经元的隐藏层,最后输出两个动作的概率分布。

4.2 理解网络输出

网络最后使用了softmax激活函数,这意味着它会输出两个动作的概率。比如可能输出[0.7, 0.3],表示有70%的概率选择动作0(左推),30%的概率选择动作1(右推)。

这种概率性的选择在强化学习中很重要,因为它允许智能体探索不同的动作,而不是总是选择当前看起来最好的动作。

5. 训练智能体

5.1 训练循环的基本结构

训练一个强化学习智能体通常包含以下几个步骤:

  1. 让智能体与环境交互,收集经验
  2. 根据这些经验计算"好"动作和"不好"动作
  3. 调整网络参数,使智能体更倾向于选择"好"动作
  4. 重复上述过程

让我们来实现这个训练循环:

def train(env, policy, episodes=1000, learning_rate=0.01): optimizer = torch.optim.Adam(policy.parameters(), lr=learning_rate) for episode in range(episodes): obs, _ = env.reset() done = False rewards = [] log_probs = [] # 与环境交互 while not done: obs_tensor = torch.FloatTensor(obs) action_probs = policy(obs_tensor) # 根据概率选择动作 action = torch.multinomial(action_probs, 1).item() log_prob = torch.log(action_probs[action]) obs, reward, terminated, truncated, _ = env.step(action) done = terminated or truncated rewards.append(reward) log_probs.append(log_prob) # 计算并应用梯度 returns = [] R = 0 for r in reversed(rewards): R = r + 0.99 * R # 折扣因子0.99 returns.insert(0, R) returns = torch.FloatTensor(returns) returns = (returns - returns.mean()) / (returns.std() + 1e-9) policy_loss = [] for log_prob, R in zip(log_probs, returns): policy_loss.append(-log_prob * R) optimizer.zero_grad() loss = torch.stack(policy_loss).sum() loss.backward() optimizer.step() if episode % 50 == 0: print(f"Episode {episode}, 总奖励: {sum(rewards)}")

5.2 开始训练

现在我们可以创建环境实例和策略网络,然后开始训练:

env = gym.make("CartPole-v1") policy = PolicyNetwork() train(env, policy, episodes=1000)

训练过程中你会看到每50个episode输出一次总奖励。随着训练进行,这个数字应该会逐渐增加,说明智能体正在学习如何保持杆子平衡。

6. 测试训练效果

训练完成后,让我们看看智能体的表现:

def test(env, policy, episodes=10): for episode in range(episodes): obs, _ = env.reset() done = False total_reward = 0 while not done: obs_tensor = torch.FloatTensor(obs) action_probs = policy(obs_tensor) action = torch.argmax(action_probs).item() obs, reward, terminated, truncated, _ = env.step(action) done = terminated or truncated total_reward += reward print(f"测试Episode {episode}, 总奖励: {total_reward}") test(env, policy)

理想情况下,经过足够训练后,智能体应该能在大多数测试中达到200分的满分(这是CartPole-v1环境的最高分限制)。

7. 可视化训练过程

为了更直观地理解训练过程,我们可以绘制奖励随训练次数的变化:

import matplotlib.pyplot as plt def train_with_logging(env, policy, episodes=1000): # ... (与之前相同的训练代码,但添加以下内容) episode_rewards = [] for episode in range(episodes): # ... (之前的训练循环代码) episode_rewards.append(sum(rewards)) plt.plot(episode_rewards) plt.xlabel("Episode") plt.ylabel("Total Reward") plt.title("训练过程") plt.show() env = gym.make("CartPole-v1") policy = PolicyNetwork() train_with_logging(env, policy)

这张图会显示智能体的表现如何随着训练逐步提升。一开始奖励可能很低,随着训练进行,曲线应该会稳步上升。

8. 下一步学习建议

现在你已经成功训练了第一个强化学习智能体!如果想继续深入学习,可以考虑以下方向:

  1. 尝试更复杂的环境,如LunarLander或Atari游戏
  2. 实现更高级的算法,如DQN、PPO或SAC
  3. 添加经验回放(experience replay)机制
  4. 尝试连续动作空间的问题
  5. 探索多智能体强化学习

强化学习是一个广阔的领域,这个简单的CartPole示例只是冰山一角。随着你深入学习,你会发现更多有趣且具有挑战性的问题等待解决。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 7:45:12

AI写论文是作弊还是工具?关于AI创作的4个核心争议,一次性说清楚

AI写论文这件事,为什么越讨论越让人焦虑?前几天刷到一条新闻,说有个学生把自己纯手写的5.8万字论文送去AI检测,结果报告显示AI生成率86.8%,连致谢部分都被判定为“机器写的”。另一头,南京大学历史学院却发…

作者头像 李华
网站建设 2026/4/17 7:44:41

【新手向】搭建个人网站-静态博客

本教程使用Astro框架的Mizuki主题搭建个人博客(云端) 教程内不涉及云服务器的租赁(也不需要) 准备工作 一、本地项目搭建 安装Git、node.js、VSCode 不会安装? Git配置教程 Node.js配置教程 下载Mizuki主题 将下载的文件解压到一个非中文…

作者头像 李华
网站建设 2026/4/17 7:42:21

Lingbot-Depth-Pretrain-ViTL-14 在 Android 应用中的深度感知集成实战

Lingbot-Depth-Pretrain-ViTL-14 在 Android 应用中的深度感知集成实战 你有没有想过,让手机摄像头不仅能“看见”世界,还能“理解”世界的远近深浅?比如,拍照时自动虚化背景,或者玩AR游戏时,虚拟物体能稳…

作者头像 李华
网站建设 2026/4/17 7:40:30

**FPGA开发新范式:基于Verilog的流水线化图像边缘检测加速器设计与实现**在现代嵌入式系统中,图像处

FPGA开发新范式:基于Verilog的流水线化图像边缘检测加速器设计与实现 在现代嵌入式系统中,图像处理任务对实时性和能效的要求越来越高。传统CPU/GPU方案在处理高帧率视频流时往往受限于功耗和延迟瓶颈,而FPGA凭借其并行计算能力与可重构特性&…

作者头像 李华
网站建设 2026/4/17 7:39:43

Grafana告警邮件模板定制实战:从基础配置到高级优化

1. Grafana告警邮件模板基础配置 第一次接触Grafana告警邮件模板时,我被它强大的自定义能力所震撼。记得去年给客户部署监控系统时,他们提出一个很实际的需求:告警邮件必须包含服务器名称、具体告警事项和当前指标值这三要素。当时用默认模板…

作者头像 李华
网站建设 2026/4/17 7:39:37

Qwen3-ASR-1.7B快速入门:从部署到识别,10分钟搞定音频转文字

Qwen3-ASR-1.7B快速入门:从部署到识别,10分钟搞定音频转文字 1. 准备工作:了解你的语音识别助手 Qwen3-ASR-1.7B是阿里通义千问推出的多语言语音识别模型,它能将人类的语音音频实时、准确地转换为文本。这个1.7B参数量的模型在精…

作者头像 李华