增強學習(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
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為各種環境提供一致的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)
探索預構建的算法
定義超參數:
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
以上是開始使用Torchrl進行深度加固學習的詳細內容。更多資訊請關注PHP中文網其他相關文章!