쿨백-라이블러 발산 (Kullback-Leibler divergence, KL-divergence)
- 두 개의 확률분포의 차이를 계산하는데 사용하는 함수이다.
- 어떤 이상적인 분포에 대해 그 분포를 근사하는 다른 분포를 이용해서 샘플링을 했을때 발생할 수 있는 엔트로피의 차이를 계산한다.
- 상대 엔트로피 (relative entropy), 정보 획득량 (information gain) 혹은 정보 발산 (information divergence)라고도 한다.
- KL-divergence는 비대칭으로, 두 값의 위치를 바꾸면 함수값도 달라진다. 따라서 거리 함수가 아니다.
정의
Cross entropy를 계산하는 수식으로부터 KL-divergenc를 다음과 같이 유도할 수 있다.
$$ \begin{aligned} H(p,q) & = -\sum_i p_i \log q_i \\ & = -\sum_i p_i \log q_i -\sum_i p_i \log p_i + \sum_i p_i \log p_i \\ & = \color{blue}{H(p)} + \sum_i p_i \log p_i - \sum_i p_i \log q_i \\ & = \color{blue}{H(p)} + \color{red}{\sum_i p_i \log \frac{p_i}{q_i}} \\ & =\color{blue}{H(p)}+\color{red}{KL(p||q)} \end{aligned} $$
즉, $p$의 엔트로피에 $ \color{red}{\sum_i p_i \log \frac{p_i}{q_i} }$가 더해진 것이 Cross entropy를 의미합니다.
그리고 이 때 더해지는 텀이 바로 $p$의 분포와 $q$의 분포의 정보량의 차이를 (KL-divergence)를 의미합니다.
다시 한 번 정리하면, KL-divergence는 $p$와 $q$의 cross entropy에서 $p$의 엔트로피를 뺀 값이 됩니다.
이를 식으로 표현하면 다음과 같습니다.
$$KL(p||q)=H(p,q)-H(p)$$
따라서 cross entropy를 최소화(minimize)하는 것은 결과적으로 KL-divergence를 최소화 하는 것과 동일합니다.
($H(p)$는 고정된 하나의 상수값이기 때문에)
특징
- $KL(p||q) \geq 0$
- $KL(p||q) \neq KL(q||p)$
$ \begin{aligned} KL(p||q) & =H(p,q)-H(p) \\ & \neq H(q,p) -H(q) = KL(q||p) \end{aligned}$ - KL-divergence는 어떠한 확률 분포 $P$가 있을때, 샘플링 과정에서 그 분포를 근사적으로 표현하는 확률분포 $Q$를 $P$대신 사용할 경우 엔트로피 변화를 의미한다.
'Engineering > Machine Learning' 카테고리의 다른 글
[이론] Entropy (0) | 2021.01.15 |
---|---|
주피터 노트북(Jupyter Notebook) 기본 경로 설정 및 테마 변경 (0) | 2020.12.22 |
[CUDA + cuDNN + PyTorch for Win10설치] (0) | 2020.12.22 |
윈도우10에 텐서플로우 GPU 버전 설치 (3) | 2019.02.01 |
아나콘다를 이용한 윈도우10에 텐서플로우 CPU 버전 설치 (0) | 2019.01.30 |