엔트로피(Entropy)

물리학에서 무질서도라는 개념으로 사용된 Entropy는 확률통계학에서 확률분포의 불확실성을 나타내는 척도이다. 이 불확실성의 척도는 확률분포에 대한 정보량의 기대값으로 표현한다. 하나의 확률분포에 대한 불확실성은 entropy로 계산하고, 두 확률분포 간의 불확실성은 cross entropy를 통해 계산한다. entropy와 cross entropy는 다음과 같이 정의된다.

$\displaystyle H(x) = -\sum_{i=1}^n p(x_i)\log(p(x_i))$

위 식에서 확률값인 $p(x_i)$의 총합은 1이기 때문에 수식은 $\displaystyle H(x) = -\sum_{i=1}^n \log p(x_i)$와도 같다. 간단한 예시인 동전과 주사위를 통해 먼저 entropy를 계산해보자. 동전의 경우 확률이 $\displaystyle 1 \over 2$인 이산확률분포를 가지며 주사위의 경우 확률이 $\displaystyle 1 \over 6$인 확률분포를 가진다. 동전과 주사위를 던지는 상황에 대한 entropy는 각각 다음과 같이 계산된다.

$\displaystyle H(x) = - \left({1\over 2}\log{1\over 2} + {1\over 2}\log{1\over 2}\right) = 0.3010$

$\displaystyle H(x) = -\left({1\over 6}\log {1\over 6} + {1\over 6}\log {1\over 6} + {1\over 6}\log {1\over 6} + {1\over 6}\log {1\over 6} + {1\over 6}\log {1\over 6} + {1\over 6}\log {1\over 6}\right) = 0.7782$


위 예시를 통해 알 수 있는 것은 확률변수가 다양하게 나올 수 있는 경우, 즉 확률에 대한 불확실성이 큰 경우 entropy가 더 크다는 것이다.

 

크로스 엔트로피(Cross Entropy)

entropy가 확률분포 하나에 대한 불확실성을 나타내는 척도라면 cross entropy는 확률분포 두 개에 대한 불확실성을 나타내는 척도다. 즉 cross entpry는 두 확률분포 간의 차이를 구하기 위해 사용한다. 머신러닝에서 실제 데이터의 확률분포와 모델이 예측한 확률분포 간의 차이를 구하는 것이다. Cross Entropy는 다음과 같은 함수로 정의된다.

$\displaystyle H_{p,q}(x) = -\sum_{i=1}^n p(x_i)\log(q(x_i))$

위 수식에서 $p(x)$는 실제 데이터의 확률 분포를 의미하며 $q(x)$는 모델이 예측한 확률분포 분포를 의미한다. 이를 활용하여 머신러닝에선 손실함수로 사용할 수 있다. 데이터셋으로부터 실제 확률분포인 $p(x)$를 계산할 수 있고 만든 모델로 예측을 통해 $q(x)$를 알 수 있기 때문이다. 이 둘 간의 차이를 손실로 두어 이 손실이 줄어드는 방향으로 학습하는 것이다.

간단한 예시를 통해 크로스 엔트로피를 계산해보자. 만약 A, B 두사람이 있고 한 개의 상자안에 있는 RGB 색상을 갖는 공이 $0.8, 0.1, 0.1$의 비율로 들어가 있다고 가정하자. 하지만 A는 직감적으로 $0.6, 0.2, 0.2$의 비율로 들어 있을 것 같다 예측했고 B는 $0.4, 0.3, 0.3$으로 들어 있을 것 같다 예측할 경우 cross entropy는 다음과 같이 계산된다.

$\displaystyle H_{p, q}(x) = - \left({8\over 10} \log({6\over 10}) + {1\over 10} \log({2 \over 10}) + {1\over 10}\log({2 \over 10})\right) = 0.3173 $

$\displaystyle H_{p, q}(x) = - \left({8\over 10} \log({4\over 10}) + {1\over 10} \log({3 \over 10}) + {1\over 10}\log({3 \over 10})\right) = 0.4230$


A의 예측은 0.3173이고 B의 예측은 0.4230이다. 즉 예측과 멀어지면 멀어질수록 cross entropy가 증가하는 것이다. 이러한 수식을 이용해 ML/DL에서 cross entropy 값이 줄어드는(불확실성이 줄어드는) 방향으로 학습을 진행한다.


KL Divergence란?

쿨백-라이블러 발산(Kullback-Leibler Divergence, KLD)은 두 확률분포 간의 차이를 측정하는 함수다. 두 확률분포 간의 차이는 $H_{p, q}(x) - H(x)$로 계산한다. 즉 크로스 엔트로피에서 엔트로피를 빼준 값이 KL Divergence 값이다.

$\displaystyle H(x) = -\sum_{i=1}^n p(x_i)\log(p(x_i))$
$\displaystyle H_{p,q}(x) = -\sum_{i=1}^n p(x_i)\log(q(x_i))$

$\displaystyle KL(p || q) = H_{p, q}(x) - H(x) = \sum_{i=1}^n p(x_i) \log {p(x_i)\over q(x_i)}$


두 확률분포는 $p(x), q(x)$로 표현하며 각각 사전 확률분포, 사후 확률분포이다. 달리 말해 $p(x)$는 실제 확률분포고 $q(x)$는 예측 확률분포이다. KL Divergence의 수식은 다음과 같이 이산형과 연속형으로 나뉘어 정의된다.

$KL(p || q) = \begin{cases} \displaystyle \sum_{i=1}^n p(x_i) \log{p(x_i) \over q(x_i)} \mbox{(이산형)} \\ \int p(x) \log{p(x) \over q(x)}dx \mbox{(연속형)} \end{cases}$

 

예측 확률분포인 $q(x)$가 실제 확률분포인 $p(x)$에 가까이갈수록 KL Divergence 값은 0에 가까워진다. 그렇다면 Cross Entropy와 KL Divergence의 차이점은 무엇일까? 둘 다 공통적으로 두 확률분포 간의 차이를 측정하는 척도이자 함수이다. KL Divergence를 최소화하는 것은 Cross Entropy를 최소화하는 것과 같다. 하지만 다른 점은 KL- Divergence 내의 $p(x)\log p(x)$는 실제 확률분포로서 알 수 없는 분포다. $H(x)$를 모르므로 KL-Divergence를 손실함수로 적용할 수 없다. 따라서 이를 제외하고 남은 $-p(x)\log q(x)$인 cross entropy를 사용한다.

 

 

Reference

[1] [머신러닝] 크로스 엔트로피(cross entropy) (rcchun)
[2] Cross-entropy 의 이해: 정보이론과의 관계 (DEEPPLAY)
[3] CrossEntropy와 KL-divergence (Jeff_Kang)

+ Recent posts