Avantajlı Aktör-Kritik

Python ile Deep Reinforcement Learning

Timothée Carayol

Principal Machine Learning Engineer, Komment

Neden aktör-kritik?

 

  • REINFORCE sınırlamaları:

    • Yüksek varyans
    • Düşük örnek verimliliği
  • Aktör-Kritik yöntemleri bir kritik ağ ekler, Zaman Farkı (TD) öğrenmesini mümkün kılar

‘ajan’ etiketli büyük bir dikdörtgen; içinde ‘aktör’ ve ‘kritik’ etiketli iki küçük dikdörtgen.

Python ile Deep Reinforcement Learning

Aktör-Kritik yöntemlerinin sezgisi

Bir masanın etrafında konuşan öğrenciler; etrafa dağılmış kitaplar ve kalemler.

 

  • Aktör ağı:

    • Karar verir
    • Değerlendiremez
  • Kritik ağ:

    • Her adımda aktöre geri bildirim sağlar
Python ile Deep Reinforcement Learning

Kritik ağı

 

  • Kritik, durum değer fonksiyonunu yaklaştırır

Kritik ağ temsili: girdi durum, çıktı Değer fonksiyonu; dolayısıyla tek çıktı düğümü vardır.

  • Eylem $a_t$’yi avantaj veya TD hatasına göre değerlendirir

 

class Critic(nn.Module):
    def __init__(self, state_size):
        super(Critic, self).__init__()
        self.fc1 = nn.Linear(state_size, 64)
        self.fc2 = nn.Linear(64, 1)

def forward(self, state): x = torch.relu(self.fc1(torch.tensor(state))) value = self.fc2(x) return value
critic_network = Critic(8)
Python ile Deep Reinforcement Learning

Aktör-Kritik dinamikleri

 

  • Her adımda:
    • Aktör eylem seçer (REINFORCE’taki politika ağı ile aynı)

Üstte: 'ajan' etiketli büyük bir dikdörtgen; içinde 'aktör' ve 'kritik' etiketli iki küçük dikdörtgen. Altta: ayrı bir 'ortam' dikdörtgeni.

Python ile Deep Reinforcement Learning

Aktör-Kritik dinamikleri

 

  • Her adımda:
    • Aktör eylem seçer (REINFORCE’taki politika ağı ile aynı)
    • Kritik ödül ve durumu gözlemler

‘Eylem’ etiketli kırmızı bir ok aktörden ortama gider.

Python ile Deep Reinforcement Learning

Aktör-Kritik dinamikleri

 

  • Her adımda:
    • Aktör eylem seçer (REINFORCE’taki politika ağı ile aynı)
    • Kritik ödül ve durumu gözlemler
    • Kritik TD hatasını hesaplar
    • Aktör ve Kritik, ağırlıkları güncellemek için TD hatasını kullanır

‘Durum’ ve ‘Ödül’ etiketli iki kırmızı ok, ortamdan Kritiğe gider.

Python ile Deep Reinforcement Learning

Aktör-Kritik dinamikleri

 

  • Her adımda:
    • Aktör eylem seçer (REINFORCE’taki politika ağı ile aynı)
    • Kritik ödül ve durumu gözlemler
    • Kritik TD hatasını hesaplar
    • Aktör ve Kritik, ağırlıkları güncellemek için TD hatasını kullanır
    • Güncellenmiş Aktör yeni durumu gözlemler

‘TD hatası’ etiketli bir ok Kritikten Aktöre gider.

Python ile Deep Reinforcement Learning

Aktör-Kritik dinamikleri

 

  • Her adımda:
    • Aktör eylem seçer (REINFORCE’taki politika ağı ile aynı)
    • Kritik ödül ve durumu gözlemler
    • Kritik TD hatasını hesaplar
    • Aktör ve Kritik, ağırlıkları güncellemek için TD hatasını kullanır
    • Güncellenmiş Aktör yeni durumu gözlemler
  • ... başa dönülür

Durum oku artık Aktöre de gider.

Python ile Deep Reinforcement Learning

A2C kayıpları

 

Kritik

Kritik kayıp fonksiyonu. Kritik için kare TD hatasını kullanın: Lc(theta c) = ((r_t + gamma * V theta c (s t + 1)) - V theta c) kare

  • Kritik kaybı: kare TD hatası

 

Aktör

Aktör kayıp fonksiyonu. Her t adımında aktör için şu kaybı kullanabiliriz: L(theta) eşittir eylem log olasılığı ile TD hatası veya avantajın çarpımının negatifi.

  • TD hatası, kritiğin değerlendirmesini yansıtır
  • TD hatası pozitif olan eylemlerin olasılığını artırın
Python ile Deep Reinforcement Learning

Kayıpların hesaplanması

 

def calculate_losses(critic_network, action_log_prob, 
                     reward, state, next_state, done):

# Critic provides the state value estimates value = critic_network(state)
next_value = critic_network(next_state)
td_target = (reward + gamma * next_value * (1-done))
td_error = td_target - value
# Apply formulas for actor and critic losses actor_loss = -action_log_prob * td_error.detach()
critic_loss = td_error ** 2
return actor_loss, critic_loss

 

 

  • TD Hatasını hesaplayın
  • Aktör kaybını hesaplayın
    • Gradyanların kritik ağırlıklara gitmesini durdurmak için .detach() kullanın
  • Kritik kaybını hesaplayın
Python ile Deep Reinforcement Learning

Aktör-Kritik eğitim döngüsü

for episode in range(10):
  state, info = env.reset()
  done = False
  while not done:

# Select action action, action_log_prob = select_action(actor, state)
next_state, reward, terminated, truncated, _ = env.step(action) done = terminated or truncated
# Calculate losses actor_loss, critic_loss = calculate_losses(critic, action_log_prob, reward, state, next_state, done)
# Update actor actor_optimizer.zero_grad(); actor_loss.backward(); actor_optimizer.step()
# Update critic critic_optimizer.zero_grad(); critic_loss.backward(); critic_optimizer.step()
state = next_state
Python ile Deep Reinforcement Learning

Vamos praticar!

Python ile Deep Reinforcement Learning

Preparing Video For Download...