首页 >科技周边 >人工智能 >开始使用Torchrl进行深度加固学习

开始使用Torchrl进行深度加固学习

Joseph Gordon-Levitt
Joseph Gordon-Levitt原创
2025-03-01 09:43:09428浏览

Getting Started with TorchRL for Deep Reinforcement Learning

从自动驾驶汽车到复杂的语言模型,

增强学习(RL)解决了复杂的问题。 RL代理通过从人类反馈(RLHF)学习的强化学习,根据人类的投入来调整其反应。尽管建立了像Keras和Tensorflow这样的Python框架,但Pytorch和Pytorch Lightning主导了新项目。 开源库Torchrl,用Pytorch简化了RL的开发。该教程演示了Torchrl设置,核心组件和构建基本RL代理。我们将探讨诸如近端策略优化(PPO)等预构建算法以及必需的日志记录和监视技术。

>

设置Torchrl

本节指导您安装和使用Torchrl。

>先决条件

在安装Torchrl之前,请确保您有:

> pytorch:torchrl的基础。

体育馆:进口RL环境。 使用0.29.1版本(截至2025年1月,后来的版本与Torchrl具有兼容性问题 - 请参见相关的GIT讨论页面)。
  • > pygame:用于模拟类似游戏的RL环境(例如Cartpole)。
  • 张紧:提供一个张量容器以进行有效的张量操作。
  • >安装先决条件:
  • >安装Torchrl

>使用PIP安装Torchrl。 建议个人计算机或服务器为CONDA环境。

!pip install torch tensordict gymnasium==0.29.1 pygame

验证

>通过在python shell或笔记本中导入

来测试安装。使用
!pip install torchrl
来验证环境兼容性(例如,cartpole):>

成功的安装显示:

torchrl check_env_specs()键Torchrl组件

import torchrl
from torchrl.envs import GymEnv
from torchrl.envs.utils import check_env_specs

check_env_specs(GymEnv("CartPole-v1"))
在创建代理之前,让我们检查Torchrl的核心元素。>

环境

Torchrl为各种环境提供一致的API,将特定于环境的功能包装到标准包装器中。 这简化了交互:
<code>[torchrl][INFO] check_env_specs succeeded!</code>

> torchrl将状态,动作和奖励转换为pytorch张量。

>预处理/后处理(归一化,缩放,格式化)很容易应用。

>使用

>创建体育馆环境:

  • 变换
  • 使用
  • >
使用附加组件(例如,步骤计数器)增强环境

GymEnv通过

实现归一化:
env = GymEnv("CartPole-v1")
>

使用

>。 TransformedEnv>代理和政策

from torchrl.envs import GymEnv, StepCounter, TransformedEnv
env = TransformedEnv(GymEnv("CartPole-v1"), StepCounter())
>代理使用策略根据环境状态选择操作,旨在最大化累积奖励。

使用ObservationNorm创建一个简单的随机策略:

!pip install torch tensordict gymnasium==0.29.1 pygame

构建您的第一个RL代理

本节演示了构建简单的RL代理。

导入必要的软件包:

!pip install torchrl

>步骤1:定义环境

我们将使用Cartpole环境:

import torchrl
from torchrl.envs import GymEnv
from torchrl.envs.utils import check_env_specs

check_env_specs(GymEnv("CartPole-v1"))

定义超参数:

<code>[torchrl][INFO] check_env_specs succeeded!</code>

步骤2:创建策略

定义一个简单的神经网络策略:

env = GymEnv("CartPole-v1")

>步骤3:训练代理

创建一个数据收集器并重播缓冲区:

from torchrl.envs import GymEnv, StepCounter, TransformedEnv
env = TransformedEnv(GymEnv("CartPole-v1"), StepCounter())

定义训练模块:

from torchrl.envs import Compose
base_env = GymEnv('CartPole-v1', device=device) 
env = TransformedEnv( 
    base_env, 
    Compose(
        ObservationNorm(in_keys=["observation"]), 
        StepCounter()
    )
)

实施训练循环(简化为简短):

import torchrl
import torch
from tensordict import TensorDict
from torchrl.data.tensor_specs import Bounded

action_spec = Bounded(-torch.ones(1), torch.ones(1))
actor = torchrl.envs.utils.RandomPolicy(action_spec=action_spec)
td = actor(TensorDict({}, batch_size=[]))
print(td.get("action"))

步骤4:评估代理

>添加评估和记录到训练循环(简化):

import time
import matplotlib.pyplot as plt
from torchrl.envs import GymEnv, StepCounter, TransformedEnv
from tensordict.nn import TensorDictModule as TensorDict, TensorDictSequential as Seq
from torchrl.modules import EGreedyModule, MLP, QValueModule
from torchrl.objectives import DQNLoss, SoftUpdate
from torchrl.collectors import SyncDataCollector
from torchrl.data import LazyTensorStorage, ReplayBuffer
from torch.optim import Adam
from torchrl._utils import logger as torchrl_logger
打印训练时间和情节结果:

env = TransformedEnv(GymEnv("CartPole-v1"), StepCounter())
torch.manual_seed(0)
env.set_seed(0)
(已参考的Datalab工作簿中可用完整的DQN实现。)>

探索预构建的算法

torchrl提供预构建算法(DQN,DDPG,SAC,PPO等)。 本节使用ppo。

导入必要的模块:

定义超参数:

INIT_RAND_STEPS = 5000
FRAMES_PER_BATCH = 100
OPTIM_STEPS = 10
EPS_0 = 0.5
BUFFER_LEN = 100_000
ALPHA = 0.05
TARGET_UPDATE_EPS = 0.95
REPLAY_BUFFER_SAMPLE = 128
LOG_EVERY = 1000
MLP_SIZE = 64

(剩余的PPO实现,包括网络定义,数据收集,损耗功能,优化和培训循环,遵循与原始响应相似的结构,但此处省略了。

可视化和调试
value_mlp = MLP(out_features=env.action_spec.shape[-1], num_cells=[MLP_SIZE, MLP_SIZE])
value_net = TensorDict(value_mlp, in_keys=["observation"], out_keys=["action_value"])
policy = Seq(value_net, QValueModule(spec=env.action_spec))

exploration_module = EGreedyModule(
    env.action_spec, annealing_num_steps=BUFFER_LEN, eps_init=EPS_0
)
policy_explore = Seq(policy, exploration_module)

>使用张板的监视训练进度:

>可视化:

collector = SyncDataCollector(
    env,
    policy_explore,
    frames_per_batch=FRAMES_PER_BATCH,
    total_frames=-1,
    init_random_frames=INIT_RAND_STEPS,
)
rb = ReplayBuffer(storage=LazyTensorStorage(BUFFER_LEN))
调试涉及检查环境规格:

tensorboard --logdir="training_logs"

>样本观测和动作:

loss = DQNLoss(value_network=policy, action_space=env.action_spec, delay_value=True)
optim = Adam(loss.parameters(), lr=ALPHA)
updater = SoftUpdate(loss, eps=TARGET_UPDATE_EPS)
>通过呈现视频来可视化代理性能(需要

>和

):
total_count = 0
total_episodes = 0
t0 = time.time()
success_steps = []
for i, data in enumerate(collector):
    rb.extend(data)
    # ... (training steps, similar to the original response) ...
>

torchvision最佳实践av

    # ... (training steps) ...
    if total_count > 0 and total_count % LOG_EVERY == 0:
        torchrl_logger.info(f"Successful steps: {max_length}, episodes: {total_episodes}")
    if max_length > 475:
        print("TRAINING COMPLETE")
        break
从简单的环境开始(例如cartpole)。

>

>实验超参数(网格搜索,随机搜索,自动化工具)。
  • 尽可能利用预构建的算法。
  • >
  • 结论
  • 本教程提供了对Torchrl的全面介绍,通过DQN和PPO示例展示了其功能。 尝试不同的环境和算法以进一步提高您的RL技能。 引用的资源提供了额外的学习机会。

以上是开始使用Torchrl进行深度加固学习的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn