Rumah > Peranti teknologi > AI > Bermula dengan Torchrl untuk pembelajaran tetulang yang mendalam

Bermula dengan Torchrl untuk pembelajaran tetulang yang mendalam

Joseph Gordon-Levitt
Lepaskan: 2025-03-01 09:43:09
asal
424 orang telah melayarinya

Getting Started with TorchRL for Deep Reinforcement Learning

Pembelajaran Penguatkuasaan (RL) menangani masalah yang kompleks, dari kenderaan autonomi ke model bahasa yang canggih. Ejen RL belajar melalui pembelajaran tetulang dari maklum balas manusia (RLHF), menyesuaikan respons mereka berdasarkan input manusia. Walaupun kerangka Python seperti Keras dan Tensorflow ditubuhkan, kilat pytorch dan pytorch menguasai projek -projek baru.

Torchrl, perpustakaan sumber terbuka, memudahkan pembangunan RL dengan pytorch. Tutorial ini menunjukkan persediaan TorchRL, komponen teras, dan membina ejen RL asas. Kami akan meneroka algoritma pra-dibina seperti pengoptimuman dasar proksimal (PPO), dan teknik pemantauan dan pemantauan penting.

Menyediakan Torchrl

Bahagian ini membimbing anda melalui memasang dan menggunakan Torchrl.

Prasyarat

Sebelum memasang TorchRL, pastikan anda mempunyai:

    Pytorch: Yayasan Torchrl.
  • Gimnasium: Untuk mengimport persekitaran RL. Gunakan versi 0.29.1 (sehingga Januari 2025, versi kemudian mempunyai masalah keserasian dengan TorchRL - lihat halaman Perbincangan Git yang berkaitan).
  • pygame: untuk mensimulasikan persekitaran RL seperti permainan (mis., Cartpole).
  • Tensordict: Menyediakan bekas tensor untuk manipulasi tensor yang cekap.
Pasang prasyarat:

!pip install torch tensordict gymnasium==0.29.1 pygame
Salin selepas log masuk
Salin selepas log masuk
Memasang Torchrl

Pasang TorchRL menggunakan PIP. Persekitaran Conda disyorkan untuk komputer atau pelayan peribadi.

!pip install torchrl
Salin selepas log masuk
Salin selepas log masuk
Pengesahan

Uji pemasangan anda dengan mengimport

dalam shell python atau notebook. Gunakan torchrl untuk mengesahkan keserasian persekitaran (mis., Cartpole): check_env_specs()

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

check_env_specs(GymEnv("CartPole-v1"))
Salin selepas log masuk
Salin selepas log masuk
Pemasangan pemasangan yang berjaya:

<code>[torchrl][INFO] check_env_specs succeeded!</code>
Salin selepas log masuk
Salin selepas log masuk
Komponen TorchRL Utama

Sebelum penciptaan ejen, mari kita periksa elemen teras Torchrl.

Persekitaran

TorchRL menyediakan API yang konsisten untuk pelbagai persekitaran, membungkus fungsi khusus persekitaran ke dalam pembungkus standard. Ini memudahkan interaksi:

    Torchrl menukarkan keadaan, tindakan, dan ganjaran ke dalam tensor pytorch.
  • preprocessing/postprocessing (normalisasi, skala, pemformatan) mudah digunakan.
Buat persekitaran gimnasium menggunakan

: GymEnv

env = GymEnv("CartPole-v1")
Salin selepas log masuk
Salin selepas log masuk
Transforms

Meningkatkan persekitaran dengan add-ons (mis., Kaunter langkah) menggunakan

: TransformedEnv

from torchrl.envs import GymEnv, StepCounter, TransformedEnv
env = TransformedEnv(GymEnv("CartPole-v1"), StepCounter())
Salin selepas log masuk
Salin selepas log masuk
normalisasi dicapai dengan

: ObservationNorm

from torchrl.envs import Compose
base_env = GymEnv('CartPole-v1', device=device) 
env = TransformedEnv( 
    base_env, 
    Compose(
        ObservationNorm(in_keys=["observation"]), 
        StepCounter()
    )
)
Salin selepas log masuk
Salin selepas log masuk
pelbagai transformasi digabungkan menggunakan

. Compose

Ejen dan Dasar

Ejen menggunakan dasar untuk memilih tindakan berdasarkan keadaan alam sekitar, yang bertujuan untuk memaksimumkan ganjaran kumulatif.

Dasar rawak mudah dibuat menggunakan

: RandomPolicy

!pip install torch tensordict gymnasium==0.29.1 pygame
Salin selepas log masuk
Salin selepas log masuk

membina ejen RL pertama anda

Bahagian ini menunjukkan membina ejen RL yang mudah. ​​

Import Pakej yang diperlukan:

!pip install torchrl
Salin selepas log masuk
Salin selepas log masuk

Langkah 1: Tentukan Alam Sekitar

Kami akan menggunakan persekitaran Cartpole:

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

check_env_specs(GymEnv("CartPole-v1"))
Salin selepas log masuk
Salin selepas log masuk

Tentukan hyperparameters:

<code>[torchrl][INFO] check_env_specs succeeded!</code>
Salin selepas log masuk
Salin selepas log masuk

Langkah 2: Buat dasar

Tentukan dasar rangkaian saraf yang mudah:

env = GymEnv("CartPole-v1")
Salin selepas log masuk
Salin selepas log masuk

Langkah 3: Melatih ejen

Buat pengumpul data dan penampan replay:

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

Tentukan modul latihan:

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

Melaksanakan gelung latihan (dipermudahkan untuk keringkasan):

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"))
Salin selepas log masuk

Langkah 4: Menilai ejen

Tambah penilaian dan pembalakan ke gelung latihan (dipermudahkan):

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
Salin selepas log masuk

Cetak masa latihan dan hasil plot:

env = TransformedEnv(GymEnv("CartPole-v1"), StepCounter())
torch.manual_seed(0)
env.set_seed(0)
Salin selepas log masuk

(pelaksanaan DQN lengkap boleh didapati dalam buku kerja Datalab yang dirujuk.)

Meneroka algoritma pra-dibina

TorchRL menawarkan algoritma pra-dibina (DQN, DDPG, SAC, PPO, dan lain-lain). Bahagian ini menunjukkan menggunakan PPO.

Import Modul yang diperlukan:

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
Salin selepas log masuk

Tentukan hyperparameters:

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)
Salin selepas log masuk

(baki pelaksanaan PPO, termasuk definisi rangkaian, pengumpulan data, fungsi kerugian, pengoptimuman, dan gelung latihan, mengikuti struktur yang sama dengan tindak balas asal tetapi ditinggalkan di sini untuk keringkasan. Rujuk kepada respons asal untuk kod lengkap.)

Menggambarkan dan menyahpepijat

Memantau kemajuan latihan menggunakan Tensorboard:

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))
Salin selepas log masuk

Visualisasikan dengan: tensorboard --logdir="training_logs"

Debugging melibatkan pemeriksaan spesifikasi persekitaran:

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)
Salin selepas log masuk

pemerhatian dan tindakan sampel:

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) ...
Salin selepas log masuk

memvisualisasikan prestasi ejen dengan memberikan video (memerlukan torchvision dan 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
Salin selepas log masuk

Amalan Terbaik

  • Mulakan dengan persekitaran yang mudah (seperti Cartpole).
  • Eksperimen dengan hiperparameter (carian grid, carian rawak, alat automatik).
  • memanfaatkan algoritma pra-bina apabila mungkin.

Kesimpulan

Tutorial ini memberikan pengenalan yang komprehensif kepada TorchRL, mempamerkan keupayaannya melalui contoh DQN dan PPO. Eksperimen dengan persekitaran dan algoritma yang berbeza untuk meningkatkan lagi kemahiran RL anda. Sumber yang dirujuk menyediakan peluang pembelajaran tambahan.

Atas ialah kandungan terperinci Bermula dengan Torchrl untuk pembelajaran tetulang yang mendalam. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan