Home
🌪️

정보 : Cross Entropy와 KL Divergence란 ?

0. 들어가며

Cross Entropy는 딥러닝에서 아주 기초적인 개념이고, 모르면 안되는 개념이다.
여러번 공부한 내용이지만, 그냥 그런갑다 하고 넘어가서 명확히 정리를 해 본적은 없었다.
회사에서 Regression Task만 하다가, 최근 VAE를 건드리는 일이 있었는데 이 내용이 기억이 안났다.
누군가 개념을 설명하라고 하면 못할것 같아서 이 참에 다시 정리해보려고 한다(2022/01/09)

1. Entropy

정보의 양

딥러닝에서 사용하는 Entropy 는 정보이론에서 출발한 개념이다.
정보이론은 응용 수학의 한 분야로 정보의 전달이나 저장을 위해 정보의 양 자체를 측정하는 학문이다.
정보를 정량화 하기위한 원리는 불확실한 사건일수록, 즉 가능한 결과가 많을 수록 정보량이 크다는 것이다.
이 개념은 특정 정보를 표현하기 위해 필요한 질문의 수로 부터 출발했다. 예를 들어서 설명하면
[0,1] 로만 정보를 주고 받을 수 있는 통신 상황을 가정해 보자.
1. 동전 던지기 5회의 결과를 주고 받아야 한다고 생각해보자.
솔루션 : “앞면인가요? 맞으면 0, 틀리면 1을 보내주세요”
이러면 5번의 질문으로 서로 완전한 정보를 주고 받을 수 있다.
2. 주사위 던지기 5회의 결과를 주고 받아야 한다고 생각해보자.
솔루션 : ”3보다 큰가요? → 5보다 큰가요? ⇒ ...” (Binary Search)
최소 2번, 최대 3번 물어보면 1회의 주사위 던지기 결과를 알 수 있다.
주사위 던지기 5회 * 평균질문 2.5회 즉 약 12.5번의 질문이면 정보를 주고 받을 수 있다.
3. 알파벳 5개를 주고 받아야 한다고 생각해보자.
솔루션 : “앞 절반(A~M)에 속하나요? ⇒ ...” (Binary Search)
이때 필요한 질문의 갯수를 다음과 같은 공식으로 표현할 수 있다.
2질문=262^{질문} = 26질문=log226질문 = log_226질문=4.7질문 = 4.7
알파벳 5개 * 평균질문 4.7회 즉 23.5번의 질문이면 정보를 주고 받을 수 있다.
이 내용을 일반화 한 것이 정보량이다.
이 개념을 정립한 논문에선 정보를 HH, 횟수를 nn, 가능한 결과의 수를 ss로 표현해 다음과 같은 식을 세운다.
H=nlog(s)H = nlog(s)

엔트로피

정보의 양이 무엇인지 배웠으니, 엔트로피에 대해 알아보자
[1,2,3,4] 뽑는 기계가 있고 여전히 [0,1] 로만 통신한다고 가정해 보자
기계 A는 조편성 용도로 쓰이며, 1,2,3,4 를 모두 동일한 확률(0.25)로 뽑는다.
기계 B는 경품 추첨 용도로 쓰이며, {1 :0.125, 2 : 0.125, 3:0.25, 4:0.5} 확률로 뽑는다.
이 기계의 뽑기 결과를 전달하기 위해 질문 갯수를 계산한다고 생각해 보자
기계 A는 위의 식을 그대로 활용하면 된다. log24log_242번의 질문이면 된다.
기계 B는 조금 복잡하다. 우선 모든 숫자가 나올 확률이 동일하지 않기때문에 다르게 접근해야 한다.
“4(등)이 뽑혔나요? ⇒ 3(등)이 뽑혔나요 ⇒ ...”
이러면 위의 정보량 식이 작동하지 않고 확률과 필요한 질문 횟수를 곱해서 계산해야 한다.
p(4)1+p(3)2+p(2)3+p(4)3p(4)*1 + p(3) * 2 + p(2) *3 + p(4) *3 = 1.75번
만약 각 기계의 100회 결과를 전달해야한다면?
기계 A : 약 200번의 질문 / 기계 B: 약 175번의 질문
필요한 질문의 갯수가 정보량이므로 기계 A가 기계 B보다 생산하는 정보량이 크다고 말할 수 있다.
즉 결과가 랜덤할수록(불확실할수록) 정보량이 커진다고 정의할 수 있으며
수학자 섀년이 이러한 정보량에 대한 측정을 ‘엔트로피’ 라고 명명했으며 단위를 bit로 정의했다.
그 관계를 다음과 같은 공식으로 표현할 수 있다.
H=log2(1발생확률)=질문갯수H = log2({1\over 발생확률}) = 질문갯수
가능한 결과의 수 ss발생확률의 역수와 같다는 것이다.
이 식을 우리가 가정한 이산확률분포 아래에서 횟수 n에 대해 일반화 하면 다음과 같다.
H=Σ(발생확률)log2(1발생확률)H = \Sigma(발생 확률) * log2(\frac{1}{발생확률})
H=Σipilog2(1pi)H = \Sigma_ip_{i}log2(\frac{1}{p_{i}})
H=Σipilog2(pi)H = -\Sigma_ip_{i}log2({p_{i}})
위 식이 엔트로피에 대한 공식이다.
결국 엔트로피는
(1) 특정 사건의 정보를 표현하기 위해
(2) 세워진 최적의 질문 전략 아래에서
(3) 필요한 질문의 갯수의 기댓값이다.

2. Cross Entropy

질문 전략

위에서 말한 기계 A,B를 P,Q로 이름을 바꿔서 크로스 엔트로피를 설명하려 한다.
숫자마다 확률이 다른 기계이며 {1 :0.125, 2 : 0.125, 3:0.25, 4:0.5} 확률로 뽑는다.
엔트로피(H)(H)는 1.75이다.
4개 숫자의 확률이 동일한 기계 ⇒ 이산 Uniform Distribution을 따르는 기계이며
엔트로피(HH)는 2다.
만약 기계 Q의 질문 전략 (확률분포)을 P에 적용하면 어떻게 될까?
기존은 H=1.75H = 1.75 였으나
이제는 0.5log(4)+0.25log(4)+0.125(2)log(4)0.5 * log({4}) + 0.25 * log({4}) + 0.125*(2) * log({4}) ⇒ 2로 엔트로피가 커졌다.
만약 기계 P의 질문 전략 (확률분포)을 Q에 적용하면 어떻게 될까?
기존은 H=2H = 2 였으나
이제는 0.25log(8)+0.25log(8)+0.25log(4)+0.25log(2)0.25 * log(8) + 0.25 * log(8) + 0.25*log(4) + 0.25*log(2) ⇒ 2.25로 엔트로피가 커졌다.
이렇게, 특정 문제에 대해 특정 전략을 쓸 때 질문 갯수의 기댓값이 크로스 엔트로피 이다.
이때 문제도 확률 분포이고, 전략도 확률 분포이다.
당연히 Cross Entropy가 가장 작아지는 지점은 결국 최적의 전략(Entropy)일때 이다.
수식으로 크로스 엔트로피를 표현하면 다음과 같다.
H(p,q)=Σipilog2qiH(p,q) = - \Sigma_{i}p_ilog_2q_{i}
일반적으로 머신러닝에서 pip_i 가 정답 확률, qiq_i가 예측 확률이 된다.

3. KL - Divergence

분포의 차이

KL -Divergence는 분포의 차이를 계산하는 함수라고 자주 설명한다.
이 설명을 조금 더 명확히 바꾸면 다음과 같다.
“어떤 이상적인 분포에 대해 그 분포를 근사하는 다른 분포로 샘플링하면 발생할 수 있는 엔트로피 차이
즉 크로스 엔트로피 개념과 깊게 연관되어 있는데, 두 개념의 수식을 통해 연관성을 찾아보자.
KL - Divergence 수식
DKL(pq)=ip(i)log2p(i)q(i){\displaystyle D_{\mathrm {KL} }(p\|q)=\sum _{i}p(i)\log_2 {\frac {p(i)}{q(i)}}} (Discrete)
Cross Entropy 수식
H(p,q)=ipilog2qi{\displaystyle H(p,q) = -\sum_ip_ilog_2q_{i}}
H(p,q)=H(p)+ip(i)log2p(i)q(i){\displaystyle H(p,q) = H(p) + \sum _{i}p(i)\log_2 {\frac {p(i)}{q(i)}}}
H(p,q)=H(p)+DKL(pq){\displaystyle H(p,q) = H(p) + D_{KL}(p\|q)}
Cross Entropy에서 H(p)H(p)를 뽑고 나머지를 정리하면 KL-Divergence의 수식이 나온다.
이를 통해 얻을 수 있는 인사이트는 다음과 같다.
1.
H(p,q)=H(p)+DKL(pq){\displaystyle H(p,q) = H(p) + D_{KL}(p\|q)}
Cross Entropy는 정답분포의 엔트로피와 예측분포와의 분포차이의 합이다
2.
DKL(pq)=H(p,q)H(p)D_{KL}(p\|q) =H(p,q) - H(p)
KL-Divergence는 예측분포로 정답을 샘플링했을때의 엔트로피와 정답 분포의 엔트로피의 차이다.
딥러닝으로 돌아와서, Cross Entropy를 Loss로 사용한다면
H(p)H(p)는 정답분포의 엔트로피 즉, 상수이므로 KL-Divergence를 Loss로 사용하는 것 과 같다.

KL - Divergence의 특징

KL - Divergence는 항상 0보다 크거나 같다 ( DKL(pq)0D_{KL}(p\|q)≥0 )
위의 크로스 엔트로피 설명에서 알 수 있듯이, H(p,q)H(p,q)q=pq =p 일때 가장 작아진다.
H(p,q)H(p,q)H(p)H(p) 이므로 KL-Divergence는 직관적으로 0보다 크거나 같을 수 밖에 없다.
KL - Divergence는 거리가 아니다. DKL(pq)DKL(qp)D_{KL}(p\|q)≠ D_{KL}(q\|p)
KL - Divergence에 대해 가장 자주 들을 수 있는 설명은 “(1)분포의 차이고 (2)거리가 아니다” 이다.
거리가 아닌 이유는 KL-Divergence의 비대칭적인 특징 때문이다.
H(p,q)H(p)H(q,p)H(q)H(p,q) - H(p) ≠H(q,p) - H(q)DKL(pq)DKL(qp)D_{KL}(p\|q) ≠ D_{KL}(q||p)
만약 거리라면 pp 부터 qq를 재나, qq 부터 pp를 재나 값이 같아야 하는데 그렇지 않다.

4. 정리

1.
엔트로피는 정보의 양이다.
2.
엔트로피는 불확실성(랜덤성)이 커질수록 증가한다.
3.
크로스 엔트로피는 특정 분포를 다른 분포로 가정하고 측정한 불확실성이다.
4.
크로스 엔트로피는 엔트로피 + KL-Divergence 이다.
5.
KL - Divergence는 두 분포의 차이를 계산한다.
6.
KL - Divergence는 크로스 엔트로피 - 엔트로피이다.
7.
KL - Divergence는 항상 0보다 크거나 같다.
8.
이러한 특징 때문에 딥러닝에서 확률분포를 모델링할때 Loss 함수로 사용된다.
9.
크로스 엔트로피를 Loss로 활용하면 엔트로피는 상수이므로 KL - Divergence를 Minimize하는 것이다.