Ước Lượng Lợi Thế Tổng Quát (Generalized Advantage Estimation - GAE)
deltatV = rt + gamma V(st+1)(1 - dt) - V(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: proximal-policy-optimization-clipped-surrogate.
Nội dung đề bài
Mục tiêu kiến thức
- Trong RL, ta cần ước lượng lợi thế A(st, at) = Q(st, at) - V(st).
- Phương pháp 1 bước TD error: deltat = rt + gamma V(st+1) - V(st) (bias cao do dựa vào V, phương sai thấp).
- Phương pháp Monte Carlo: Gt - V(st) (không có bias, nhưng phương sai cực lớn).
- Schulman (2015) đề xuất GAE(gamma, lambda) sử dụng trung bình có trọng số hàm mũ của các bước TD:
deltatV = rt + gamma V(st+1)(1 - dt) - V(st) AtGAE = Σl=0∞ (gamma lambda)l deltat+lV = deltatV + gamma lambda (1 - dt) At+1GAE Trong đó:
- dt ∈ {0, 1} là cờ kết thúc episode (done). Nếu dt = 1, bước tiếp theo bị ngắt kết nối.
- lambda = 0: Trở thành sai số TD(0) 1 bước.
- lambda = 1: Trở thành ước lượng Monte Carlo đầy đủ.
- lambda ∈ [0.9, 0.95] mang lại sự cân bằng hoàn hảo giữa bias và variance, là chuẩn mực trong PPO.
Yêu cầu
Viết hàm:
def compute_gae(
rewards: torch.Tensor,
values: torch.Tensor,
next_value: torch.Tensor,
dones: torch.Tensor,
gamma: float = 0.99,
lam: float = 0.95
) -> tuple[torch.Tensor, torch.Tensor]:
pass- rewards: Tensor 1D (T,).
- values: Tensor 1D (T,) chứa ước lượng V(st).
- nextvalue: Scalar tensor giá trị V(sT).
- dones: Tensor 1D (T,) kiểu boolean hoặc float (1.0 nếu kết thúc, 0.0 nếu tiếp tục).
- Trả về tuple (advantages, returns):
- advantages: Tensor 1D (T,) chứa AtGAE.
- returns: Tensor 1D (T,) được tính là At + V(st) (dùng làm target huấn luyện mạng Critic).
Input
- Hàm compute_gae(rewards, values, next_value, dones, gamma, lam): 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_gae: Trả về kết quả kiểu tuple[torch.Tensor, 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
rewards = torch.tensor([1.0])
values = torch.tensor([2.0])
next_value = torch.tensor([3.0])
dones = torch.tensor([0.0])
gamma = 0.9
lam = 0.8
adv, ret = compute_gae(rewards, values, next_value, dones, gamma=gamma, lam=lam)
Output
([1.7], [3.7])
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
rewards = torch.tensor([1.0, 2.0])
values = torch.tensor([0.5, 1.0])
next_value = torch.tensor([10.0])
dones = torch.tensor([0.0, 1.0])
gamma = 0.5
lam = 0.5
adv, ret = compute_gae(rewards, values, next_value, dones, gamma=gamma, lam=lam)
Output
([1.25, 1. ], [1.75, 2. ])
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.
