Mẹo Tái Tham Số Hóa Và Hàm Mất Mát KL Cho VAE (Kingma & Welling 2013)
Thao tác lấy mẫu ngẫu nhiên z ∼ N(μ, σ2) là một nút ngẫu nhiên không thể truyền ngược đạo hàm (non-differentiable). Kingma & Welling tách sự ngẫu nhiên ra khỏi…
Tiến độ của tôi ở bài này
Điểm đượ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 Variational Autoencoder (VAE), mạng Encoder xuất ra kỳ vọng μ và log phương sai log σ2 của phân phối tiên nghiệm ẩn qφ(z | x) = N(μ, diag(σ2)).
- Mẹo tái tham số hóa (Reparameterization Trick):
Thao tác lấy mẫu ngẫu nhiên z ∼ N(μ, σ2) là một nút ngẫu nhiên không thể truyền ngược đạo hàm (non-differentiable). Kingma & Welling tách sự ngẫu nhiên ra khỏi đồ thị tính toán: z = μ + σ ⊙ ε, với ε ∼ N(0, I) Trong đó σ = exp(0.5 · log σ2).
- Hàm mất mát phân kỳ KL dạng giải tích (Closed-form KL Divergence) giữa q(z | x) và phân phối chuẩn tắc N(0, I):
DKL(q(z | x) ∥ N(0, I)) = -12 ∑j=1D ( 1 + log σj2 - μj2 - σj2 )
Yêu cầu
Viết 2 hàm:
def reparameterize(mu: torch.Tensor, logvar: torch.Tensor, eps: torch.Tensor | None = None) -> torch.Tensor:
# Lấy mẫu z = mu + std * eps
pass
def compute_vae_loss(
recon_x: torch.Tensor,
x: torch.Tensor,
mu: torch.Tensor,
logvar: torch.Tensor,
beta: float = 1.0
) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]:
# Trả về: (total_loss, recon_loss, kl_loss)
passreparameterize: NếuepslàNone, tạoeps = torch.randn_like(mu).compute_vae_loss:recon_loss = F.mse_loss(recon_x, x, reduction='mean').kl_loss = -0.5 * torch.mean(torch.sum(1 + logvar - mu.pow(2) - logvar.exp(), dim=-1)).total_loss = recon_loss + beta * kl_loss.
Input
- Hàm
reparameterize(mu,logvar,eps): 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. - Hàm
compute_vae_loss(recon_x,x,mu,logvar,beta): 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
reparameterize: Trả về kết quả kiểutorch.Tensortheo đúng đặc tả kỹ thuật và kích thước quy định. - Hàm
compute_vae_loss: Trả về kết quả kiểutuple[torch.Tensor, 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
mu = torch.tensor([[0.0, 0.0]])
logvar = torch.tensor([[2.0, 2.0]])
eps = torch.tensor([[1.0, 1.0]])
z = reparameterize(mu, logvar, eps=eps)Output
[[2.7183, 2.7183]]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
mu = torch.tensor([[1.0, 2.0]])
logvar = torch.tensor([[0.0, 0.0]])
eps = torch.tensor([[0.5, -1.0]])
z = reparameterize(mu, logvar, eps=eps)Output
[[1.5, 1. ]]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.
