Lịch Trình Nhiễu Tuyến Tính & Cosine Cho Mô Hình Diffusion DDPM
q(xt | xt-1) = N(xt; √(1 - betat) xt-1, betat 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: gaussian-process-regression-rbf-kernel.
Nội dung đề bài
Mục tiêu kiến thức
- Trong mô hình Denoising Diffusion Probabilistic Models (DDPM), quá trình khuếch tán thuận thêm nhiễu Gauss qua T bước thời gian rời rạc với phương sai beta_t ∈ (0, 1):
q(xt | xt-1) = N(xt; √(1 - betat) xt-1, betat I)
- Đặt alphat = 1 - betat và tích lũy tích alphat = Πs=1t alphas (alphascumprod).
- Lịch trình tuyến tính (Linear Schedule - Ho et al. 2020):
betat = linspace(betastart, betaend, T)
- Lịch trình Cosine (Cosine Schedule - Nichol & Dhariwal 2021):
Lịch trình tuyến tính thêm nhiễu quá nhanh ở các bước đầu, làm mất chi tiết ảnh nhỏ. Lịch trình Cosine định nghĩa trực tiếp alphat: f(t) = cos ( t/T + s1 + s · pi2 )2 alphat = f(t)f(0), betat = clip ( 1 - alphatalphat-1, betamax = 0.999 ) với hằng số offset s = 0.008.
Yêu cầu
Viết hàm:
def get_beta_schedule(
schedule_type: str,
num_timesteps: int,
beta_start: float = 0.0001,
beta_end: float = 0.02
) -> dict[str, torch.Tensor]:
pass- Trả về dictionary gồm 3 tensor 1D kích thước (T,):
- "betas": Tensor chứa beta1, …, betaT.
- "alphas": Tensor 1 - beta_t.
- "alphascumprod": Tensor tích lũy alphat = Πs=1t alphas (torch.cumprod).
Input
- Hàm get_beta_schedule(schedule_type, num_timesteps, beta_start, beta_end): 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 get_beta_schedule: Trả về kết quả kiểu dict[str, 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
T = 100
sched = get_beta_schedule('linear', T, beta_start=0.001, beta_end=0.02)
diffs = sched['alphas_cumprod'][1:] - sched['alphas_cumprod'][:-1]
Output
Tensor shape: (99,), 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ế.
Ví dụ 2
Input
sched = get_beta_schedule('cosine', 50)
Output
{
'betas': Tensor shape: (50,), dtype=torch.float32,
'alphas': Tensor shape: (50,), dtype=torch.float32,
'alphas_cumprod': Tensor shape: (50,), 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.
