Dávkové aktualizace v policy gradient

Deep Reinforcement Learning v Pythonu

Timothée Carayol

Principal Machine Learning Engineer, Komment

Postupné vs. dávkové aktualizace gradientu

Velký rámeček představující epizodu.

Deep Reinforcement Learning v Pythonu

Postupné vs. dávkové aktualizace gradientu

Ve velkém rámečku se objeví menší rámeček představující krok 1. V něm je další rámeček s textem „výběr akce".

Deep Reinforcement Learning v Pythonu

Postupné vs. dávkové aktualizace gradientu

V rámečku kroku 1 se objeví další malý rámeček s textem „iterace prostředí"

Deep Reinforcement Learning v Pythonu

Postupné vs. dávkové aktualizace gradientu

Pod rámečkem kroku 1 se zobrazí další rámeček s popisky „výpočet ztráty" a „sestup gradientu"

Deep Reinforcement Learning v Pythonu

Postupné vs. dávkové aktualizace gradientu

Pro druhý krok se zobrazí identická dvojice rámečků se stejným obsahem

Deep Reinforcement Learning v Pythonu

Postupné vs. dávkové aktualizace gradientu

Zobrazí se také krok 3 a krok 4.

Deep Reinforcement Learning v Pythonu

Dávkování aktualizací A2C / PPO

Velký rámeček epizody; jeho polovinu zabírá rámeček označený „rollout 1" se dvěma prázdnými rámečky „krok 1" a „krok 2"

Deep Reinforcement Learning v Pythonu

Dávkování aktualizací A2C / PPO

V rámečku kroku 1 se zobrazují popisky „výběr akce" a „iterace prostředí".

Deep Reinforcement Learning v Pythonu

Dávkování aktualizací A2C / PPO

Totéž pro krok 2.

Deep Reinforcement Learning v Pythonu

Dávkování aktualizací A2C / PPO

Pod rámečky kroku 1 a kroku 2 se zobrazuje jeden popisek „výpočet ztráty" a jeden popisek „sestup gradientu".

Deep Reinforcement Learning v Pythonu

Dávkování aktualizací A2C / PPO

Zbývající polovina plochy epizody je nyní obsazena dalším identickým rámečkem rollout se dvěma kroky, označeným „rollout 2".

Deep Reinforcement Learning v Pythonu

The A2C training loop with batch updates

 

# Set rollout length
rollout_length = 10

# Initiate loss batches
actor_losses = torch.tensor([]) critic_losses = torch.tensor([])
  • Inicializace dávek ztrát
  • Iterace přes epizody a kroky jako obvykle

 

for episode in range(10):
  state, info = env.reset()
  done = False
  while not done:
    action, action_log_prob = 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, 
        reward, state, next_state, done)
    ...
Deep Reinforcement Learning v Pythonu

The A2C training loop with batch updates

  ...
  actor_losses = torch.cat((actor_losses, actor_loss))
  critic_losses = torch.cat((critic_losses, critic_loss))

# If rollout is full, update the networks if len(actor_losses) >= rollout_length:
actor_loss_batch = actor_losses.mean() critic_loss_batch = critic_losses.mean()
actor_optimizer.zero_grad() actor_loss_batch.backward() actor_optimizer.step() critic_optimizer.zero_grad() critic_loss_batch.backward() critic_optimizer.step()
actor_losses = torch.tensor([]) critic_losses = torch.tensor([])
state = next_state

 

  • Přidání ztráty kroku do dávek ztrát
  • Po zaplnění rollout:
    • Výpočet průměrné ztráty dávky pomocí .mean()
    • Provedení sestupu gradientu
    • Reinicializace dávek ztrát
Deep Reinforcement Learning v Pythonu

A2C / PPO s více agenty

 

Dva vodorovné pruhy představují agenta 1 a agenta 2. Každý agent prochází 4, resp. 3 epizodami různých délek. V každé epizodě jsou viditelné rámečky kroků. Pod oběma pruhy jsou tři rámečky rollout, každý pokrývající interval 8 kroků. V každém rámečku rollout jsou popisky „výpočet ztráty" a „sestup gradientu". Nahoře v legendě je uvedeno: „délka rollout: 8 kroků; počet agentů: 2"

Deep Reinforcement Learning v Pythonu

Rollouts and minibatches

Dva pruhy agentů shodné s předchozím snímkem. Níže jsou opět viditelné 3 rámečky rollout, jejichž obsah se změnil. Nahoře mají dlouhý rámeček označený „přeházení"; pod ním jsou podélně rozděleny na 4 rámečky „minibatch", každý obsahující „výpočet ztráty" a „sestup gradientu". Legenda uvádí: „Délka rollout: 8 kroků; velikost minibatch: 4 (2×2); počet agentů: 2"

Deep Reinforcement Learning v Pythonu

PPO with multiple epochs

Kresba velmi podobná předchozí, kromě rámečků rollout, které jsou nyní rozděleny také svisle na 4 části: horní je popisek „přeházení"; druhý je velký rámeček označený „epocha 1" se 4 minibatch podélně; třetí je popisek „přeházení znovu"; poslední je velký rámeček „epocha 2" také se 4 minibatch. Legenda uvádí: „Délka rollout: 8 kroků; velikost minibatch: 4 (2×2); počet agentů: 2; počet epoch: 2".

Deep Reinforcement Learning v Pythonu

Let's practice!

Deep Reinforcement Learning v Pythonu

Preparing Video For Download...