-
[정보이론] 3. Cross Entropy, KL-DivergenceML Theory 2024. 7. 8. 00:39
두 확률분포의 차이를 어떻게 재 볼 수 있을까요?
Cross entropy, KL-divergence 를 다뤄봅니다.
들어가기에 앞서
정보이론 2편의 글 에서 entropy를 정보량의 기댓값, 즉,
$$
\mathcal{H}(x) = E[h(x)] = E[log_{2}\frac{1}{p(x=a)}]
$$으로 정의하였습니다.
날씨 예보 v2
집에 누워 날씨예보를 보고 있는 우리 모습을 또 한번 더 상상해 봅니다.
이번엔 부산의 날씨만 예측하려 합니다. 부산 날씨가 워낙 변화무쌍해서, 기상청이 날씨에 대한 읋은 예측은 항상 하지는 못합니다. 그래서 예보관을 여럿 두고 있는데요, 예보관들은 날씨에 대해 다음과 같은 확률을 가지고 있다고 믿고 예보를 한다고 해 봅시다.
Weather 맑음 바람 비 눈 Prob. (부산) 0.3 0.4 0.2 0.1 예보관 1 0.25 0.25 0.25 0.25 예보관 2 0.2 0.1 0.3 0.4 예보관 3 0.31 0.39 0.19 0.11 효율적인 정보전달
우선, 특정 확률을 믿고 있다는 것이 무슨 이야기일까요?
기상청은 집으로 정보를 전달합니다. 효율적인 정보 전달을 하기 위해선 전달되는 정보의 단위인 $bit$의 양을 조절해야 합니다. 어떻게 하는게 효율적인 정보전달 일까요?
우선 4가지 case가 있다면, 가장 간단히 생각해볼 수 있는 건 아래의 조합일 겁니다.
Weather 맑음 바람 비 눈 code1 00 01 10 11 예를들어, 일주일치 예보인 "바람 바람 맑음 바람 맑음 비 눈" 을 전달하기 위해선, "01010001001011" 로 전달하면 됩니다.
이 경우 모든 case에 대해 동일하게 두자리의 코드, 2bit를 쓰고 있습니다. 일주일치 예보에는 총 14bit를 사용했네요.
하지만 이는 코드의 낭비일 수 있습니다. 부산은 바람이 빈번하게 불기 때문에, 바람이 온다는 소식을 전달하는 것에 짧은 코드를 부여하고, 반대로 눈이 적게 오기 때문에 눈이 온다는 소식에 적은 코드를 부여하면 조금 더 효율적인 정보전달이 가능합니다. 예를들어, 다음과 같이 말입니다.
Weather 맑음 바람 비 눈 code2 00 1 10 010 이 경우 동일한 "바람 바람 맑음 바람 맑음 비 눈" 은, "110010010010" 으로 전달하면 되고, 총 12bit가 사용됩니다.
(ref: https://www.youtube.com/watch?v=eHGqNvkL4n4&list=PLruBu5BI5n4aFpG32iMbdWoRVAA-Vcso6&index=4)
즉 특정 확률을 믿는다는 것은, 그 확률에 상응하는 정보량 만큼의 $bit$를 해당 사건에 부여한다는 것입니다.
예를 들어 비가 오면, 예보관은 본인의 믿음 (=확률) 에 상응하는 정보량만큼의 $bit$를 부여했고, 그만큼의 $bit$를 우리에게 전달하게 됩니다.
당연하게도, 똑같은 정보를 전달함에 있어, 전달하는 $bit$는 적으면 적을수록 효율적인 정보 전달이 되겠습니다.
예보관이 전달하는 정보의 양
Weather 맑음 바람 비 눈 Prob. (부산) 0.3 0.4 0.2 0.1 예보관 1 0.25 0.25 0.25 0.25 예보관 2 0.2 0.1 0.3 0.4 예보관 3 0.31 0.39 0.19 0.11 다시 돌아와서, 예보관들은 위의 확률을 믿습니다.
우선 entropy부터 구해봅니다. entropy는 기상청이 우리 집으로 전달해주어야 하는 $bit$의 기댓값입니다.
$$E[h_{busan}(x)]=0.3 \cdot \log_2 \frac{1}{0.3}+ 0.4 \cdot \log_2 \frac{1}{0.4} +0.2 \cdot \log_2 \frac{1}{0.2} +0.1 \cdot \log_2 \frac{1}{0.1}=1.846\ bits $$
예보관 1은 모든 날씨가 균등한 확률로 발생한다 믿습니다. 예보관 1이 우리 집으로 전달할 것으로 보이는 $bit$의 수는 다음과 같이 계산할 수 있습니다.
$$E[h_{busan-fc1}(x)]=0.3 \cdot \log_2 \frac{1}{0.25}+ 0.4 \cdot \log_2 \frac{1}{0.25} +0.2 \cdot \log_2 \frac{1}{0.25} +0.1 \cdot \log_2 \frac{1}{0.25}=2\ bits $$
$1.846\ bits$ 로 전달 가능한 정보를 $2\ bits$로 전달하고 있는 모습입니다.
예보관 2은 실력이 좋지 못해서, 실제 관측값과 정 반대되는 믿음을 가지고 있습니다. 예보관 2이 우리 집으로 전달할 것으로 보이는 $bit$의 수는 다음과 같이 계산할 수 있습니다.
$$E[h_{busan-fc2}(x)]=0.3 \cdot \log_2 \frac{1}{0.2}+ 0.4 \cdot \log_2 \frac{1}{0.1} +0.2 \cdot \log_2 \frac{1}{0.3} +0.1 \cdot \log_2 \frac{1}{0.4}=2.5049\ bits $$
낭비가 더 심하네요. $1.846\ bits$ 로 전달 가능한 정보를 $2.5049\ bits$로 전달하고 있는 모습입니다.
예보관 3는 실력이 좋습니다. 실제 관측값과 거의 유사한 믿음을 가지고 있습니다. 예보관 3이 우리 집으로 전달할 것으로 보이는 $bit$의 수는 다음과 같이 계산할 수 있습니다.
$$E[h_{busan-fc3}(x)]=0.3 \cdot \log_2 \frac{1}{0.31}+ 0.4 \cdot \log_2 \frac{1}{0.39} +0.2 \cdot \log_2 \frac{1}{0.19} +0.1 \cdot \log_2 \frac{1}{0.11}=1.8479\ bits $$
효율적인 정보전달입니다. $1.846\ bits$ 로 전달 가능한 정보를 $1.8479\ bits$로 Entropy와 대동소이합니다.
Cross Entropy (CE)
위에서 구한 것이 바로 CE 입니다.
실제 분포가 $P(X)$를 따르고 (날씨), 예측한 분포가 $Q(X)$를 따를 때 (예보관들의 예측), 얼마나 많은 $bit$가 전달될 것인가? 를 측정합니다. Cross Entropy는 다음과 같이 정의할 수 있습니다:
Discrete한 경우에는,
$$
\mathcal{H}(P, Q) = \Sigma_{i=1}^{N}p_{x_i}log_{2}{\frac{1}{q_{x_i}}}
$$
로 구할 수 있으며,Continuous한 경우에는,
$$
\mathcal{H}(P,Q) = \int_{\mathcal{X}}p_{x_i}log_{2}{\frac{1}{q_{x_i}}}d{\mathcal{X}}
$$
와 같이 구할 수 있습니다.다음과 같은 특징들을 생각해볼 수 있습니다.
- 예측 $Q(X)$가 실제 분포 $P(X)$와 가까우면, CE는 낮습니다.
- CE가 낮으면 좋습니다. 효율적인 정보 처리를 하고 있다는 이야기니까요.
- CE는 Entropy 보다는 항상 크거나 같습니다. Q가 정확히 P와 같을 때, CE=Entropy 입니다.
- (ML/DL에서) CE를 줄인다는 건, 모델이 예측하는 분포 $Q(X)$를 실제 분포 (데이터의 분포) $P(X)$에 가깝게 만든다는 이야기입니다.
Kullback-Leibler Divergence (KLD)
CE를 이해하셨다면, KLD는 쉽습니다.예측 분포를 $Q(X)$, 실제 분포를 $P(X)$ 라고 할 때, KLD는 우선 다음과 같이 정의합니다.
Discrete한 경우:
$$
KLD(P || Q) = \Sigma_{i=1}^{N}p_{x_i}log_{2}{\frac{p_{x_i}}{q_{x_i}}}
$$Continuous한 경우:
$$
KLD(P || Q) = \int_{\mathcal{X}}p_{x_i}log_{2}{\frac{p_{x_i}}{q_{x_i}}}d{\mathcal{X}}
$$이 식은 로그의 성질을 활용해 쉽게 다음과 같이 정리해볼 수 있습니다 (discrete나 continuous나 같습니다):
$$ KLD(P||Q) =\mathcal{H}(P, Q)-\mathcal{H}(P)$$
즉, KLD는 CE에서 실제 분포의 entropy를 뺀 것입니다.
위의 날씨 예보관 예시에서는, 날씨라는 정보를 전달함에 있어서 이상적으로는 entropy만큼의 $bit$를 필요로 하고, 예보관들의 믿음이 완벽하지는 않기에 cross entropy만큼의 $bit$를 사용하는데, 이 둘의 차이를 $bit$로 수치화 한 것이 KLD이죠.
Wrap up
Cross Entropy는 true distribution $P(X)$와 estimation $Q(X)$가 있을 때, 전달하게 될 information content의 기댓값을 $bit$로 수치화한 것이며, KLD는 CE에서 $P(X)$의 entropy를 뺀 것, 즉 $P(X)$를 $Q(X)$로 근사시켰을 때 얼마 만큼의 $bit$가 추가로 사용되었는지를 측정합니다..
정보이론 컨텐츠와 관련하여 David MacKay 교수님의 "Course on Information Theory, Pattern Recognition, and Neural Networks" 강의, Youtube Aurélien Géron님의 "A Short Introduction to Entropy, Cross-Entropy and KL-divergence" 에서 많은 직관을 얻었음을 밝힙니다.
글의 대표 이미지는 ChatGPT 4 (DALL-E) 를 통해 생성하였음을 밝힙니다.
'ML Theory' 카테고리의 다른 글
[정보이론] 2. Entropy (2) 2024.01.08 [정보이론] 1. 정보를 측정하는 방법 (2) 2024.01.07