ai-440Đọc toàn bộ đề miễn phí

KL divergence giữa hai Gaussian chéo

Trong VAE, số hạng chính quy hoá đo độ lệch giữa phân phối hậu nghiệm q và tiên nghiệm

AICơ bản13 phút

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ủ đề

numpyvaekl-divergenceentry-ramp

Kiến thức tiên quyết: python-basics, ai-gaussian-density.

Nội dung đề bài

Mô tả bài toán

Trong VAE, số hạng chính quy hoá đo độ lệch giữa phân phối hậu nghiệm q và tiên nghiệm p bằng KL divergence. Khi cả hai là Gaussian chéo (các chiều độc lập), công thức tách thành tổng theo từng chiều với log(var_p/var_q) và tỉ lệ phương sai.

Yêu cầu

Viết hàm kl_diag_gaussians(mu_q, var_q, mu_p, var_p) tính 0.5 * sum( log(var_p/var_q) + (var_q + (mu_q - mu_p)^2) / var_p - 1 ) trên từng chiều.

Quy ước nộp bài

Nộp hàm kl_diag_gaussians trong solution.py. Hệ thống gọi hàm trực tiếp và so với sai số 1e-6; không đọc stdin và không in ra stdout.

Input

  • mu_q, var_q: kỳ vọng và phương sai của q (danh sách cùng độ dài).
  • mu_p, var_p: kỳ vọng và phương sai của p (danh sách cùng độ dài).

Output

Một số thực là KL divergence KL(q || p).

Ràng buộc

  • Bốn danh sách phải cùng độ dài; nếu khác, ném ValueError.
  • Phương sai phải dương; nếu có giá trị <= 0, ném ValueError.

Ví dụ 1

Input

kl_diag_gaussians(mu_q=[0.0], var_q=[1.0], mu_p=[0.0], var_p=[1.0])

Output

0.0

Ví dụ 2

Input

kl_diag_gaussians(mu_q=[0.0], var_q=[1.0], mu_p=[1.0], var_p=[1.0])

Output

0.5

Giải thích

Với mu_q = [0, 0], var_q = [1, 2], mu_p = [0, 0], var_p = [1, 1], chiều 0 góp 0, chiều 1 góp log(1/2) + 2 - 1 = 0.3068528194400547, nên kết quả là 0.15342640972002736.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.

Nhóm Zalo