본문 바로가기

카테고리 없음

Cross Entropy & KL-divergence

1. 기본 이론(정보 이론)

정보이론에서는 특정 메시지의 정보량을 확률을 이용하여 측정한다. 즉, 같은 말이지만, 어떤 사건이 일어날 확률을 추정할 수 있다면 그 사건에 대한 정보량을 측정할 수 있다.

여기서 정보량이라는 것은 너무 자주 등장하거나 뻔한 정보일 때 그 정보의 량은 적다고 치부하고, 매우 드물게 발생하는 메시지(내용)이라면 정보량이 매우 크다고 본다.

정보량은 -log를 취해서 그 정보를 얼만큼으로 나타낼 수 있는가로 나타낼 수 있다. 

색깔에서 256색을 나타낼 때는 0~255의 숫자로 나타낼 수 있다. 이건 다시 2의 8제곱(2^8)으로 나타낼 수 있다. 컴퓨터 bit로 따지면, 8bit만 있으면 된다.. 00000000~11111111. 즉 정보량은 8이다.

확률에선 분수이므로, 마이너스(-)를 붙여 -log(확률)으로 정보량을 측정한다. 확률 p(x) = 1/8 이라 가정하면, -log(1/8) = 3이 된다.

이제 엔트로피(Entropy)를 알아본다.

자기정보(=정보량)은 특정 사건 e_{i}의 정보량을 측정하는 반면 엔트로피는 확률분포무질서도 또는 불확실성을 측정한다.

 

 

2. Cross Entropy와 KL Divergence

자세한 정보는 많은 블로그에서 자세히 설명하니 그곳으로 가길........

아주 간단히 정리하면, 

Cross Entropy는 정답확률 p(x)를 예측확률 q(x)로 나타내기 위한 엔트로피 양을 나타내고, p(x)와 q(x)에 대한 정보량을 곱해서 기대값을 구한 것이다.

KL-Divergence는 "예측으로 인한 정보로 최적화되지 않은 분포 q(x)에서 정보량을 최소한으로 나타내는 정답 분포 p(x)를 빼므로써, 두 정보량의 차이를 구한 것. (수학적으로 거리개념으로 성립은 안하지만 비슷하게 사용됨)

 

본격 정리.

두 개념을 설명하려면 KL부터 설명하는게 더 쉬운 듯.

 

Cross Entropy = H(P) + KL+Divergence

이 식을 분해(해석) 해보라. 일단 앞에 H(P)는 없다고 생각하라. 뒷 부분이 KL-divergence인데 바꿔보자.

log안에 분수이므로, p(x)와 p(x)에 대한 cross entropy 빼기 p(x)와 q(x)에 대한 엔트로피로 나타낼 수 있지만..

cross entropy가 아니다. 앞에서 말했다싶이 엔트로피는 마이너스를 붙여야된다. 마이너스를 각각 두 번씩 붙여보자.

그럼 부호가 바뀐 cross entropy가 각각 만들어진다. 그럼 앞서 쪼기 위에서 설명했던 KL-Divergence 내용대로 식이 만들어진다. 

자, 마지막으로 아까 제쳐두었던, H(p)는 그냥 p에 대한 엔트로피이다.. 고정이다. 변하지 않는다.

 

정리하면.

확률분포 P와 Q의 cross-entropy = P의 entropy + P와 Q의 분포 차이(=P와 Q간의 KL 다이버전스)

P는 딥러닝에서 정답(=Label)이 될 것이고, Q는 딥러닝 결과로써 예측 값이 된다.

P(정답)은 학습을 진행하든 하이퍼파라메터를 변경하더라도 항상 고정이므로 결국 뒤 항 KL-Divergence의 값 변화로 Cross-entropy가 결정된다. 따라서 KL-Divergence를 loss function으로 사용할 수도 있지만 대부분 cross-entropy를 사용한다.

 

3. Practice

cross entropy 는 정답 레이블 P(x) * log(Q(x)) 를 sum하고 마이너스를 취한다.

Q(x)는 불안정한 분포, 최적화되지 않는 분포, 딥러닝으로 따지면 모델이 예측한 결과.

 

아래 실제 CE 계산식을 보자.

(원문 링크: stackoverflow.com/questions/44138324/binary-crossentropy-to-penalize-all-components-of-one-hot-vector , one-hot encoding 에서는 왜 binary CE를 사용 안하는지에 대한 질문과 답)

여기서는 one-hot-encoding 을 기준으로 한다.

Normal Case for 1-Label-Multiclass-Mutual-exclusivity-classification:
################
pred            = [0.1 0.3 0.2 0.4]
label (one hot) = [0   1   0   0]
costfunction: categorical crossentropy 
                            = sum(label * -log(pred)) //just consider the 1-label
                            = 0.523

one-hot encoding Label에 대한 prediction과 CE 결과.

pred 값이 상대적으로 크다면 예) log(0.8) = -0.3219... (음수) 이므로, -log(pred) = 0.3219... 이 됨.

pred 값이 상대적으로 작다면, 예) log(0.1) = -3.3219 (음수) 이므로, -log(pred) = 3.3219 이 됨.

나머지 계산은 결국 1을 곱하면 끝나므로, cross entropy loss는 예시와 같이 예측값이 작을수록 loss가 커짐을 알 수 있음.

 

 

 

[1] www.youtube.com/watch?v=7GBXCD-B6fo

[2] 기계학습, 한빛 아카데미