Bắt đầu ngayBắt đầu miễn phí

Tỷ lệ xác suất đã được kẹp (clipped)

Bạn sẽ hiện thực tỷ lệ xác suất đã được kẹp (clipped probability ratio), một thành phần cốt lõi của hàm mục tiêu PPO.

Tham chiếu: tỷ lệ xác suất được định nghĩa là: $$\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}$$

Và tỷ lệ xác suất đã được kẹp là: \(\mathrm{clip}(r_t(\theta), 1-\varepsilon, 1+\varepsilon)\).

Bài tập này là một phần của khóa học

Deep Reinforcement Learning bằng Python

Xem khóa học

Hướng dẫn bài tập

  • Lấy xác suất hành động prob từ action_log_prob, và prob_old từ action_log_prob_old.
  • Tách log prob hành động cũ khỏi đồ thị gradient của torch.
  • Tính tỷ lệ xác suất.
  • Kẹp (clip) mục tiêu thay thế (surrogate objective).

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

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)
Chỉnh sửa và Chạy Mã