다운로드
작성자: admin 작성일시: 2016-06-17 11:22:49 조회수: 3093 다운로드: 230
카테고리: 기초 수학 태그목록:

엔트로피

엔트로피의 정의

$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)=1.0$, $P(Y=1)=0.0$

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

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

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

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

$$ H[Y] = -\sum_{k=1}^K p(y_k) \log_2 p(y_k) $$

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

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

$$ H[Y] = -\int p(y) \log_2 p(y) \; dy $$

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

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

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

$$ H[Y_1] = -\dfrac{1}{2} \log_2 \dfrac{1}{2} -\dfrac{1}{2} \log_2 \dfrac{1}{2} = 1 $$$$ H[Y_2] = -\dfrac{8}{10} \log_2 \dfrac{8}{10} -\dfrac{2}{10} \log_2 \dfrac{2}{10} = 0.72 $$$$ H[Y_3] = -1 \log_2 1 -0 \log_2 0 = 0$$
In:
-0.5 * np.log2(0.5) - 0.5 * np.log2(0.5)
Out:
1.0
In:
-0.8 * np.log2(0.8) - 0.2 * np.log2(0.2)
Out:
0.72192809488736231
In:
eps = np.finfo(float).eps
-1 * np.log2(1) - 0 * np.log2(eps)
Out:
0.0

엔트로피 계산에서 $p(y)=0$인 경우에는 다음과 같은 극한값을 사용한다.

$$ \lim_{p\rightarrow 0} \; p\log_2{p} = 0 $$

이 값은 로피탈의 정리(l'Hôpital's rule)에서 구할 수 있다.

엔트로피의 성질

만약 확률분포가 결정론적이면 즉, 특정한 하나의 값이 나올 확률이 1이고 나머지 값은 나올 수 없다면 엔트로피는 0이며 이 값이 가장 작은 엔트로피 값이다.

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

$$ H = -\frac{2^K}{2^K}\log_2\dfrac{1}{2^K} = K $$

이다.

엔트로피와 정보량

엔트로피는 확률변수가 담을 수 있는 정보량을 표시한다. 확률변수가 담을 수 있는 정보량이란 확률변수의 표본값을 관측해서 얻을 수 있는 정보의 종류를 말한다. 엔트로피가 0이면 확률변수는 결정론적이므로 확률 변수의 표본값이 변화하지 않는다. 따라서 확률 변수의 표본값을 관측한다고 해도 우리가 얻을 수 있는 추가 정보는 없다. 엔트로피가 크다면 확률변수의 표본값이 가질 수 있는 실질적인 경우의 수가 증가하므로 표본값을 실제로 관측하기 전까지는 아는 것이 없다. 즉 확률변수의 표본값이 우리에게 가져다 줄 수 있는 정보의 량이 많다는 뜻이다.

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

  • A = "00"
  • B = "01"
  • C = "10"
  • D = "11"

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

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

$$ \Big\{ \dfrac{1}{2}, \dfrac{1}{4}, \dfrac{1}{8}, \dfrac{1}{8} \Big\} $$

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

  • A = "0"
  • B = "10"
  • C = "110"
  • D = "111"

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

$$ \dfrac{1}{2} \cdot 1 + \dfrac{1}{4} \cdot 2 + \dfrac{1}{8} \cdot 3 + \dfrac{1}{8} \cdot 3 = 1.75$$

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

$$ H = -\dfrac{1}{2}\log_2\dfrac{1}{2} -\dfrac{1}{4}\log_2\dfrac{1}{4} -\dfrac{2}{8}\log_2\dfrac{1}{8} = 1.75 $$
In:
-1 / 2 * np.log2(1 / 2) - 1 / 4 * np.log2(1 / 4) - 2 / 8 * np.log2(1 / 8)
Out:
1.75

연습 문제 1

A, B, C, D, E, F, G, H의 8글자로 이루어진 문서가 있고 각각의 글자가 나올 확률이 다음과 같다고 가정하자.

$$ \Big\{ \dfrac{1}{2}, \dfrac{1}{4}, \dfrac{1}{8}, \dfrac{1}{16}, \dfrac{1}{64}, \dfrac{1}{64}, \dfrac{1}{64}, \dfrac{1}{64} \Big\} $$

이 문서를 위한 가변 길이 인코딩 방식을 서술하고 한 글자를 인코딩하는데 필요한 평균 비트수를 계산하라.

표본 데이터가 주어진 경우

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

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

$$ P(y=0) = \dfrac{40}{80} = \dfrac{1}{2} $$$$ P(y=1) = \dfrac{40}{80} = \dfrac{1}{2} $$$$ H[Y] = -\dfrac{1}{2}\log_2\left(\dfrac{1}{2}\right) -\dfrac{1}{2}\log_2\left(\dfrac{1}{2}\right) = \dfrac{1}{2} + \dfrac{1}{2} = 1 $$
In:
- 1 / 2 * np.log2(1 / 2) - 1 / 2 * np.log2(1 / 2)
Out:
1.0

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

$$ P(y=0) = \dfrac{20}{60} = \dfrac{1}{3} $$$$ P(y=1) = \dfrac{40}{60} = \dfrac{2}{3} $$$$ H[Y] = -\dfrac{1}{3}\log_2\left(\dfrac{1}{3}\right) -\dfrac{2}{3}\log_2\left(\dfrac{2}{3}\right) = 0.92 $$
In:
-1 / 3 * np.log2(1 / 3) - 2 / 3 * np.log2(2 / 3)
Out:
0.91829583405448956

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

$$ P(y=0) = \dfrac{30}{40} = \dfrac{3}{4} $$$$ P(y=1) = \dfrac{10}{40} = \dfrac{1}{4} $$$$ H[Y] = -\dfrac{3}{4}\log_2\left(\dfrac{3}{4}\right) -\dfrac{1}{4}\log_2\left(\dfrac{1}{4}\right) = 0.81 $$
In:
-3 / 4 * np.log2(3 / 4) - 1 / 4 * np.log2(1 / 4)
Out:
0.81127812445913283

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

$$ P(y=0) = \dfrac{20}{20} = 1 $$$$ P(y=1) = \dfrac{0}{20} = 0 $$$$ H[Y] = -1\log_2\left(1\right) - 0\log_2\left(0\right) = 0 $$

조건부 엔트로피

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

$$ H[Y \mid X] = - \sum_i \sum_j \,p(x_i, y_j) \log_2 p(y_j \mid x_i) $$$$ H[Y \mid X] = -\int \int p(x, y) \log_2 p(y \mid x) \; dxdy $$

이 식은 조건부 확률 분포의 정의를 사용하여 다음과 같이 고칠 수 있다.

$$ H[Y \mid X] = \sum_i \,p(x_i)\,H[Y \mid x_i] $$$$ H[Y \mid X] = \int p(x)\,H[Y \mid x] \; dx $$

이 식은 이산 확률변수에 대해서는 다음과 같이 증명할 수 있다.

$$ \begin{eqnarray} H[Y \mid X] &=& - \sum_i \sum_j \,p(x_i, y_j) \log_2 p(y_j \mid x_i) \\ &=& - \sum_i \sum_j p(y_j \mid x_i) p(x_i) \log_2 p(y_j \mid x_i) \\ &=& - \sum_i p(x_i) \sum_j p(y_j \mid x_i) \log_2 p(y_j \mid x_i) \\ &=& \sum_i p(x_i) H[Y \mid x_i] \\ \end{eqnarray} $$

조건부 엔트로피의 개념을 스팸 메일 분류 문제를 통해 알아보자. 스팸 메일 분류 모형을 만들기 위한 메일 데이터가 80개가 있다 이 중 40개가 정상 메일($Y=0$), 40개가 스팸 메일($Y=1$)이다.

스팸 메일 여부를 특정 키워드가 존재하는지($X=1$) 혹은 존재하지 않는지($X=0$)의 여부로 알아보고자 한다. 키워드 후보로는 $X_1$, $X_2$, $X_3$ 세가지가 있다.

예를 들어 $X_1$, $Y$ 값의 관계가 다음과 같다고 하자.

$Y = 0$ $Y = 1$
$X_1 = 0$ 30 10 40
$X_1 = 1$ 10 30 40
40 40 80

이 때 조건부 엔트로피는 다음과 같이 계산된다.

$$ \begin{eqnarray} H[Y \mid X_1 ] &=& p(X_1=0)\,H[Y \mid X_1=0] + p(X_1=1)\,H[Y \mid X_1=1] \\ &=& \dfrac{40}{80} \cdot 0.81 + \dfrac{40}{80} \cdot 0.81 = 0.81 \end{eqnarray} $$

$X_2$, $Y$ 값의 관계는 다음과 같다.

$Y = 0$ $Y = 1$
$X_2 = 0$ 20 40 60
$X_2 = 1$ 20 0 20
40 40 80

조건부 엔트로피의 값은 다음과 같다.

$$ \begin{eqnarray} H[Y \mid X_2 ] &=& p(X_2=0)\,H[Y \mid X_2=0] + p(X_2=1)\,H[Y \mid X_2=1] \\ &=& \dfrac{60}{80} \cdot 0.92 + \dfrac{20}{80} \cdot 0 = 0.69 \end{eqnarray} $$

만약 $X_3$, $Y$ 값이 다음과 같다면

$Y = 0$ $Y = 1$
$X_3 = 0$ 0 40 40
$X_3 = 1$ 40 0 40
40 40 80

조건부 엔트로피의 값은 0이 된다.

$$ \begin{eqnarray} H[Y \mid X_3 ] &=& p(X_3=0)\,H[Y \mid X_3=0] + p(X_2=1)\,H[Y \mid X_3=1] = 0 \end{eqnarray} $$

위의 정의와 예제에서 조건부 엔트로피는 $X$의 값에 의해 만들어지는 새로운 $Y$ 확률분포의 가중평균임을 알 수 있다.

크로스 엔트로피

두 확률분포 $p(y)$, $q(y)$의 크로스 엔트로피(cross entropy)은 다음과 같의 정의한다.

$$ -\sum_{k=1}^K p(y_k) \log_2 q(y_k) $$$$ -\int p(y) \log_2 q(y) dy $$

이 값은 주로 분류 문제의 목표값 분포와 예측값 분포를 비교하는데 사용된다.

예를 들어 이진 분류에서는 $Y$은 0 또는 1이라는 값만 가질 수 있다. 또 예측값 $\hat{Y}$은 $Y=1$일 확률 $\theta$라고 하자. $p(y)$는 정답 $y$의 분포이고 $q(y)$는 모형이 예측한 $\hat{Y}$의 분포라고 하면 크로스 엔트로피는 다음과 같아진다.

$$ - y \log_2 \theta - (1 - y) \log_2 (1 - \theta) $$

이 값은 예측값이 정답과 같다면 0이고 다르면 다를수록 증가한다.

쿨백-라이블러 발산

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

$$ KL(p(y) || q(y)) = -\int p(y) \log_2 q(y) \, dy - \left( -\int p(y) \log_2 p(y) \, dy \right) = \int p(y) \log_2 \left(\dfrac{p(y)}{q(y)}\right) dy $$

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

지니 불순도

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

$$ G[Y] = -\sum_{k=1}^K p(y_k) (1 - p(y_k)) $$

질문/덧글

사용자에 의해 삭제되었습니다. poio*** 2017년 3월 7일 3:08 오후

사용자에 의해 삭제되었습니다.

이산 확률 변수의 가능한 값이 모두 같은 확률을 가졌을때의 엔트로피의 해석 tch2*** 2017년 3월 15일 3:46 오전

엔트로피는 이산 확률 변수가 가질 수 있는 '확률 변수가 동일한 값의 가짓수'와 같다.
라고 하셨습니다.

그런데 이산 확률 변수가 가질 수 있는 값의 종류가 네가지(1, 2, 3, 4) 이고,
모두 같은 확률(25%)을 가졌다고 한다면, 엔트로피는 2가 나옵니다.

이 경우 '확률 변수가 동일한 값의 가짓수'가 2가 되는건가요?

만약 2가 아니라면, 혹시 (0, 1)과 같이 두가지 상태를 갖는 대상의 갯수를 염두하고 말씀하신 건가요?

답변: 이산 확률 변수의 가능한 값이 모두 같은 확률을 가졌을때의 엔트로피의 해석 관리자 2017년 3월 15일 10:03 오전

엔트로피는 이산 확률 변수가 가질 수 있는 '확률 변수가 동일한 값의 가짓수'와 같다. 라고 한 적이 없습니다.
잘못 이해하신 것 같습니다.