← 문제 목록/KL 발산 (Kullback-Leibler Divergence)
문제 해설

KL 발산 (Kullback-Leibler Divergence)

정보이론 · easy

preview

KL 발산 (Kullback-Leibler Divergence)

36번 엔트로피 가 "한 분포의 불확실성" 이라면, KL 발산두 분포의 차이 를 측정합니다. "p 대신 q 로 인코딩하면 얼마나 추가 비트 필요한가":

DKL(pq)=ipilog2piqiD_{KL}(p \parallel q) = \sum_i p_i \log_2 \frac{p_i}{q_i}

성질

  • 비대칭KL(p‖q) ≠ KL(q‖p) 일반적으로. 그래서 "발산" 이지 "거리" 가 아님.
  • 항상 ≥ 0; p = q 일 때만 0.
  • VAE·GAN 등 생성 모델 학습의 핵심 항목 (VAE의 regularization term).

과제

함수 kl_divergence(p, q) 를 완성하세요.

  • p, q: 확률 분포 (합 = 1). 같은 길이.
  • 반환: Python float (단위 bit).
  • p_i = 0 인 항은 제외 (정의상 0·log 0 = 0).
  • q_i = 0 이고 p_i > 0 면 발산이 inf — 그대로 np.inf 반환 OK.

테스트 케이스

#이름검증
1같은 분포 → 0KL(p, p) = 0
2비음수임의 (p, q) 에 대해 ≥ 0
3비대칭KL(p,q) ≠ KL(q,p)
4알려진 값p=[0.5, 0.5], q=[0.75, 0.25] → 정확
5scipy entropy-v1 일치bits 단위로
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.