Hàm Mất Mát Cập Nhật Bellman Mạng DQN Kèm Target Network (Mnih et al. Nature 2015)
1. Mạng chính theta: Dùng để chọn hành động và tính giá trị Q(st, at; theta).
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: linear-layer-and-mlp-foundations.
Nội dung đề bài
Mục tiêu kiến thức
- Deep Q-Network (DQN) kết hợp mạng nơ-ron sâu với thuật toán Q-Learning để xấp xỉ hàm giá trị hành động Q(s, a; theta).
- Để khắc phục hiện tượng mất ổn định khi tối ưu hóa mạng nơ-ron (chạy theo mục tiêu di động - moving target), DQN duy trì 2 mạng:
- Mạng chính theta: Dùng để chọn hành động và tính giá trị Q(st, at; theta).
- Mạng mục tiêu (Target Network) theta^-: Được đóng băng trọng số, cập nhật định kỳ.
- Mục tiêu Bellman tối ưu:
yt = rt + gamma maxa' Q(st+1, a'; theta-) · (1 - dt)
- Hàm mất mát TD (Smooth L1 Loss hoặc MSE Loss):
L(theta) = 1B Σi=1B MSE ( Q(st, at; theta), yt )
Yêu cầu
Viết hàm:
def compute_dqn_loss(
q_values: torch.Tensor,
actions: torch.Tensor,
rewards: torch.Tensor,
next_q_values: torch.Tensor,
dones: torch.Tensor,
gamma: float = 0.99
) -> torch.Tensor:
pass- qvalues: Tensor (B, numactions) chứa dự đoán Q(st, ·) từ mạng chính.
- actions: Tensor 1D (B,) kiểu int64 chứa hành động at đã thực hiện.
- rewards: Tensor 1D (B,) chứa rt.
- nextqvalues: Tensor (B, numactions) chứa Q(st+1, ·) từ mạng Target (đã detach).
- dones: Tensor 1D (B,) (1.0 nếu trạng thái kết thúc, 0.0 nếu chưa).
- Sử dụng torch.gather để trích xuất Q(st, at).
- Trả về scalar tensor MSE loss giữa Q(st, at) và mục tiêu yt.
Input
- Hàm compute_dqn_loss(q_values, actions, rewards, next_q_values, dones, gamma): 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_dqn_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
q_values = torch.tensor([[1.0, 3.0, 2.0], [4.0, 1.0, 5.0]], requires_grad=True)
actions = torch.tensor([0, 0])
rewards = torch.tensor([2.0, 1.0])
next_q_values = torch.tensor([[10.0, 8.0, 6.0], [2.0, 4.0, 3.0]])
dones = torch.tensor([0.0, 1.0])
gamma = 0.5
loss = compute_dqn_loss(q_values, actions, rewards, next_q_values, dones, gamma=gamma)
Output
22.5
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
q_values = torch.tensor([[1.0, 3.0, 2.0]])
actions = torch.tensor([2])
rewards = torch.tensor([0.0])
next_q_values = torch.tensor([[0.0, 0.0, 0.0]])
dones = torch.tensor([1.0])
loss = compute_dqn_loss(q_values, actions, rewards, next_q_values, dones, gamma=0.99)
Output
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.
