Thuật Toán Gradient Chính Sách REINFORCE Kèm Baseline Giảm Phương Sai
∇theta J(theta) = Etau [ Σt=0T ∇theta log pitheta(at | st) (Gt - b(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: markov-decision-process-value-iteration.
Nội dung đề bài
Mục tiêu kiến thức
- Định lý Gradient Chính sách (Policy Gradient Theorem - Williams 1992):
∇theta J(theta) = Etau [ Σt=0T ∇theta log pitheta(at | st) (Gt - b(st)) ] Trong đó:
- Gt = Σk=tT gammak-t rk là tổng phần thưởng chiết khấu (Return) từ bước t.
- b(st) là hàm đường cơ sở (baseline, ví dụ ước lượng giá trị trạng thái V(st)).
- Trừ b(st) giảm đáng kể phương sai (variance reduction) của ước lượng Monte Carlo mà không làm thay đổi kỳ vọng gradient vì:
Eat sim pi [∇theta log pitheta(at | st) b(st)] = b(st) ∇theta Σa pitheta(a | st) = b(st) ∇theta 1 = 0
- Vì các optimizer (Adam, SGD) trong PyTorch thực hiện cực tiểu hóa (loss minimization), hàm mục tiêu mất mát REINFORCE là:
Lpolicy = -Σt=0T log pitheta(at | st) · (Gt - bt)
Yêu cầu
Viết hàm:
def compute_reinforce_loss(
log_probs: torch.Tensor,
returns: torch.Tensor,
baseline_values: torch.Tensor | None = None
) -> torch.Tensor:
pass- logprobs: Tensor 1D (T,) chứa log pi(at | st).
- returns: Tensor 1D (T,) chứa Gt.
- baselinevalues: Tensor 1D (T,) chứa bt, hoặc None nếu không có baseline (khi đó bt = 0).
- Quan trọng: baseline_values phải được tách khỏi đồ thị gradient (detach()) để gradient của policy loss không lan truyền ngược làm hỏng baseline.
- Trả về scalar tensor biểu diễn trung bình mất mát -1T Σt log pit · (Gt - bt).
Input
- Hàm compute_reinforce_loss(log_probs, returns, baseline_values): 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_reinforce_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_probs = torch.tensor([-0.5, -1.2, -0.8], requires_grad=True)
returns = torch.tensor([10.0, 5.0, 2.0])
loss_no_base = compute_reinforce_loss(log_probs, returns)
baseline = torch.tensor([8.0, 5.0, 0.0])
loss_base = compute_reinforce_loss(log_probs, returns, baseline)
Output
0.8667
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.
