เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

ฟังก์ชัน clipped surrogate objective

นำฟังก์ชัน calculate_loss() สำหรับ PPO ไปใช้งาน โดยต้องเขียนโค้ดส่วนสำคัญของ PPO ซึ่งก็คือ clipped surrogate loss function ฟังก์ชันนี้ช่วยจำกัดการอัปเดต policy ไม่ให้เปลี่ยนแปลงไปจาก policy เดิมมากเกินไปในแต่ละขั้นตอน

สูตรของ clipped surrogate objective คือ

ในสภาพแวดล้อมนี้ hyperparameter สำหรับการ clipping คือ epsilon ซึ่งกำหนดค่าไว้ที่ 0.2

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Deep Reinforcement Learning ด้วย Python

ดูคอร์ส

คำแนะนำการฝึกหัด

  • คำนวณอัตราส่วนความน่าจะเป็นระหว่าง \pi_\theta และ \pi_{\theta_{old}} (ทั้งแบบไม่คลิปและแบบคลิป)
  • คำนวณ surrogate objectives (ทั้งแบบไม่คลิปและแบบคลิป)
  • คำนวณ PPO clipped surrogate objective
  • คำนวณ actor loss

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

def calculate_losses(critic_network, action_log_prob, action_log_prob_old,
                     reward, state, next_state, done):
    value = critic_network(state)
    next_value = critic_network(next_state)
    td_target = (reward + gamma * next_value * (1-done))
    td_error = td_target - value
    # Obtain the probability ratios
    ____, ____ = calculate_ratios(action_log_prob, action_log_prob_old, epsilon=.2)
    # Calculate the surrogate objectives
    surr1 = ratio * ____.____()
    surr2 = clipped_ratio * ____.____()    
    # Calculate the clipped surrogate objective
    objective = torch.min(____, ____)
    # Calculate the actor loss
    actor_loss = ____
    critic_loss = td_error ** 2
    return actor_loss, critic_loss
  
actor_loss, critic_loss = calculate_losses(critic_network, action_log_prob, action_log_prob_old,
                                           reward, state, next_state, done)
print(actor_loss, critic_loss)
แก้ไขและรันโค้ด