본문 바로가기
통계

[통계] Cross Entropy, Kullback-Leibler Divergence

by PIAI 2022. 11. 15.

정보량과 엔트로피 링크

 

[통계] 정보량과 엔트로피

정보량이란? 확률이 낮을수록, 어떤 정보일지 불확실하게 되고, 이때 "정보가 많다", "엔트로피가 높다"라고 표현합니다. 예시를 들어봅시다. 저희가 뽑기를 한다고 가정해봅시다. 뽑기에는 1등 1

lcyking.tistory.com

참고

https://velog.io/@rcchun/%EB% A8% B8% EC% 8B% A0% EB% 9F% AC% EB% 8B%9D-%ED%81% AC% EB% A1% 9C% EC% 8A% A4-%EC%97%94% ED% 8A% B8% EB% A1% 9C% ED%94% BCcross-entropy

https://hyunw.kim/blog/2017/10/27/KL_divergence.html

https://angeloyeo.github.io/2020/10/27/KL_divergence.html

 

Cross Entropy

 

Cross Entropy는 딥러닝에서 많이 쓰입니다. 2개 이상의 분류하는 Categorical Cross Entropy , 이진 분류인 Binary Cross Entropy 등 여러 가지에서 쓰입니다. 지난 포스팅에서 말씀드렸듯이 확률이 랜덤 할 경우(모든 확률이 같은 경우)가 가장 높습니다.

예를 들자면 빨간 공을 뽑을 확률 0.33, 파란공을 뽑을확률 0.33, 노란공을 뽑을확률 0.33 일 때 무엇을 뽑을지 예측하지 못하니 Entropy가 가장 높다는 것이지요. Entropy의 수식을 먼저 보겠습니다.

\( H(x) =  - \sum_{i=1}^n p(x_{i})log_{2} p(x_{i}) \)

Entropy는 정보량의 평균입니다. 위에서 무엇을 뽑을지 모호할 때 Entropy값이 제일 올라간다고 말씀드렸습니다. 그럼 만약 저희가 빨간 공만 뽑아야 되는 상황이라면 어떻게 하면 될까요? 당연히 빨간 공만 넣어서 빨간공 뽑을 확률을 1.0, 나머지 뽑을 확률들을 0.0으로 학습시키면 되겠죠? 이렇게 최적의 전략을 사용할 때 Cross Entropy 값이 최소가 됩니다. 이것은 곧 두 확률분포와 직결됩니다. 그럼 학습되야할 목표 확률의 분포가 \( p \)이고, 우리가 현재 학습한 확률의 분포를 \(q \)라고 합니다. 수식을 보겠습니다.

\( H(p, q) = \sum_i p_i log_2 \frac {1} {q_i} \)

= \( - \sum_i p_i log_2 q_i \)

 

위에서 빨간 공만 뽑아야 되는 상황이라고 했죠? 그럼 ['빨강', '파랑', '초록'] 순서일 때 \( p = [1.0, 0.0, 0.0] \)이 되고, \( q = [0.33, 0.33, 0.33] \)이 됩니다. 최적의 전략일 때 Cross Entropy값이 최소가 된다 했죠? 그럼 수식을 하나하나 넣어서 증명해봅시다!

 

  • 기존 전략 \( p = [1.0, 0.0, 0.0] \), \( q = [0.33, 0.33, 0.33] \)
    • \( -p_0 log_2q_0 -p_1 log_2q_1 -p_2 log_2q_2 = -1 * log_2 0.33 -0 * log_2 0.33 -0 * log_2 0.33 = 1.599 \)
  • 수정된 전략 \( p = [1.0, 0.0, 0.0] \), \( q = [0.7, 0.2, 0.1] \)
    • \( -p_0log_2q_0 -p_1log_2q_1 -p_2log_2q_2 = -1 * log_2 0.7 -0 * log_2 0.2 -0 * log_2 0.1 = 0.514 \)
  • 최적의 전략 \( p = [1.0, 0.0, 0.0] \), \( q = [1.0, 0, 0] \)
    • \( -p_0log_2q_0 -p_1log_2q_1 -p_2log_2q_2 = -1 * log_2 1 -0 * log_2 0 -0 * log_2 0 = 0 \)

 

이러한 특성 때문에 머신러닝에 많이 쓰입니다. 예시를 들면 딥러닝에 개와 고양이 분류 문제가 있다 합시다. ['개', '고양이'] 순서로 라벨링이 되어있습니다. 아래 사진을 봅시다.

강아지 이미지

누가 봐도 강아지 이미지이죠? 그럼 원래 라벨링이 학습되야할 목표 확률의 분포 \( p \)가 [1, 0]으로 되어있을 거고, 현재 학습한 확률의 분포 \( q \)는 [0.4, 0.6] 대략 이런 식으로 되어있겠죠(임의로 제가 넣은 겁니다)? 이제 딥러닝의 과정인 손실 함수를 계산해볼까요?

 

  • 기존 전략 \( p = [1.0, 0.0] \), \( q = [0.4, 0.6] \)
    • \( -p_0 log_2q_0 -p_1 log_2q_1 = -1 * log_2 0.4 -0 * log_2 0.6 = 1.321 \)
  •  

 

loss가 1.321이네요. 손실을 0으로 줄이는 것이 가장 좋으니 이것을 0으로 줄이는 방향으로 학습을 진행합니다. 최적의 전략일 때 Cross Entropy값이 최소가 된다고 말씀드렸습니다. 이러한 특성 때문에 딥러닝에 다중 분류 문제에 Cross Entropy를 사용합니다. 현재 주제와 중요하지 않은 내용이니 그냥 듣고 넘기셔도 됩니다!

위의 식은 이산형일 때 사용하고, 연속형일 때는 integral을 사용하여 아래와 같이 적용됩니다.

\( H(p, q) = \int_i p_i log_2 \frac {1} {q_i} \)

= \( - \int_i p_i log_2 q_i \)

 

Binary Cross Entropy

방금 위의 개, 고양이 분류는 라벨이 2가지 밖에 없는 것입니다. 개를 기준으로 잡으면 개면 1 아니면 0으로 하면 됩니다.

\( H(p, q) = -p log \hat {q} - (1 - p) log (1 - \hat {q}) \)

 

흔히 아는 Logistic Regression손실 함수입니다. 위를 보시면 어떻죠? 강아지를 분류한다고 해봅시다!

 

  • 학습되야할 목표 확률의 분포 \( p \)가 1(개)이면 \( H(p, q) = -log \hat {y} \)만 남습니다. (개분 류)
    • 잘못된 전략으 개라고 10% 추정했을 시 \( H(p, q) = -log {0.1} = 3.321 \)
    • 괜찮은 전략으 개라고 80% 추정했을 시 \( H(p, q) = -log 0.8 = 0.321 \)
  • 학습되야할 목표 확률의 분포 \( p \)가 0(고양이)이면 \( H(p, q) = -log (1 - \hat {y}) \)만 남습니다. (고양이 분류)
    • 잘못된 전략으 개라고 90%(=고양이라고 10%) 추정했을 시 \( H(p, q) = -log (1 - 0.9) = 3.321 \)
    • 괜찮은 전략으 개라고 20%(=고양이라고 80%) 추정했을 시 \( H(p, q) = -log (1 - 0.2) = 0.321 \)

 

별로 어려운 이론이 아니죠? 다음에 할 KL_divergence 도 어렵지 않습니다.

 

Kullback-Leibler divergence

 

divergence를 직역하면 발산이라는 뜻입니다. 근데 이 개념이 아니라, 그냥 "차이"를 다른 말로 쓴 것뿐이라네요.

말 그대로 KL divergence는 두 확률 분포의 "차이"라는 것입니다. 

 

위에 Cross Entropy를 설명할 때 말씀드렸죠? 학습되어야 할 목표 확률의 분포(P)최적의 전략의 분포(Q)를 샘플링하는데 발생할 수 있는 엔트로피 차이를 계산합니다. 다른 말로 상대 엔트로피(relative entropy), 정보 획득량(information gain)라고도 합니다.

 

두 분포를 비교하던 개념인 Cross Entropy로 KL-divergence의 수식을 한번 유도해볼까요?

 

\( H(p, g) \)

\( = - \sum_i p_i log q_i \)  ------ 1

\( = - \sum_i p_i log q_i - \sum_i p_i log p_i + \sum_i p_i log p_i \)  ------ 2

\( = H(p) + \sum_i p_i log p_i - \sum_i p_i log q_i \)  ------ 3

\( = H(p) + \sum_i p_i log \frac {p_i} {q_i} \)  ------ 4

 

뭔가 되게 복잡해 보이는데 하나하나 뜯어보겠습니다.

 

  1. 기본 Cross Entropy 공식입니다.
  2. 기본 Cross Entropy에 \( \sum_i p_i log p_i \)을 빼고 더합니다.
  3. \( -\sum_i p_i log p_i \) 은 \( H(p) \) 이므로 변경해줍니다.
  4. 로그함수의 지수가 같으므로 분모로 들어가 최종 형태가 나옵니다.

최종식을 보면 \( H(p) \)(p의 엔트로피)에 \( \sum_i p_i log \frac {p_i} {q_i} \)이 더해지는게 Cross Entropy입니다. 

다시 돌아와서 \( H(p, q) \)는 두 분포의 엔트로피 차이라고 했습니다. \( H(p) \)는 기존 p 확률분포의 엔트로피이니 \( \sum_i p_i log \frac{p_i} {q_i} \)만큼 더 해지는 값이 즉, 정보량 차이라는 말입니다. 이것이 바로 KL-divergence입니다.

 

그럼 KL-divergence를 구하는 방법은 \( p, q \)의 Cross Entropy에서 \( p \)의 엔트로피 값을 빼면 되겠죠?

\( KL(p||q) = H(p, q) - H(p) \)

KLD는 \( D_{KL}(p|g) \) 또는 \( KL(p|q) \)로 표현합니다.

 

출처: https://angeloyeo.github.io/2020/10/27/KL_divergence.html

 

공식 

  • 이산형
    • \( KL(p ||q) =  \sum_i p_i log \frac {p_i} {q_i} \)
    • \( KL(p ||q) =  -\sum_i p_i log \frac {q_i} {p_i} \)
  • 연속형
    • \( KL(p ||q) =  \int p(x) log \frac {p(x)} {q(x)} dx \)
    • \( KL(p ||q) =  -\int p(x) log \frac{p(x)} {q(x)} dx \)

 

여기서 Cross Entropy를 최소화하는 것은, \( H(p) + KLD \)인데 기존 엔트로피를 구하는 공식은 정해져 있으므로, 결론 적으로는 KLD를 최소화하는 것과 같습니다.

 

  • KLD는 당연하게 항상 양수의 값을 가집니다. 두 확률분포의 차이가 없어질수록 최솟값이 나오는데, 결론적으로 두 분포가 같아지면 0의 값이 나오기 때문입니다. 
  • \(KL(p|q) \neq KL(q|p) \) KLD는 두 분포의 차이지 거리가 아닙니다
    • KLD는 asymmestric 말 그대로 비대칭적입니다. p와 q에 대한 교환 법칙이 성립하지 않는다는 의미

 

위 식으로 KLD는 거리 개념이 아니라고 합니다. 하지만 거리 개념으로 사용할 수 있는 Jensen-Shannon divergence 가 존재합니다. KLD를 2가지를 구하고 평균을 내는 방식입니다. 수식은 아래와 같습니다.

\( JSD(p||q) = \frac {1} {2} KL(p||M) + \frac {1} {2} KL(q||M) \)

 \( where, M = \frac {1} {2} (p + q) \)

 

이상 포스팅을 마치겠습니다.

긴 글 읽어주셔서 감사합니다.

 

 

댓글