Entropiebonus en PPO

Deep Reinforcement Learning in Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Entropiebonus

 

 

  • Policy-gradientalgoritmen kunnen instorten tot deterministische policies
  • Oplossing: voeg entropiebonus toe
  • Entropie meet de onzekerheid van een verdeling!

Een Marsrover die niet verder kan door een enorme rots direct ervoor.

Deep Reinforcement Learning in Python

Entropie van een kansverdeling

 

De entropie van een discrete toevalsvariabele X, gemeten in bits, is gedefinieerd als H(X) = - som over waarden x van p(x) log_2 p(x)

  • Als $\ln$ i.p.v. $\log_2$: resultaat gemeten in nats.
  • $1\ nat = \frac{1}{\ln 2}\ bit \approx 1{,}44\ bit$

Eerste van drie staafdiagrammen met verschillende stochastische policies over 4 acties. De kans op elke actie is 0,25; entropie 2 bits.

Tweede van drie staafdiagrammen. De kans ligt gelijk verdeeld op twee acties en 0 elders; entropie 1 bit.

Derde van drie staafdiagrammen. Alle kans op één actie met kans 1; entropie 0 bit.

Deep Reinforcement Learning in Python

De entropiebonus implementeren

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)
  • Actor loss: actor_loss -= c_entropy * entropy
  • Let op: Categorical.entropy() is in nats; deel door math.log(2) voor bits
Deep Reinforcement Learning in Python

PPO-trainingslus

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 in Python

Naar PPO met batch-updates

 

  • Updaten na elke stap: benut PPO-doelfunctie niet volledig
  • Bij elke stap valt $\theta$ feitelijk samen met $\theta_{old}$.
  • Volledige PPO-implementaties scheiden:
    • Parameterupdates (minibatches)
    • Policy-updates (rollouts)
Deep Reinforcement Learning in Python

Laten we oefenen!

Deep Reinforcement Learning in Python

Preparing Video For Download...