Cập nhật theo lô trong policy gradient

Deep Reinforcement Learning bằng Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Cập nhật gradient từng bước vs theo lô

Một hộp lớn đại diện cho một episode.

Deep Reinforcement Learning bằng Python

Cập nhật gradient từng bước vs theo lô

Trong hộp lớn, xuất hiện hộp nhỏ cho step 1. Bên trong có hộp 'select action.'

Deep Reinforcement Learning bằng Python

Cập nhật gradient từng bước vs theo lô

Trong hộp step 1, xuất hiện hộp nhỏ 'iterate environment'

Deep Reinforcement Learning bằng Python

Cập nhật gradient từng bước vs theo lô

Bên dưới hộp step 1 là hộp 'calculate loss' và 'gradient descent'

Deep Reinforcement Learning bằng Python

Cập nhật gradient từng bước vs theo lô

Một cặp hộp giống hệt xuất hiện cho bước thứ hai, với nội dung tương tự

Deep Reinforcement Learning bằng Python

Cập nhật gradient từng bước vs theo lô

Bước 3 và bước 4 cũng xuất hiện.

Deep Reinforcement Learning bằng Python

Gom lô cập nhật cho A2C / PPO

Một hộp lớn cho episode; chiếm nửa diện tích là hộp 'rollout 1'; trong đó có hai hộp rỗng 'step 1' và 'step 2'

Deep Reinforcement Learning bằng Python

Gom lô cập nhật cho A2C / PPO

Trong hộp step 1, xuất hiện nhãn 'select action' và 'iterate environment'.

Deep Reinforcement Learning bằng Python

Gom lô cập nhật cho A2C / PPO

Tương tự cho step 2.

Deep Reinforcement Learning bằng Python

Gom lô cập nhật cho A2C / PPO

Bên dưới các hộp step 1 và step 2 là nhãn 'calculate loss' và 'gradient descent' chung.

Deep Reinforcement Learning bằng Python

Gom lô cập nhật cho A2C / PPO

Nửa còn lại của vùng episode có hộp rollout 2 giống hệt, với hai bước.

Deep Reinforcement Learning bằng Python

Vòng lặp huấn luyện A2C với cập nhật theo lô

 

# Set rollout length
rollout_length = 10

# Initiate loss batches
actor_losses = torch.tensor([]) critic_losses = torch.tensor([])
  • Khởi tạo các lô loss
  • Lặp qua episode và step như thường lệ

 

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 bằng Python

Vòng lặp huấn luyện A2C với cập nhật theo lô

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

 

  • Thêm loss từng bước vào các lô
  • Khi rollout đầy:
    • Lấy trung bình loss của lô bằng .mean()
    • Thực hiện gradient descent
    • Khởi tạo lại các lô loss
Deep Reinforcement Learning bằng Python

A2C / PPO với nhiều agent

 

Hai dải ngang cho agent 1 và agent 2. Mỗi agent trải qua lần lượt 4 và 3 episode với độ dài khác nhau. Trong mỗi episode có các hộp step như trước. Bên dưới là 3 hộp rollout, mỗi hộp bao phủ 8 bước, có nhãn 'calculate loss' và 'gradient descent'. Trên cùng có chú giải: "rollout length: 8 steps; number of agents: 2"

Deep Reinforcement Learning bằng Python

Rollout và minibatch

Hai dải agent giống slide trước. Bên dưới, 3 hộp rollout có nội dung mới: trên cùng là hộp dài 'shuffle'; dưới đó chia dọc thành 4 hộp 'minibatch', mỗi hộp có 'calculate loss' và 'gradient descent'. Chú giải: 'Rollout length: 8 steps; minibatch size: 4 (2x2); number of agents: 2'

Deep Reinforcement Learning bằng Python

PPO với nhiều epoch

Hình vẽ tương tự trước đó, nhưng các lô rollout nay cũng chia dọc thành 4 phần: trên cùng là 'shuffle'; thứ hai là hộp lớn 'epoch 1' chứa 4 minibatch xếp dọc; thứ ba là 'reshuffle'; cuối cùng là 'epoch 2' cũng có 4 minibatch. Chú giải: 'Rollout length: 8 steps; minibatch size: 4 (2x2); number of agents: 2; number of epochs: 2'.

Deep Reinforcement Learning bằng Python

Ayo berlatih!

Deep Reinforcement Learning bằng Python

Preparing Video For Download...