Bonus de entropie și PPO

Deep Reinforcement Learning în Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Bonus de entropie

 

 

  • Algoritmii de gradient de politică pot converge spre politici deterministe
  • Soluție: adăugarea unui bonus de entropie
  • Entropia măsoară incertitudinea unei distribuții!

Un rover marțian blocat de o stâncă mare aflată imediat în fața sa.

Deep Reinforcement Learning în Python

Entropia unei distribuții de probabilitate

 

Entropia unei variabile aleatoare discrete X, măsurată în biți, este definită ca H(X) = - suma după valorile x a lui p(x) log_2 p(x)

  • Dacă se folosește $\ln$ în loc de $\log_2$: rezultatul se măsoară în $nats$.
  • $1\ nat = \frac{1}{\ln 2}\ bit \approx 1.44 \ bit$

Prima din trei diagrame cu bare reprezentând politici stocastice diferite peste 4 acțiuni. Probabilitatea fiecărei acțiuni este 0,25, corespunzând unei entropii de 2 biți.

A doua din trei diagrame cu bare reprezentând politici stocastice diferite peste 4 acțiuni. Probabilitatea este concentrată egal pe două acțiuni, 0 în rest; entropie de 1 bit.

A treia din trei diagrame cu bare reprezentând politici stocastice diferite peste 4 acțiuni. Toată probabilitatea este concentrată pe o singură acțiune cu probabilitatea 1; entropie 0 biți.

Deep Reinforcement Learning în Python

Implementarea bonusului de entropie

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)
  • Pierderea actorului: actor_loss -= c_entropy * entropy
  • Notă: Categorical.entropy() este în nats; împărțiți la math.log(2) pentru biți
Deep Reinforcement Learning în Python

Bucla de antrenare 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 în Python

Spre PPO cu actualizări pe loturi

 

  • Actualizare la fiecare pas: funcția obiectiv PPO nu este valorificată complet
  • La fiecare pas, $\theta$ coincide cu $\theta_{old}$.
  • Implementările complete PPO decuplează:
    • Actualizările parametrilor (mini-loturi)
    • Actualizările politicii (rollout-uri)
Deep Reinforcement Learning în Python

Să exersăm!

Deep Reinforcement Learning în Python

Preparing Video For Download...