Bước Lấy Mẫu Khuếch Tán Ngược DDPM (Denoising Step - Ho et al. 2020)
ptheta(xt-1 | xt) = N(xt-1; mutheta(xt, t), tilde{beta}t I)
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-forward-diffusion-process.
Nội dung đề bài
Mục tiêu kiến thức
- Quá trình khuếch tán ngược khử dần nhiễu từ xT sim N(0, I) về ảnh rõ nét x0.
- Xác suất hậu nghiệm từng bước (Algorithm 2 - Ho et al. 2020):
ptheta(xt-1 | xt) = N(xt-1; mutheta(xt, t), tilde{beta}t I)
- Kỳ vọng mutheta(xt, t) được tính từ ước lượng nhiễu epsilontheta(xt, t):
mutheta(xt, t) = 1√(alphat) ( xt - betat√(1 - alphat) · epsilontheta(xt, t) )
- Phương sai hậu nghiệm tilde{beta}_t:
tilde{beta}t = 1 - alphat-11 - alphat · betat
- Công thức cập nhật điểm ảnh:
xt-1 = mutheta(xt, t) + sigmat · z, với sigmat = √(tilde{beta}t) (Đặc biệt: nếu t = 0, không cộng thêm nhiễu, tức sigma0 = 0).
Yêu cầu
Viết hàm:
def p_sample_step(
x_t: torch.Tensor,
t: int,
predicted_noise: torch.Tensor,
betas: torch.Tensor,
alphas: torch.Tensor,
alphas_cumprod: torch.Tensor,
z: torch.Tensor | None = None
) -> torch.Tensor:
pass- xt: Tensor (B, C, H, W) hoặc (B, D).
- t: Số nguyên chỉ số bước thời gian t ∈ [0, T-1].
- predictednoise: Tensor cùng shape với xt do mô hình dự đoán.
- z: Tensor Gauss ngẫu nhiên N(0, I) hoặc None.
- Trả về xt-1.
Input
- Hàm psamplestep(xt, t, predictednoise, betas, alphas, alphascumprod, 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 p_sample_step: 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
x_t = torch.tensor([[1.0, 2.0]])
predicted_noise = torch.tensor([[0.2, 0.4]])
betas = torch.tensor([0.1, 0.2])
alphas = 1.0 - betas
alphas_cumprod = torch.tensor([0.9, 0.72])
p_sample_step(x_t, 0, predicted_noise, betas, alphas, alphas_cumprod)
Output
[[0.9874, 1.9749]]
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(2, 4)
pred = torch.randn(2, 4)
betas = torch.tensor([0.1, 0.2, 0.3])
alphas = 1.0 - betas
alphas_cumprod = torch.cumprod(alphas, dim=0)
z = torch.zeros(2, 4)
p_sample_step(x_t, 2, pred, betas, alphas, alphas_cumprod, z=z)
Output
[[ 0.0058, -1.3753, -3.1249, -1.2377],
[-0.986 , -0.4 , 2.0503, -1.3073]]
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.
