Politika gradyanı ve REINFORCE

Python ile Deep Reinforcement Learning

Timothée Carayol

Principal Machine Learning Engineer, Komment

DQN ile farklar

  • REINFORCE: Monte Carlo, Temporal Difference değil
    • Güncelleme her adımda değil, bölüm sonunda
    • İstenirse birkaç bölümden sonra güncellenebilir
  • Değer fonksiyonu yok
  • Hedef ağ yok
  • Epsilon-greediness yok
  • Deneyim tekrar oynatma yok

Eylem değer fonksiyonu Q, deneyim tekrar oynatma, epsilon-greediness ve sabit q-hedeflerini temsil eden görseller üst üste yığılmış ve üzerleri çizilmiş

Python ile Deep Reinforcement Learning

REINFORCE eğitim döngüsü yapısı

 

for episode in range(num_episodes):

# 1. Bölümü başlat
while not done:
# 2. Eylem seç
# 3. Eylemi oyna, sonraki durum ve ödülü al
# 4. (İskontolu) ödülü getirime ekle
# 5. Durumu güncelle
# 6. Kayıp hesapla
# 7. Politika ağını gradyan inişiyle güncelle
Python ile Deep Reinforcement Learning

Eylem seçimi

 

from torch.distributions import Categorical

def select_action(policy_network, state):
  action_probs = policy_network(state)

action_dist = Categorical(action_probs)
action = action_dist.sample()
log_prob = action_dist.log_prob(action)
return action.item(), log_prob.reshape(1)
action, log_prob = select_action( policy_network, state)

 

  • Olasılıkları ağdan al
  • Bir eylem örnekle
  • Eylem ve ilgili log-olasılığı döndür

 

Örneklenen eylem indeksi: 1
Örneklenen eylemin log olasılığı: -1.38
Python ile Deep Reinforcement Learning

Kayıp hesaplama

 

Politika gradyanı teoremine dönelim:

Politika gradyanı teoremi: J(pi_theta)'nın theta'ya göre gradyanı, pi_theta'yı izleyen yörüngeler üzerindeki beklentiye eşittir; bölüm getirimi ile yörüngedeki tüm eylemler için log eylem olasılıklarının gradyanlarının toplamının çarpımı.

Bir bölüm için REINFORCE kaybı: L(theta), bölüm getiriminin eksi işaretiyle, eylem log olasılıkları toplamının çarpımına eşittir.

Python'da:

  • $R_{\tau}$, episode_return
  • $\log\pi_\theta(a_t|s_t)$ vektörü, episode_log_probs
loss = -episode_return * episode_log_probs.sum()
Python ile Deep Reinforcement Learning

REINFORCE eğitim döngüsü

for episode in range(50):
  state, info = env.reset(); done = False; step = 0;
  episode_log_probs = torch.tensor([])

R = 0
while not done: step += 1 action, log_prob = select_action(policy_network, state)
next_state, reward, terminated, truncated, _ = env.step(action) done = terminated or truncated
R += (gamma ** step) * reward
episode_log_probs = torch.cat((episode_log_probs, log_prob))
state = next_state
loss = - R * episode_log_probs.sum()
optimizer.zero_grad(); loss.backward(); optimizer.step()
Python ile Deep Reinforcement Learning

Haydi pratik yapalım!

Python ile Deep Reinforcement Learning

Preparing Video For Download...