การอัปเดตแบบกลุ่มใน policy gradient

Deep Reinforcement Learning ด้วย Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

การอัปเดต gradient แบบทีละขั้น vs แบบกลุ่ม

กล่องขนาดใหญ่แทน episode หนึ่ง

Deep Reinforcement Learning ด้วย Python

การอัปเดต gradient แบบทีละขั้น vs แบบกลุ่ม

ภายในกล่องใหญ่ปรากฏกล่องเล็กแทน step 1 และภายในมีกล่องระบุข้อความ 'select action'

Deep Reinforcement Learning ด้วย Python

การอัปเดต gradient แบบทีละขั้น vs แบบกลุ่ม

ภายในกล่อง step 1 ปรากฏกล่องเล็กระบุข้อความ 'iterate environment'

Deep Reinforcement Learning ด้วย Python

การอัปเดต gradient แบบทีละขั้น vs แบบกลุ่ม

ใต้กล่อง step 1 ปรากฏกล่องระบุ 'calculate loss' และ 'gradient descent'

Deep Reinforcement Learning ด้วย Python

การอัปเดต gradient แบบทีละขั้น vs แบบกลุ่ม

ปรากฏกล่องคู่เหมือนกันสำหรับ step 2 พร้อมเนื้อหาเดียวกัน

Deep Reinforcement Learning ด้วย Python

การอัปเดต gradient แบบทีละขั้น vs แบบกลุ่ม

ปรากฏ step 3 และ step 4 เพิ่มเติม

Deep Reinforcement Learning ด้วย Python

การรวมกลุ่มการอัปเดต A2C / PPO

กล่อง episode ขนาดใหญ่ มีกล่องย่อยระบุ 'rollout 1' ครอบครองครึ่งพื้นที่ ภายในมีกล่อง 'step 1' และ 'step 2'

Deep Reinforcement Learning ด้วย Python

การรวมกลุ่มการอัปเดต A2C / PPO

ภายในกล่อง step 1 ปรากฏข้อความ 'select action' และ 'iterate environment'

Deep Reinforcement Learning ด้วย Python

การรวมกลุ่มการอัปเดต A2C / PPO

เช่นเดียวกันสำหรับ step 2

Deep Reinforcement Learning ด้วย Python

การรวมกลุ่มการอัปเดต A2C / PPO

ใต้กล่อง step 1 และ step 2 ปรากฏป้าย 'calculate loss' และ 'gradient descent' เพียงอันเดียว

Deep Reinforcement Learning ด้วย Python

การรวมกลุ่มการอัปเดต A2C / PPO

พื้นที่ครึ่งที่เหลือของ episode ถูกครอบครองโดยกล่อง rollout อีกอันที่เหมือนกัน มีสอง step ระบุว่า 'rollout 2'

Deep Reinforcement Learning ด้วย Python

training loop ของ A2C แบบ batch updates

 

# Set rollout length
rollout_length = 10

# Initiate loss batches
actor_losses = torch.tensor([]) critic_losses = torch.tensor([])
  • กำหนดค่าเริ่มต้นให้ loss batch
  • วนซ้ำผ่าน episode และ step ตามปกติ

 

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 ด้วย Python

training loop ของ A2C แบบ 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

 

  • เพิ่ม loss ของแต่ละ step ลงใน loss batch
  • เมื่อ rollout เต็ม:
    • คำนวณค่าเฉลี่ย loss ของ batch ด้วย .mean()
    • ทำ gradient descent
    • กำหนดค่าเริ่มต้น batch loss ใหม่
Deep Reinforcement Learning ด้วย Python

A2C / PPO กับหลาย agent

 

แถบแนวนอนสองแถบแทน agent 1 และ agent 2 แต่ละ agent ผ่าน episode จำนวน 4 และ 3 รายการตามลำดับ ภายในแต่ละ episode มองเห็นกล่อง step ใต้แถบทั้งสองมีกล่อง rollout สามกล่อง แต่ละกล่องครอบคลุม 8 step และมีป้าย 'calculate loss' และ 'gradient descent' ด้านบนมีคำอธิบายระบุว่า "rollout length: 8 steps; number of agents: 2"

Deep Reinforcement Learning ด้วย Python

Rollout และ minibatch

แถบ agent สองแถบเหมือนสไลด์ก่อน ด้านล่างมีกล่อง rollout สามกล่อง แต่ละกล่องมีกล่อง 'shuffle' ด้านบน และแบ่งตามแนวยาวเป็น 4 กล่องย่อยระบุว่า 'minibatch' ภายในแต่ละ minibatch มีกล่อง 'calculate loss' และ 'gradient descent' ด้านบนมีคำอธิบายระบุว่า 'Rollout length: 8 steps; minibatch size: 4 (2x2); number of agents: 2'

Deep Reinforcement Learning ด้วย Python

PPO กับหลาย epoch

ภาพคล้ายกับก่อนหน้า แต่กล่อง rollout แบ่งตามแนวตั้งเป็น 4 ส่วน ได้แก่ ป้าย 'shuffle' กล่องใหญ่ระบุ 'epoch 1' บรรจุ 4 minibatch ป้าย 'reshuffle' และกล่องใหญ่ระบุ 'epoch 2' บรรจุ 4 minibatch เช่นกัน คำอธิบายระบุว่า 'Rollout length: 8 steps; minibatch size: 4 (2x2); number of agents: 2; number of epochs: 2'

Deep Reinforcement Learning ด้วย Python

มาฝึกกันเถอะ!

Deep Reinforcement Learning ด้วย Python

Preparing Video For Download...