Politika gradyanında yığın (batch) güncellemeleri

Python ile Deep Reinforcement Learning

Timothée Carayol

Principal Machine Learning Engineer, Komment

Adım adım ve yığın gradyan güncellemeleri

Bir bölümü temsil eden büyük bir kutu.

Python ile Deep Reinforcement Learning

Adım adım ve yığın gradyan güncellemeleri

Büyük kutu içinde adım 1’i temsil eden daha küçük bir kutu belirir. İçinde 'eylem seç' metni olan başka bir kutu.

Python ile Deep Reinforcement Learning

Adım adım ve yığın gradyan güncellemeleri

Adım 1 kutusunda, 'ortamı yinele' metni olan başka bir küçük kutu belirir

Python ile Deep Reinforcement Learning

Adım adım ve yığın gradyan güncellemeleri

Adım 1 kutusunun altında 'kayıp hesapla' ve 'gradyan inişi' etiketli başka bir kutu

Python ile Deep Reinforcement Learning

Adım adım ve yığın gradyan güncellemeleri

İkinci adım için aynı içerikte özdeş bir kutu çifti görünür

Python ile Deep Reinforcement Learning

Adım adım ve yığın gradyan güncellemeleri

Adım 3 ve adım 4 de görünür.

Python ile Deep Reinforcement Learning

A2C / PPO güncellemelerini yığınlama

Büyük bir bölüm kutusu; alanının yarısını kaplayan, 'yuvarlama 1' etiketli başka bir kutu; içinde 'adım 1' ve 'adım 2' etiketli iki boş kutu

Python ile Deep Reinforcement Learning

A2C / PPO güncellemelerini yığınlama

Adım 1 kutusunda 'eylem seç' ve 'ortamı yinele' etiketleri görünür.

Python ile Deep Reinforcement Learning

A2C / PPO güncellemelerini yığınlama

Adım 2 için de aynı.

Python ile Deep Reinforcement Learning

A2C / PPO güncellemelerini yığınlama

Adım 1 ve adım 2 kutularının altında tek bir 'kayıp (loss) hesapla' ve tek bir 'gradyan inişi' etiketi görünür.

Python ile Deep Reinforcement Learning

A2C / PPO güncellemelerini yığınlama

Bölüm alanının kalan yarısı, iki adımdan oluşan ve 'yuvarlama 2' etiketli aynı bir yuvarlama kutusuyla kaplanır.

Python ile Deep Reinforcement Learning

Yığın güncellemeleriyle A2C eğitim döngüsü

 

# Set rollout length
rollout_length = 10

# Initiate loss batches
actor_losses = torch.tensor([]) critic_losses = torch.tensor([])
  • Kayıp (loss) yığınlarını başlatın
  • Bölümler ve adımlar arasında her zamanki gibi yineleyin

 

for episode in range(10):
  state, info = env.reset()
  done = False
  while not done:
    action, action_log_prob = select_action(actor, 
                                            state)                
    next_state, reward, terminated, truncated, _ = (
                                   env.step(action))
    done = terminated or truncated    
    actor_loss, critic_loss = calculate_losses(
        critic, action_log_prob, 
        reward, state, next_state, done)
    ...
Python ile Deep Reinforcement Learning

Yığın güncellemeleriyle A2C eğitim döngüsü

  ...
  actor_losses = torch.cat((actor_losses, actor_loss))
  critic_losses = torch.cat((critic_losses, critic_loss))

# If rollout is full, update the networks if len(actor_losses) >= rollout_length:
actor_loss_batch = actor_losses.mean() critic_loss_batch = critic_losses.mean()
actor_optimizer.zero_grad() actor_loss_batch.backward() actor_optimizer.step() critic_optimizer.zero_grad() critic_loss_batch.backward() critic_optimizer.step()
actor_losses = torch.tensor([]) critic_losses = torch.tensor([])
state = next_state

 

  • Adım kaybını kayıp yığınlarına ekleyin
  • Yuvarlama dolduğunda:
    • Yığın ortalama kaybını .mean() ile alın
    • Gradyan inişi yapın
    • Kayıp yığınlarını yeniden başlatın
Python ile Deep Reinforcement Learning

Birden çok ajanla A2C / PPO

 

İki yatay şerit ajan 1 ve ajan 2’yi temsil eder. Her ajan, değişken uzunluklarda sırasıyla 4 ve 3 bölüm yaşar. Her bölüm içinde, önceki slaytlardaki gibi adım kutuları görünür. İki şeridin altında, her biri 8 adımlık bir aralığı kapsayan üç yuvarlama kutusu görünür. Her yuvarlama kutusunda 'kayıp hesapla' ve 'gradyan inişi' etiketleri vardır. Grafiğin üstünde bir açıklama: "yuvarlama uzunluğu: 8 adım; ajan sayısı: 2"

Python ile Deep Reinforcement Learning

Yuvarlamalar ve mini-yığınlar

Önceki slayttakiyle aynı iki ajan şeridi. Altlarında yine 3 yuvarlama kutusu var, ancak içerikleri değişti. Artık üstte 'karıştır (shuffle)' etiketli uzun bir kutu var. Onun altında, her biri 'mini-yığın' etiketli ve içinde 'kayıp hesapla' ile 'gradyan inişi' olan, boyuna 4’e bölünmüş kutular var. Üstteki açıklama: 'Yuvarlama uzunluğu: 8 adım; mini-yığın boyutu: 4 (2x2); ajan sayısı: 2'

Python ile Deep Reinforcement Learning

Birden çok dönemle PPO

Öncekine çok benzer bir çizim, ancak yuvarlama yığınları şimdi dikey olarak da 4 alana bölünmüş: en üstte 'karıştır', ikincide 'dönem 1' (epoch 1) etiketiyle boyuna yayılmış 4 mini-yığın, üçüncüde 'yeniden karıştır', en altta 'dönem 2' (epoch 2) ve yine 4 mini-yığın. Açıklama: 'Yuvarlama uzunluğu: 8 adım; mini-yığın boyutu: 4 (2x2); ajan sayısı: 2; dönem sayısı: 2'.

Python ile Deep Reinforcement Learning

Hadi pratik yapalım!

Python ile Deep Reinforcement Learning

Preparing Video For Download...