Bonus entropi dan PPO

Deep Reinforcement Learning dengan Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Bonus entropi

 

 

  • Algoritme policy gradient bisa runtuh jadi kebijakan deterministik
  • Solusi: tambahkan bonus entropi
  • Entropi mengukur ketidakpastian suatu distribusi!

Sebuah rover Mars tidak bisa maju karena ada batu besar tepat di depannya.

Deep Reinforcement Learning dengan Python

Entropi distribusi probabilitas

 

Entropi peubah acak diskret X, diukur dalam bit, didefinisikan sebagai H(X) = - jumlah atas nilai x dari p(x) log_2 p(x)

  • Jika $\ln$ alih-alih $\log_2$: hasil diukur dalam nat.
  • $1\ nat = \frac{1}{\ln 2}\ bit \approx 1{,}44\ bit$

Diagram batang pertama dari tiga, menampilkan kebijakan stokastik atas 4 aksi. Probabilitas tiap aksi 0,25; entropi 2 bit.

Diagram batang kedua: probabilitas terbagi rata pada dua aksi, dan 0 di lainnya; entropi 1 bit.

Diagram batang ketiga: semua probabilitas pada satu aksi dengan probabilitas 1; entropi 0 bit.

Deep Reinforcement Learning dengan Python

Mengimplementasikan bonus entropi

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)
  • Rugi actor: actor_loss -= c_entropy * entropy
  • Catatan: Categorical.entropy() dalam nat; bagi dengan math.log(2) untuk bit
Deep Reinforcement Learning dengan Python

Loop pelatihan PPO

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
Deep Reinforcement Learning dengan Python

Menuju PPO dengan pembaruan batch

 

  • Memperbarui di tiap langkah: tidak memanfaatkan penuh objektif PPO
  • Di tiap langkah, $\theta$ sebenarnya sama dengan $\theta_{old}$.
  • Implementasi PPO penuh memisahkan:
    • Pembaruan parameter (minibatch)
    • Pembaruan kebijakan (rollout)
Deep Reinforcement Learning dengan Python

Ayo berlatih!

Deep Reinforcement Learning dengan Python

Preparing Video For Download...