잡학사전/머신러닝

[머신러닝] 손실함수(loss function) (2) - 엔트로피(Entropy)

슬기나무 2022. 4. 14. 21:44
반응형

이번 포스팅에서는 entropy에 대해 알아보겠습니다.

(출처: 선형대수와 통계학으로 배우는 머신러닝 with 파이썬, 장철원 지음)

 

 엔트로피(Entropy)

entropy는 정보이론에서 불확실성의 척도로 사용합니다.

(저는 사실 entropy는 열역학할 때만 쓰는 개념인 줄 알았습니다.)

 

확률변수 $x$의 entropy는 아래와 같이 정의합니다.

 

Entropy

 

$$H(x) = -\sum_{i=1}^n P(x_i)\log P(x_i)$$

 

entropy가 높다는 것은 정보가 많고 확률이 낮다는 것을 의미합니다.

 

entropy는 하나의 분포를 대상으로 하는 반면,

 

cross entropy는 두 분포를 대상으로 합니다.

 

Cross Entropy

 

$$H_{p,q}(x) = -\sum_{i=1}^n P(x_i)\log Q(x_i)$$

 

cross entropy는 실제 분포인 $q(x)$를 모르는 상태에서

 

예측 모델링을 통해 구한 분포 $p(x)$를 통해

 

두 확률 분포의 차이를 구하기 위해 사용됩니다.

 

말만 들어서는 잘 이해가 안될 수 있으니 간단한 예제를 통해 알아봅시다.

 

 엔트로피 예제 (동전 & 주사위 던지기)

Entropy

 

동전과 주사위를 던지는 상황을 가정해봅시다.

 

동전을 던졌을 때 나올 수 있는 경우의 수는 앞/뒤 두가지이기 때문에

 

각각의 확률이 1/2인 이산확률분포를 가집니다.

 

주사위를 던지는 경우 마찬가지로 각각의 확률이 1/6인 이산확률분포를 가집니다.

 

먼저, 각 상황에 대한 entropy에 대해 알아보겠습니다.

 

동전을 던지는 상황에 대하여 entropy는

 

$$H_{coin}(x) = -\left(\frac{1}{2}\log\frac{1}{2}+\frac{1}{2}\log\frac{1}{2}\right)=0.3010$$

 

주사위를 던지는 상황에 대하여 entropy는

 

$$H_{dice}(x) = -\left(\frac{1}{6}\log\frac{1}{6}+\frac{1}{6}\log\frac{1}{6}+\frac{1}{6}\log\frac{1}{6}+\frac{1}{6}\log\frac{1}{6}+\frac{1}{6}\log\frac{1}{6}+\frac{1}{6}\log\frac{1}{6}\right)=0.7782$$

 

동전의 entropy는 약 0.3010, 주사위의 entropy는 약 0.7782로

 

주사위의 불확실성이 더 크다는 것을 알 수 있습니다.

 

직관적으로도 앞/뒤가 나오는 동전과 1~6까지 숫자가 나오는 주사위 중

 

어느 것이 entropy가 높을 지 짐작할 수 있습니다.

 

Cross entropy

 

주머니에서 10개의 색깔 공을 꺼내는 상황을 생각해봅시다.

 

주머니에는 빨간 공이 4개, 파란공이 3개, 초록공이 3개 들어있습니다.

 

그렇다면 이 데이터의 실제 분포는 각각의 확률이 4/10, 3/10, 3/10인

 

이산확률분포입니다.

 

한편, 모형 학습 결과 예측된 분포가 2/10, 4/10, 4/10이라면 어떨까요?

 

먼저 위에서 계산한 entropy 먼저 알아보면

 

$$H(x) = -\left(0.4\log0.4+0.3\log0.3+0.3\log0.3\right)=0.4729$$

 

cross entropy를 계산해보면

 

$$H_{p,q}(x) = -\left(0.4\log0.2+0.3\log0.4+0.3\log0.4\right)=0.5184$$

 

cross entropy는 실제 entropy보다 항상 큰 값을 가지기 때문에

 

최소화하는 쪽으로 하는 것이 실제 분포를 잘 예측할 수 있는 방향입니다.

 

 Kullback-Leibler Divergence

그리고 위 두 entropy를 응용한 개념인

 

Kullback-Leibler Divergence에 대해 소개하겠습니다.

 

줄여서 KL Divergence라 주로 부릅니다.

 

식으로 나타내면 아래와 같습니다.

 

$$D_{KL}(P\parallel Q)=-\sum_{i=1}^n P(x_i)\log Q(x_i)+\sum_{i=1}^n P(x_i)\log P(x_i)$$

 

그런데 가만보니 식이 (cross entropy) - (entropy)의 꼴입니다.

 

cross entropy는 항상 entropy보다 큰 값을 가진다고 했죠?

 

즉, KL Divergence의 값을 0에 가깝도록 하는 것이 모델을 잘 예측하는 방향입니다.

 

특히 cross entropy와 KL Divergence는

 

머신러닝에서 자주 사용되는 손실함수라고 하네요!

 

 

여기까지 손실 함수 중 하나인 엔트로피에 대하여 알아보았습니다.

 

반응형