Study/Data Science

KL Divergence 정리

Railly Linker 2025. 4. 10. 19:39

- 사전지식으로 필요한 정보이론 기초와, cross entropy에 대한 것은,
링크를 참고하세요.

- 정답 확률분포와 예측 확률분포에 대해 먼저 이야기해 봅시다.
정답 확률분포 p는, 말 그대로 정답입니다.


딥러닝의 분류문제로 보자면,
[1,0,0,0]

과 같은 정답 레이블로,
레이블이 [강아지, 고양이, 거북이, 새]일 확률을 나타낸 것이라면,
위 레이블은 '강아지' 100퍼센트 라는 것이죠.

이것의 엔트로피는 0입니다.
계산할 것도 없이, 이미 가장 큰 확률이 강아지인데다가, 다른 것으로 판단될 여지가 없죠.


그러면 예측 확률분포 q는, 딥러닝 모델이 출력한 확률값으로 합시다.
모델이 학습은 해서 대충 알기는 한데,
데이터로 판단했을 때, 뭔가 애매한 부분도 존재해서,
[0.8, 0.1, 0.06, 0.04]

이렇게 판단하는 경우가 존재할수도 있다고 생각할수 있습니다.

이 경우 엔트로피가 늘어납니다.

즉, 평균 정보량이 늘어나는 것이고, 데이터를 판단하기 위해 물어봐야할 횟수가 늘어난다고 해석할수도 있습니다.

- 이렇게 서로 다른 확률분포를 가질때,
그냥 엔트로피로는 둘 사이의 관계를 규명할수 없는데,
비교대상인 정답 p의 확률과, 비교하려는 예측값 q의 정보량을 가지고 서로를 비교하는 cross entropy를 사용하면 됩니다.

sum(p(x) * log2 1/q(x))

즉, 정답에 벗어나게 설계한 정보량을 사용했을 때, 원래 정답을 표현할 때의 평균 정보량을 알아보는 것으로,
cross entropy는, 정답의 entropy보다 크거나 같을 것입니다.(이건 법칙입니다. 엔트로피 자체가 최소한의 정보량으로 데이터를 표현하고 전달하는 것을 얻어낸 값이므로, 잘못된 예측변수의 정보량을 사용하면, 추가비용이 발생합니다.)

확률로 곱해지는 원본이 p(x)로 존재하기에, 정보량이 이에 맞춰져야 가장 효율적인 정보량이 될텐데,

잘못된 상태의 정보량과 이상적인 상태의 정보량의 차이를 계산하면, 잘못된 확률분포로 인한 추가비용이 정보량으로 산출될 것입니다.

- 바로 위의 내용이 KL Divergence입니다.
수식으로는,


sum(p(x) * log2 1/q(x)) - sum(p(x) * log2 1/p(x))


로,


이를 정리하면, log의 뺄샘은, 값의 나눗셈으로 변화하니,

sum(p(x) * log2 p(x)/q(x)) 

로 깔끔하게 나타낼수 있습니다.

위에서 설명했듯, 잘못된 확률변수로 인한 정보량과, 이상적인 확률변수의 정보량을 빼주어, 현재 추가 발생한 비용이 되는 정보량을 얻어내는 것입니다.

- 연속값에 대해 이를 적용할 시에는,
엔트로피 때 설명한 것과 같이 하시면 됩니다.

p(x), q(x) 내의 x값이 이산적이지 않으니, 이를 미세한 변화값인 dx로 두고, 적분을 한다는 개념으로, 위와 동일한 공식을 사용해 계산하시면 됩니다.

- KL Divergence 특징
1. KL(p|q) != KL(q|p)입니다. 즉, 정답 확률분포와 예측 확률분포가 서로 교체된다면, KL Divergence 값도 다르게 나옵니다. p와 q가 대칭이 아니고, 계산에 사용하는 정보량과 확률을 따로 사용하기 때문입니다.

2. KL(p|q) >= 0입니다. 내부 값의 부호를 결정짓는 요소들중, 확률은, 0에서부터 1 사이의 실수이고, log 함수의 경우에도, 이것이 음수가 나오지는 않습니다.

// 추가로, 딥러닝에서 손실함수로 KL Divergence를 사용하지 않고 Cross Entropy를 사용하는 이유를 봅시다.

쉬운 이유인데, 그냥 CEE가 연산량이 적어서입니다.

KLD는, CEE를 구하고, 거기에 이상적인 확률분포의 엔트로피를 구해서 서로 빼주는 것까지 하니 연산량이 많아집니다.

KLD가, 일치할 경우의 손실값을 0으로 반환하고, 보고 이해하기도 편하지만,
CEE는, 일단 손실함수로써 그 기능을 수행할 요건들을 모두 갖추고 있으니, 연산량을 중시하는 것이 당연합니다.

게다가, 딥러닝 학습시, KLD를 미분했을 때에, CEE 부분이 아닌, 이상적인 상태의 비교값은, 우리가 학습시킬 파라미터와는 전혀 관련이 없으니, gradience에서 사라지기도 하고, 그런 의미에서도 CEE만 사용하지, 굳이 KLD를 사용할 이유가 없어지는 것입니다.

그래도 이해하기 쉽고 가시성 있다는 특징 덕분에, 사람을 상대로 한 자료로는 KLD가 더 좋습니다.