entropy

이 포스트는 fastcampus에서 강의를 하고 계시는 김도형 박사님의 강의록을 따라 쓰며 연습한 포스트입니다.

데이터 사이언스 스쿨

엔트로피의 정의

$Y = 0$ 또는 $Y=1$인 두 가지 값을 가지는 확률 분포가 다음과 같이 세 종류가 있다고 하자

  • 확률 분포 $Y_1$: $P(Y=0) = 0.5, P(Y=1) = 0.5$
  • 확률 분포 $Y_2$: $P(Y=0) = 0.8, P(Y=1) = 0.2$
  • 확률 분포 $Y_3$ : $P(Y=0) = 0.8, P(Y=1) = 0.2$

이 확률 값이 베이지안 확률이라면 확률 분포 $Y_1$은 $y$값에 대해 아무것도 모르는 상태, $Y_3$은 $y$값이 0이라고 100% 확신하는 상태, $Y_2$은 $y$값이 0이라고 믿지만 아닐 수도 있다는 것을 아는 상태를 나타내고 있을 것이다. 확률 분포들이 가지는 확신의 정도를 수치로 표현하는 것을 엔트로피(entropy)라고 한다. 확률 변수의 여러가지 값이 나올 확률이 대부분 비슷한 경우에는 엔트로피가 높아진다. 반대로 특정한 값이 나올 확률이 높아지고 나머지 값의 확률은 낮아진다면 엔트로피가 작아진다.

물리학에서는 상태가 분산되어 있는 정도를 엔트로피로 정의한다. 여러가지로 고루 분산되어 있을 수 있으면 엔트로피가 높고 특정한 하나의 상태로 몰려있으면 엔트로피가 낮다. 확률분포의 엔트로피는 물리학의 엔트로피 용어를 빌려온 것이다.

엔트로피는 수학적으로 다음과 같이 정의한다

확률변수 $Y$가 베르누이나 카테고리 분포와 같은 이산 확률변수이면

이 식에서 $K$는 $X$가 가질 수 있는 클래스의 수이고 $P(y)$는 확률질량함수이다.

확률변수 $Y$가 연속 확률변수이면

이 식에서 $P(y)$는 확률밀도함수이다.

로그의 밑(base)이 2로 정의된 것은 정보통신과 관련을 가지는 역사적인 이유 때문이다.

위에서 예를 든 $Y_1$, $Y_2$, $Y_3$에 대해 엔트로피를 구하면 다음과 같다.

엔트로피 계산에서 $p(y) = 0$인 경우에는 다음과 같은 극한값을 사용한다. 이 값은 로피탈의 정리에서 구할 수 있다.

엔트로피의 성질

확률변수가 결정론적이면 확률분포에서 특정한 하나의 값이 나올 확률이 1이다. 이 때 엔트로피는 0이 되고 이 값은 엔트로피가 가질 수 있는 최솟값이다.

반대로 엔트로피의 최대값은 이산 확률변수의 클래스의 갯수에 따라 달라진다. 만약 이산 확률변수가 가질 수 있는 클래스가 $2^K$개이고 이산 확률변수가 가질 수 있는 엔트로피의 최대값은 각 클래스가 모두 같은 확률을 가지는 때이다.

이 때 엔트로피의 값은

이다.

엔트로피와 정보량

엔트로피는 확률변수가 담을 수 있는 정보의 양을 의미한다고 볼 수도 있다. 확률변수가 담을 수 있는 정보량(information)이란 확률변수의 표본값을 관측해서 얻을 수 있는 추가적인 정보의 종류를 말한다.

엔트로피가 0이면 확률변수는 결정론적이므로 확률 변수의 표본값은 항상 같다. 따라서 확률 변수의 표본값을 관측한다고 해도 우리가 얻을 수 있는 추가 정보는 없다.

반대로 엔트로피가 크다면 확률변수의 표본값이 가질 수 있는 경우의 수가 증가하므로 표본값을 실제로 관측하기 전까지는 아는 것이 거의 없다. 반대로 말하면 확률변수의 표본값이 우리에게 가져다 줄 수 있는 정보의 양이 많다.

엔트로피와 무손실 인코딩

엔트로피는 원래 통신 분야에서 데이터가 가지고 있는 정보량을 계산하기 위해 고안되었다. 예를 들어 4개의 알파벳 A, B, C, D로 씌어진 문서가 있다고 하자. 이 문서를 0과 1로 이루어진 이진수로 변환할 때 일반적인 경우라면 다음과 같이 인코딩을 할 것이다.

  • A = “00”
  • B = “01”
  • C = “10”
  • D = “11”

이렇게 인코딩을 하면 1,000 글자로 이루어진 문서는 이진수 2,000개가 된다.

만약 문서에서 각 알파벳이 나올 확률이 동일하지 않고 다음과 같다고 가정하다.

이 때는 다음과 같이 가변길이 인코딩(variable length encoding)을 하면 인코딩된 이진수의 수를 줄일 수 있다.

  • A = “0”
  • B = “10”
  • C = “110”
  • D = “111”

인코딩된 이진수의 숫자는 다음 계산에서 약 1,750개가 됨을 알 수 있다.

1.75는 알파벳 한 글자를 인코딩하는데 필요한 평균 비트(bit)수이며 확률변수의 엔트로피 값과 같다.

엔트로피의 추정

확률 변수 모형, 즉 이론적인 확률 밀도(질량) 함수가 아닌 실제 데이터가 주어진 경우에는 확률질량함수를 추정하여 엔트로피를 계산한다.

예를 들어 데이터가 모두 80개가 있고 그 중 $Y=0$인 데이터가 40개, $Y=1$인 데이터가 40개 있는 경우는 엔트로피가 1이다.

만약 데이터가 모두 60개가 있고 그 중 $Y=0$인 데이터가 20개, $Y=1$인 데이터가 40개 있는 경우는 엔트로피가 약 0.92이다.

지니불순도

엔트로피와 유사한 개념으로 지니불순도(Gini Impurity)라는 것이 있다. 지니불순도는 엔트로피처럼 확률분포가 어느쪽에 치우쳐있는가를 재는 척도지만 로그를 사용하지 않으므로 계산량이 더 적어 엔트로피 대용으로 많이 사용된다.

1
2
3
4
5
6
7
8
9
10
11
P0 = np.linspace(0.001, 1 - 0.001, 1000)
P1 = 1 - P0
H = - P0 * np.log2(P0) - P1 * np.log2(P1)
G = (P0 * (1 - P0) + P1 * (1 - P1))
# 엔트로피와 높이를 맞춰주기 위해 스케일링 하는 경우도 있다. 여기서는 G 앞에 2를 곱해준다.

plt.plot(P0, H, "-", label="엔트로피")
plt.plot(P0, G, "--", label="지니불순도")
plt.legend()
plt.xlabel("P(0)")
plt.show()

결합 엔트로피

두 이산확률변수 $X, Y$에 대해 결합 엔트로피(joint entropy)는 다음처럼 정의한다.

연속확률변수의 경우에는 다음처럼 정의한다.

조건부 엔트로피

조건부 엔트로피는 상관관계가 있는 두 확률변수 $X,Y$가 있고 $X$의 값을 안다면 $Y$의 확률변수가 가질 수 있는 정보의 양을 뜻한다. 수학적으로는 다음과 같이 정의한다.

연속확률변수의 경우에는 다음처럼 정의한다.

조건부 엔트로피는 조건부 확률 분포의 정의를 사용하여 다음과 같이 고칠 수 있다.

연속확률변수의 경우에는 다음과 같다.

크로스 엔트로피

두 확률분포 $p(x), p(y)$의 크로스 엔트로피(cross entropy) $H[p,q]$는 다음과 같이 정의한다. 크로스 엔트로피의 경우에는 같은 확률변수에 대한 두 개의 추정 확률분포를 비교하는데 주로 쓰이기 때문에 표기를 할 땐 결합 엔트로피처럼 확률변수를 인수로 사용하지 않고 확률분포를 인수로 사용한다는 점에 주의해라

또는

크로스 엔트로피는 확률분포의 차이를 정량화한 값이지만 기준이 되는 분포가 $p$로 고정되어 있다. 즉 $p$와 $q$가 바뀌면 값이 달라진다.

크로스 엔트로피는 분류 모형의 성능을 측정하는데 사용된다. $Y$가 0 또는 1이라는 값만 가지는 이진 분류 문제를 예로 들어보자.

  • $P_Y$는 $X$가 정해졌을 때 실제 $Y$가 가지는 분포를 뜻한다. $X$가 정해지면 $Y$는 확실히 0이거나 확실히 1이다. 즉, $P_Y$는 (0,1) 또는 (1,0)이 된다.
  • 하지만 예측값 $\hat{Y}$의 분포 $Q_{\hat{Y}}$는 모수가 $\mu$인 베르누이 분포이다. 즉 $Q_{\hat{Y}}$는 $(1-\mu, \mu)$이다.

특정한 $X$에 대해 $P$와 $Q$의 크로스 엔트로피는

가 된다.

  • $Y = 0$일 때 $\mu$가 커질수록 즉, 예측이 틀릴수록 $-\log_2 (1-\mu)$의 값도 커진다.

  • $Y = 1$일 때, $\mu$가 작아질수록 즉, 예측이 틀릴수록 $-\log_2(\mu)$의 값도 커진다.

따라서 위 값은 예측의 틀린정도를 나타내는 오차 함수의 역할을 할 수 있다.

모든 데이터에 대해 이 값의 평균을 구하면 다음 식으로 표현할 수 있다.

같은 방법으로 이진 분류가 아닌 다중 분류에서도 크로스 엔트로피를 오차 함수로 사용할 수 있다.

쿨백-라이블러 발산

쿨백-라이블러 발산(Kullback-Leibler divergence)은 두 확률분포 $p(y), q(y)$의 차이를 정량화하는 방법의 하나이다. 다음과 같이 정의한다.

또는

쿨백-라이블러 발산은 크로스 엔트로피에서 기준이 되는 분포의 엔트로피 값을 뺀 값이므로 상대 엔트로피(relative entropy)라고도 한다. 그 값은 항상 양수이며 두 확률분포 $p(x), q(x)$가 완전히 같을 경우에만 0이 된다.

Share