Пакетні оновлення в policy gradient

Глибоке навчання з підкріпленням у Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Покрокові vs пакетні оновлення градієнта

Велика рамка, що позначає епізод.

Глибоке навчання з підкріпленням у Python

Покрокові vs пакетні оновлення градієнта

У великій рамці з'являється менша — крок 1. У ній ще одна рамка з текстом «select action».

Глибоке навчання з підкріпленням у Python

Покрокові vs пакетні оновлення градієнта

У рамці кроку 1 з'являється мала рамка з текстом «iterate environment».

Глибоке навчання з підкріпленням у Python

Покрокові vs пакетні оновлення градієнта

Під рамкою кроку 1 з'являється ще одна з написами «calculate loss» і «gradient descent».

Глибоке навчання з підкріпленням у Python

Покрокові vs пакетні оновлення градієнта

З'являється ідентична пара рамок для другого кроку з тим самим вмістом.

Глибоке навчання з підкріпленням у Python

Покрокові vs пакетні оновлення градієнта

Так само з'являються крок 3 і крок 4.

Глибоке навчання з підкріпленням у Python

Пакетування оновлень A2C / PPO

Велика рамка епізоду; половину площі займає інша рамка «rollout 1»; у ній дві порожні рамки «step 1» і «step 2».

Глибоке навчання з підкріпленням у Python

Пакетування оновлень A2C / PPO

У рамці кроку 1 з'являються написи «select action» і «iterate environment».

Глибоке навчання з підкріпленням у Python

Пакетування оновлень A2C / PPO

Так само для кроку 2.

Глибоке навчання з підкріпленням у Python

Пакетування оновлень A2C / PPO

Під рамками кроку 1 і кроку 2 з'являються єдині написи «calculate loss» і «gradient descent».

Глибоке навчання з підкріпленням у Python

Пакетування оновлень A2C / PPO

Іншу половину області епізоду займає ще одна ідентична рамка з двома кроками — «rollout 2».

Глибоке навчання з підкріпленням у Python

Цикл навчання A2C з пакетними оновленнями

 

# Set rollout length
rollout_length = 10

# Initiate loss batches
actor_losses = torch.tensor([]) critic_losses = torch.tensor([])
  • Ініціалізуйте пакети втрат
  • Ітеруйте епізоди та кроки як зазвичай

 

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)
    ...
Глибоке навчання з підкріпленням у Python

Цикл навчання A2C з пакетними оновленнями

  ...
  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

 

  • Додайте втрати кроку до пакетів втрат
  • Коли rollout заповнений:
    • Візьміть середні втрати пакета за допомогою .mean()
    • Виконайте спуск за градієнтом
    • Переініціалізуйте пакети втрат
Глибоке навчання з підкріпленням у Python

A2C / PPO з кількома агентами

 

Дві горизонтальні смуги — агент 1 і агент 2. Кожен проходить відповідно 4 і 3 епізоди різної довжини. У кожному епізоді видно кроки, як на попередніх слайдах. Під смугами — три рамки rollout, кожна охоплює 8 кроків, з написами «calculate loss» і «gradient descent». Угорі легенда: "rollout length: 8 steps; number of agents: 2".

Глибоке навчання з підкріпленням у Python

Rollout-и та мініпакети

Дві смуги агентів, як на попередньому слайді. Нижче знову 3 рамки rollout, але їхній вміст змінився: угорі довга рамка «shuffle». Під нею кожна поділена вздовж на 4 рамки «minibatch», у кожній — «calculate loss» і «gradient descent». Легенда: 'Rollout length: 8 steps; minibatch size: 4 (2x2); number of agents: 2'.

Глибоке навчання з підкріпленням у Python

PPO з кількома епохами

Майже те саме, але пакети rollout тепер також розбиті вертикально на 4 області: угорі — «shuffle»; далі — велика «epoch 1» з 4 мініпакетами вздовж; потім «reshuffle»; внизу — «epoch 2» з 4 мініпакетами. Легенда: 'Rollout length: 8 steps; minibatch size: 4 (2x2); number of agents: 2; number of epochs: 2'.

Глибоке навчання з підкріпленням у Python

Давайте потренуємось!

Глибоке навчання з підкріпленням у Python

Preparing Video For Download...