增强学习(RL)解决了复杂的问题。 RL代理通过从人类反馈(RLHF)学习的强化学习,根据人类的投入来调整其反应。尽管建立了像Keras和Tensorflow这样的Python框架,但Pytorch和Pytorch Lightning主导了新项目。 开源库Torchrl,用Pytorch简化了RL的开发。该教程演示了Torchrl设置,核心组件和构建基本RL代理。我们将探讨诸如近端策略优化(PPO)等预构建算法以及必需的日志记录和监视技术。
>设置Torchrl
在安装Torchrl之前,请确保您有:
体育馆:进口RL环境。 使用0.29.1版本(截至2025年1月,后来的版本与Torchrl具有兼容性问题 - 请参见相关的GIT讨论页面)。
>使用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>
>预处理/后处理(归一化,缩放,格式化)很容易应用。
>创建体育馆环境:
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代理。
导入必要的软件包:
!pip install torchrl
我们将使用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>
定义一个简单的神经网络策略:
env = GymEnv("CartPole-v1")
创建一个数据收集器并重播缓冲区:
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"))
>添加评估和记录到训练循环(简化):
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实现。)
探索预构建的算法
定义超参数:
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进行深度加固学习的详细内容。更多信息请关注PHP中文网其他相关文章!