실습 · 연습문제 2개
이산 KL과 교차엔트로피 구현하기 discrete-kl
같은 결과 집합 위의 두 이산분포 p, q(shape (K,), 각각 합이 1)에 대해 두 함수를 완성한다. 로그는 자연로그(nat)를 쓴다.
cross_entropy(p, q):kl_divergence(p, q):
두 규약을 지켜야 한다.
- 인 항은 0으로 둔다(, ). 이때 가 0이어도 된다.
- 인데 인 가 있으면 두 함수 모두
np.inf를 반환한다.
테스트는 다음을 확인한다.
- (여기서 )
- ,
- 비대칭: 일반적으로
- 위의 두 규약, 그리고 결과에
nan이 나오지 않는 것
힌트: np.log(0)은 -inf이고 0 * -inf는 nan이다. 먼저 p > 0인 위치만 골라 계산한다.
두 가우시안 사이의 KL gaussian-kl
1차원 가우시안 , 사이의 KL divergence는 닫힌 형태로 쓸 수 있다.
gaussian_kl(mu1, sigma1, mu2, sigma2)를 완성해 를 nat 단위로 반환한다. 인자는 스칼라이거나 같은 shape의 배열일 수 있다(배열이면 원소별로 계산한다). 는 표준편차이고 양수다.
테스트는 다음을 확인한다.
- 수치적분으로 계산한 KL과 일치한다.
- 이면 0이다.
- 비대칭이다: 좁은 와 넓은 의 와 가 다르고, 이 경우 넓은 분포에서 좁은 분포로 재는 쪽이 더 크다.
- 단위 불변성: 평균과 표준편차를 모두 같은 상수배 하면 값이 변하지 않는다.
이어서 생각해 본다. , (평균은 같음)일 때 두 방향의 값을 계산하고, 어느 방향이 "가 를 덮지 못함"을 더 크게 벌하는지 본문의 forward·reverse 설명과 연결한다.