Entropický bonus a PPO

Deep Reinforcement Learning v Pythonu

Timothée Carayol

Principal Machine Learning Engineer, Komment

Entropický bonus

 

 

  • Algoritmy policy gradient mohou konvergovat k deterministickým politikám
  • Řešení: přidat entropický bonus
  • Entropie měří neurčitost rozdělení!

Rover na Marsu, který nemůže pokračovat, protože mu bezprostředně v cestě leží velký kámen.

Deep Reinforcement Learning v Pythonu

Entropie pravděpodobnostního rozdělení

 

Entropie diskrétní náhodné proměnné X v bitech je definována jako H(X) = - součet přes hodnoty x z p(x) log_2 p(x)

  • Při použití $\ln$ místo $\log_2$: výsledek v $nats$.
  • $1\ nat = \frac{1}{\ln 2}\ bit \approx 1.44 \ bit$

První ze tří sloupcových grafů zobrazujících různé stochastické politiky pro 4 akce. Pravděpodobnost každé akce je 0,25, entropie je 2 bity.

Druhý ze tří sloupcových grafů zobrazujících různé stochastické politiky pro 4 akce. Pravděpodobnost je rovnoměrně rozdělena na dvě akce, jinde je 0; entropie je 1 bit.

Třetí ze tří sloupcových grafů zobrazujících různé stochastické politiky pro 4 akce. Veškerá pravděpodobnost je soustředěna na jednu akci s pravděpodobností 1; entropie je 0 bitů.

Deep Reinforcement Learning v Pythonu

Implementace entropického bonusu

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)
  • Ztrátová funkce aktéra: actor_loss -= c_entropy * entropy
  • Poznámka: Categorical.entropy() je v nats; pro bity vydělte hodnotou math.log(2)
Deep Reinforcement Learning v Pythonu

Trénovací smyčka 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 v Pythonu

PPO s dávkovými aktualizacemi

 

  • Aktualizace v každém kroku: nevyužívá plně účelovou funkci PPO
  • V každém kroku se $\theta$ shoduje s $\theta_{old}$.
  • Plné implementace PPO oddělují:
    • Aktualizace parametrů (minidávky)
    • Aktualizace politiky (rollouts)
Deep Reinforcement Learning v Pythonu

Pojďme si procvičit!

Deep Reinforcement Learning v Pythonu

Preparing Video For Download...