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
Hướng dẫn bài tập
- Lấy xác suất hành động
probtừaction_log_prob, vàprob_oldtừ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)