오늘은 책 머피의 머신러닝 1의 6장에 해당하는 내용을 다뤄본다. 엔트로피의 개념부터 시작해서 KL divergence까지 전반적인 흐름을 수식을 통해 알기 쉽게 설명하는 것이 목적이다.
0. Entropy
Entropy
엔트로피는 불확실성을 의미한다. 과학에서 쓰이는 엔트로피를 보면 동일한 부피에서 고체의 엔트로피는 낮고 기체의 엔트로피는 높으며, 낮은 곳에서 높은 곳으로 흐르는 성질이 있다. 머신러닝을 위한 수학에서도 엔트로피는 같은 의미로 쓰인다. 모델을 학습하는 것은 결국 확률을 모델링하는 것이 되는데, 해당 분포가 불확실할수록 엔트로피는 높아진다.
예를 들어 어떤 X가 있는데, 이 X는 초록사과(X=0)인지 빨간사과(X=1)인지에 대한 정보를 갖고 있는 확률 분포라고 생각해 보자. 첫 번째로 X1를 6개의 원소로 이루어진 집합이라 생각해 보자. X1 = {0,0,0,1,1,1}로 빨간 사과 3개, 초록사과 3개가 들어있으므로 이 X1를 '이 친구는 특정한 색을 지닌 사과의 집합이야!'라고 말하기는 불확실하다. 불확실하기 때문에 엔트로피가 높다는 의미다. 반대로 X2= {1,1,1,1,1,0}으로 빨간 사과 5개와 초록사과 1개로 이루어졌다면, 이 X는 빨간 사과의 집합일 확률이 높아진다. 즉 엔트로피가 높다는 것은 해당 확률 분포로 유의미한 결과를 도출하기 어렵다는 것이다.
이렇듯 X의 확률 분포가 비슷비슷해서 불확실성이 높다면 엔트로피(H)가 높고, 반대일 경우는 H가 낮다. 이를 수식으로 나타내면 다음과 같다.
엔트로피를 다른 식으로도 유도해 생각할 수 있는데, 그 방법은 source-code theory다. 분포 X3가 있는데, 이 분포를 압축하고 싶다고 하자. X3= {1,1,1,1,1,1}라면 X3은 위의 X1, X2를 압축하는 것 보단 쉬울 것이다. 굉장히 단순하게 X3을 압축한다면 "'1'이 '6'개" 라는 정보를 담아야 할 것이다. 반면 X1은 "'0'이 '3'개, '1'이 '3'개"라는 정보로 압축해야 한다. X3을 압축하는 게 더 쉬워 보인다. 실제로 H(X3) = 0 으로 엔트로피 값이 작다.
Cross Entropy (CE)
위에서 X의 엔트로피 H(X)를 구해보았다. 이번에는 2개 확률 분포의 엔트로피를 통해, 빨간사과를 빨간 사과로 예측했는지를 볼 것이다. 이번에 X엔 6개가 아닌 단 1개의 사과가 있다. 사과는 90%정도 빨간 색깔이며 10%정도는 초록 빛깔이 도는 사과로, p = {0.9, 0.1}로 정의한다. 이들이 빨간 사과인지 예측한 결과는 q1, q2로 나타낸다. q1는 사과가 30%정도로 빨간 사과일 것이라 예측했다. q2는 80% 빨간 사과일 것이라 예측했다.(q2의 예측결과가 더 정확하다.) 이제 q1, q2의 엔트로피를 p와 함께 나타내보자.
q2의 예측 결과가 더 정확했으며, 이때의 cross entropy는 q1보다 작다. CE 수식은 아래와 같다. p가 실제값, q가 예측값임을 생각하면 딥러닝에서의 cross entropy loss를 의미함을 알 수 있다. 예시를 이어서 설명하면 H(p,q1)은 p를 압축하는 의미로도 해석할 수 있다. 예측분포 q1를 기반으로 했을 때 p의 분포를 알고 싶을 때 적어도 어느 정도(source coding theory에서의 bit)를 봐야 알 수 있냐는 의미다. 압축을 위해 봐야할 bit가 많다(cross entropy가 높다)는 뜻은 그만큼 압축하기 어려우며 p와 q의 분포가 상이하다는 뜻이다.
오늘 든 예시는 빨간사과인지 아닌지(초록사과인지)를 나타내는 이진 분류(binary classification)으로 간주할 수 있는데, bernoulli 분포를 따르는 logistic regression에서의 likelihood에 -를 곱한 값과 동일함을 알 수 있다. 즉, binary cross entropy는 NLL(Negative Log Likelihood)와 수식적으로 동일하다.
기타 엔트로피
Joint Entropy
Joint Entropy는 x, y가 동시에 일어날 확률을 엔트로피로 나타낸 값이다. 엔트로피는 x의 무질서함을 확인했다고 한다면, joint entropy는 동시에 발생하는 x, y의 무질서함을 확인한다. 따라서 수식은 기본 엔트로피 수식의 p(x)를 p(x,y)로 대체한 것과 같다.
x,y가 동시에 일어날 때의 엔트로피이기 때문에 H(x,y)는 각각의 엔트로피를 더한 값보다 클 수 없다. 따라서 확률분포를 섞는다고 해서 엔트로피를 더 키울 수는 없다.
H(X,Y) <= H(X) + H(Y)
Conditional Entropy
이번에는 엔트로피도 베이시안(ex. p(x|y) = p(x,y)/p(y))처럼 식을 변화시킬 수 있음을 확인해 볼 것이다. 조건부 엔트로피는 X가 주어졌을 때의 Y에 대한 값을 구한다. X 기반이기 때문에 이는 P(X)에 대해 p(Y|X)의 엔트로피를 구하는 것과 같다.
식을 전개한 결과 H(Y|X) = H(X,Y) - H(X), 즉 H(X,Y) = H(Y|X) + H(X)임을 도출했다. 여기에 X= X1, Y = X2를 대입해 보면 H(X1,X2) = H(X2|X1) + H(X1)로, chain rule이 엔트로피에도 적용됨을 알 수 있다!
chain rule을 통한 joint entropy를 다음과 같이 구할 수 있다.
1. KL Divergence
서로 다른 분포 p와 q가 있을 때 이 둘이 얼마나 유사한지를 재기 위해서 일반적으로 L1, L2, mahalanobis 등의 distance를 측정하고는 한다. 엔트로피를 이용해서도 p와 q의 유사성을 측정할 수 있다. KL (Kullback-Leibler) Divergence는 p와 q 간의 엔트로피를 측정하여, p와 q의 분포가 동일할수록 0에 가까워지고 그렇지 않을수록 1에 가까워진다. 수식은 다음과 같다.
수식에서 첫번째 항은 p의 엔트로피 -H(p)를, 두 번째 항은 p,q의 크로스 엔트로피 -H(p,q)를 의미함을 알 수 있다. 크로스 엔트로피는 q 분포를 따르는 p의 데이터를 압축할 때의 lower bound를 의미했었다.
KL(p||q)의 값은 항상 0보다 작거나 같은데, 엔트로피가 log 함수로 이루어져있음을 생각한다면 당연한 결과다. log는 볼록함수기 때문에 Jensens Inequality를 통해 ∑(또는 E(평균))하면 ∑(log(x)) <= log(∑(x))를 항상 만족한다. 이를 통해 수식을 전개하면 -KL(p||q)가 항상 0보다 작거나 같음을 아래와 같이 알 수 있다.
KL Divergence & MLE
p가 정해진 분포고 이와 유사한 q를 찾고 있다 가정해 보자. 그러면 우리는 KL(p||q)가 최대한 작을 q를 구하는 것과 마찬가지다.
이때 첫번째 항인 p(x)logp(x) dx 는 상수로 취급할 수 있다. p가 q에 따라 변하지 않는, 정해진 분포이기 때문에 해당값은 변하지 않기 때문이다. 여기에 p의 분포가 선험적 분포라 delta function 기반이라면(값을 가진 지점에서 팍! 튀는 분포를 가지고 나머지 지점에선 0 인 분포를 생각해보자), 식은 아래와 같이 조금 더 정리가 된다.
여기서 알 수 있는 점은 KL(p||q)를 minimize하는 것이 Likelihood(==logq(x))를 maximize하는 것과 동일하다는 것이다. 하지만 대부분의 상황에서 정답으로 간주할 정해진 분포 q가 선험적 분포를 진짜 분포로 갖고 있진 않을 것이다. (정답 분포가 특정 지점에서만 스파이크로 튀는 분포고 나머지가 0 인건 이상하긴 하다.) 이를 보완하기 위해 커널을 쓰는 방법, data augmentation 등을 쓰는 것이다.
Forward vs Reverse KL
이번에는 KL(p||q)와 KL(q||p)의 분포에 대해서 생각해보자. 첫 번째는 forward KL인 KL(p||q)다. KL divergence는 0에 가까울수록 p와 q의 분포가 유사하므로 이 수식에서는 q를 통해 KL을 minimize 하는 것이 목표가 된다. 만약 q(x)가 0이라면 어떨까? 그러면 log p/q 항이 inf로 가며 KL(p||q)의 값은 무한으로 커질 것이다. 그러면 q는 0보다는 커야 하는 제약을 줘야 함을 알 수 있다. 그리고 q는 분모의 위치에 있으므로 분자 p를 포함하는 분포로 가려는 경향이 생긴다.
반대로 reverse KL KL(q||p)는 어떻게 해석할 수 있을까? q를 조절하여 KL값을 minimize하는 것은 여전히 같은 목표다. log p/q값이 무한대로 튀지 않게 하기 위해 이번엔 p(x)가 0만 아니면 된다. p(x) > 0을 만족하며 q가 작을수록 KL 값은 줄어들게 된다. forward KL과는 반대로, q는 p를 포함하는 분포로 가지 않아도 KL을 작게 만들 수 있다. ELBO를 구할 때 와 같이 KL divergnece를 사용하는 경우에서 KL은 이 reverse KL을 사용하곤 한다.
실제분포 p가 bimodal일 때 forward와 reverse KL로 q가 어떤 분포를 따라가는지 아래 그림을 통해 확연히 확인가능하다. (a)가 forward KL, (b),(c)가 reverse KL일 때로 빨간색이 q의 분포를 나타내고 있다.
다음 글에서는 Mutual Information(MI)를 다뤄보고자 한다. 원래 한 글로 entropy-KL-MI를 끝내고 싶었으나 글이 길어져 두 개로 나눌 예정이다.
'머신러닝 > 아맞다' 카테고리의 다른 글
PCA의 완벽한 이론 설명 (0) | 2023.10.29 |
---|---|
Mutual Information 파헤치기 (0) | 2023.10.14 |
linear regression의 완벽한 기초 수식 (0) | 2023.09.30 |
SVD (Singular Value Decomposition) 수식적 이해 (0) | 2023.09.23 |
Eigenvalue Decomposition (EVD)의 수식 기초 (0) | 2023.09.16 |