Hàm Mục Tiêu Cắt Ngưỡng PPO-Clip (Schulman 2017)
rt(theta) = pitheta(at st)|pithetaold(at | st) = exp(log pitheta(at | st) - log pithetaold(at | st))
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: policy-gradient-reinforce-baseline.
Nội dung đề bài
Mục tiêu kiến thức
- Trong Policy Gradient truyền thống, một bước cập nhật tham số quá lớn có thể phá hỏng hoàn toàn chính sách (policy collapse).
- Thuật toán PPO (Schulman 2017) giải quyết bằng cách đo tỷ số xác suất (Probability Ratio):
rt(theta) = pitheta(at st)|pithetaold(at | st) = exp(log pitheta(at | st) - log pithetaold(at | st))
- Hàm mục tiêu cắt ngưỡng Surrogate Loss:
LCLIP(theta) = Et [ min ( rt(theta) At, clip(rt(theta), 1 - epsilon, 1 + epsilon) At ) ] Trong đó:
- At: Lợi thế ước lượng (Advantage).
- epsilon: Ngưỡng cắt (thường epsilon = 0.2).
- Phép lấy min tạo thành một biên giới dưới bi quan (pessimistic lower bound): chỉ cho phép chính sách thay đổi nếu nó không vượt quá khoảng [1-epsilon, 1+epsilon], triệt tiêu động lực tăng vọt tỷ số khi At > 0.
- Trong PyTorch (gradient descent), hàm mất mát cần tối thiểu hóa là:
LPPO = - LCLIP(theta) = - mean ( min(rt At, clip(rt, 1-epsilon, 1+epsilon) At) )
Yêu cầu
Viết hàm:
def compute_ppo_clipped_loss(
log_probs_new: torch.Tensor,
log_probs_old: torch.Tensor,
advantages: torch.Tensor,
clip_eps: float = 0.2
) -> torch.Tensor:
pass- logprobsnew: Tensor 1D (N,) chứa log pitheta(at | st).
- logprobsold: Tensor 1D (N,) chứa log pithetaold(at | st).
- advantages: Tensor 1D (N,) chứa At.
- Trả về scalar tensor giá trị mất mát PPO-Clip.
Input
- Hàm compute_ppo_clipped_loss(log_probs_new, log_probs_old, advantages, clip_eps): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm compute_ppo_clipped_loss: Trả về kết quả kiểu torch.Tensor theo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 2000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
log_new = torch.tensor([0.405465])
log_old = torch.tensor([0.0])
adv = torch.tensor([2.0])
loss = compute_ppo_clipped_loss(log_new, log_old, adv, clip_eps=0.2)
Output
-2.4
Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
log_new = torch.tensor([-0.693147])
log_old = torch.tensor([0.0])
adv = torch.tensor([-3.0])
loss = compute_ppo_clipped_loss(log_new, log_old, adv, clip_eps=0.2)
Output
2.4
Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
