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

อัตราส่วนความน่าจะเป็นแบบ clipped

ในแบบฝึกหัดนี้ จะได้ implement อัตราส่วนความน่าจะเป็นแบบ clipped ซึ่งเป็นองค์ประกอบสำคัญของ PPO objective function

สำหรับอ้างอิง อัตราส่วนความน่าจะเป็นนิยามไว้ดังนี้: $$\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}$$

และอัตราส่วนความน่าจะเป็นแบบ clipped คือ: \(\mathrm{clip}(r_t(\theta), 1-\varepsilon, 1+\varepsilon)\)

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

Deep Reinforcement Learning ด้วย Python

ดูคอร์ส

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

  • คำนวณค่าความน่าจะเป็นของ action prob จาก action_log_prob และ prob_old จาก action_log_prob_old
  • แยก old action log prob ออกจาก torch gradient computation graph
  • คำนวณอัตราส่วนความน่าจะเป็น
  • Clip surrogate objective

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

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

log_prob = torch.tensor(.5).log()
log_prob_old = torch.tensor(.4).log()

def calculate_ratios(action_log_prob, action_log_prob_old, epsilon):
    # Obtain prob and prob_old
    prob = ____
    prob_old = ____
    # Detach the old action log prob
    prob_old_detached = ____.____()
    # Calculate the probability ratio
    ratio = ____ / ____
    # Apply clipping
    clipped_ratio = torch.____(ratio, ____, ____)
    print(f"+{'-'*29}+\n|         Ratio: {str(ratio)} |\n| Clipped ratio: {str(clipped_ratio)} |\n+{'-'*29}+\n")
    return (ratio, clipped_ratio)

_ = calculate_ratios(log_prob, log_prob_old, epsilon=.2)
แก้ไขและรันโค้ด