Bước Lấy Mẫu Tất Định Tốc Độ Cao DDIM (Song et al. ICLR 2021)
1. Ước lượng ảnh gốc x0:
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: ddpm-reverse-diffusion-step.
Nội dung đề bài
Mục tiêu kiến thức
- DDPM đòi hỏi chạy tuần tự đủ T = 1000 bước gây tốn kém thời gian suy luận (10-30 giây cho một bức ảnh).
- Song et al. (2020) chứng minh rằng có một họ các quá trình phi-Markovian (Non-Markovian) chia sẻ cùng phân phối biên q(xt | x0) nhưng cho phép suy luận với bước nhảy bất kỳ (chỉ cần 20 - 50 bước).
- Công thức cập nhật DDIM:
- Ước lượng ảnh gốc x0:
x0 = xt - √(1 - alphat) · epsilontheta(xt, t)√(alphat)
- Phương sai nhiễu:
sigmat = eta · √(1 - alphat-11 - alphat) √(1 - alphatalphat-1)
- Khi eta = 0 (DDIM Tất Định / ODE Trajectory): sigma_t = 0.
- Cập nhật bước tiếp theo xt-1:
xt-1 = √(alphat-1) · x0 + √(1 - alphat-1 - sigmat2) · epsilontheta(xt, t) + sigmat · z
Yêu cầu
Viết hàm:
def ddim_step(
x_t: torch.Tensor,
predicted_noise: torch.Tensor,
alpha_bar_t: float,
alpha_bar_prev: float,
eta: float = 0.0,
z: torch.Tensor | None = None
) -> tuple[torch.Tensor, torch.Tensor]:
pass- Trả về tuple (x_prev, pred_x0):
- xprev: Tensor xt-1.
- predx0: Tensor ảnh gốc ước lượng x0.
Input
- Hàm ddimstep(xt, predictednoise, alphabart, alphabarprev, eta, z): 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 ddim_step: 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
x_t = torch.tensor([[2.0]])
pred_noise = torch.tensor([[1.0]])
ab_t = 0.64
ab_prev = 0.81
x_prev, pred_x0 = ddim_step(x_t, pred_noise, ab_t, ab_prev, eta=0.0)
Output
([[2.0109]], [[1.75]])
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
x_t = torch.randn(4, 3, 16, 16)
pred_noise = torch.randn(4, 3, 16, 16)
x_prev, pred_x0 = ddim_step(x_t, pred_noise, 0.5, 0.7, eta=0.0)
Output
(Tensor shape: (4, 3, 16, 16), dtype=torch.float32, Tensor shape: (4, 3, 16, 16), dtype=torch.float32)
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.
