Entropi bonusu ve PPO

Python ile Deep Reinforcement Learning

Timothée Carayol

Principal Machine Learning Engineer, Komment

Entropi bonusu

 

 

  • Policy gradient yöntemleri deterministik politikalara çökebilir
  • Çözüm: entropi bonusu ekleyin
  • Entropi, bir dağılımdaki belirsizliği ölçer!

Önünde duran büyük bir kaya nedeniyle ilerleyemeyen bir Mars gezgini.

Python ile Deep Reinforcement Learning

Olasılık dağılımının entropisi

 

Kesikli bir rasgele değişken X’in entropisi, bit cinsinden, H(X) = - p(x) log_2 p(x)’lerin x üzerindeki toplamıdır

  • $\log_2$ yerine $\ln$ kullanılırsa: sonuç birimi nat olur.
  • $1\ nat = \frac{1}{\ln 2}\ bit \approx 1.44 \ bit$

Dört eylem üzerinde stokastik bir politikanın ilk çubuk grafiği. Her eylem olasılığı 0,25; entropi 2 bit.

İkinci çubuk grafiği: Olasılık iki eylemde eşit, diğerlerinde 0; entropi 1 bit.

Üçüncü çubuk grafiği: Olasılık tek bir eylemde 1; entropi 0 bit.

Python ile Deep Reinforcement Learning

Entropi bonusunu uygulama

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)

# Obtain the entropy of the policy entropy = action_dist.entropy()
return (action.item(), log_prob.reshape(1), entropy)
  • Aktör kaybı: actor_loss -= c_entropy * entropy
  • Not: Categorical.entropy() nat cinsindendir; bit için math.log(2) ile bölün
Python ile Deep Reinforcement Learning

PPO eğitim döngüsü

for episode in range(10):
  state, info = env.reset()
  done = False
  while not done:
    action, action_log_prob, entropy = 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, action_log_prob,
                                               reward, state, next_state, done)
    actor_loss -= c_entropy * entropy
    actor_optimizer.zero_grad(); actor_loss.backward(); actor_optimizer.step()
    critic_optimizer.zero_grad(); critic_loss.backward(); critic_optimizer.step()
    state = next_state
Python ile Deep Reinforcement Learning

Batch güncellemeleriyle PPO’ya geçiş

 

  • Her adımda güncelleme: PPO amaç fonksiyonundan tam yararlanamamak
  • Her adımda $\theta$ aslında $\theta_{old}$ ile çakışır.
  • Tam PPO uygulamaları ayrıştırır:
    • Parametre güncellemeleri (minibatch'ler)
    • Politika güncellemeleri (rollout'lar)
Python ile Deep Reinforcement Learning

Ayo berlatih!

Python ile Deep Reinforcement Learning

Preparing Video For Download...