Entropibonus och PPO

Djup förstärkningsinlärning i Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Entropibonus

 

 

  • Policygradientalgoritmer kan kollapsa till deterministiska policyer
  • Lösning: lägg till entropibonus
  • Entropi mäter osäkerheten i en fördelning!

En Mars-rover som inte kan ta sig fram på grund av en stor sten direkt framför sig.

Djup förstärkningsinlärning i Python

Entropi för en sannolikhetsfördelning

 

Entropin för en diskret slumpvariabel X, mätt i bitar, definieras som H(X) = - summan över värden x av p(x) log_2 p(x)

  • Om $\ln$ används i stället för $\log_2$: resultatet mäts i $nats$.
  • $1\ nat = \frac{1}{\ln 2}\ bit \approx 1.44 \ bit$

Första av tre stapeldiagram som visar olika stokastiska policyer över 4 handlingar. Sannolikheten för varje handling är 0,25, vilket ger en entropi på 2 bitar.

Andra av tre stapeldiagram som visar olika stokastiska policyer över 4 handlingar. Sannolikheten är jämnt fördelad på två handlingar och 0 i övrigt; entropi 1 bit.

Tredje av tre stapeldiagram som visar olika stokastiska policyer över 4 handlingar. All sannolikhet är koncentrerad till en enda handling med sannolikhet 1; entropi 0 bitar.

Djup förstärkningsinlärning i Python

Implementera entropibonusen

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örförlust: actor_loss -= c_entropy * entropy
  • Obs: Categorical.entropy() är i nats; dividera med math.log(2) för bitar
Djup förstärkningsinlärning i Python

PPO-träningsloop

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
Djup förstärkningsinlärning i Python

Mot PPO med batchuppdateringar

 

  • Uppdatering vid varje steg utnyttjar inte PPO-målfunktionen fullt ut
  • Vid varje steg sammanfaller $\theta$ med $\theta_{old}$.
  • Fullständiga PPO-implementationer skiljer på:
    • Parameteruppdateringar (minibatcher)
    • Policyuppdateringar (rollouts)
Djup förstärkningsinlärning i Python

Nu kör vi en övning!

Djup förstärkningsinlärning i Python

Preparing Video For Download...