What is Entropy? (1)
5 minute read

머신러닝을 공부하는 사람이라면 Entropy에 대해서는 한번쯤 들어봤을 것이다. 김성훈 교수님의 모두를 위한 딥러닝에서도 초반부에 Logistic Classification의 cost function을 정의하는데에 ‘cross entropy’의 개념이 등장한다. 이 개념을 처음 알게 되었을 때는 이게 오분류에 대해 페널티를 주는 Cost 함수의 개념으로 사용되는구나 하면서도, 대체 왜 $-p\log{p}$ 라는 식을 쓰는지는 이해가 가지 않았다. 대체 Entropy는 뭘까?

이 글에서 다루는 내용


1. Entropy = 정보량 = 불확실성의 정도?

엔트로피(Entropy)는 정보 이론(Information Theory)에서 등장한 용어이다. 정보 이론은 어떤 메시지가 가지고 있는 정보량을 표현하는 방법을 연구하는 학문이다. 여기서 ‘어떤 메시지가 가지고 있는 정보량을 표현하는 방법’이라는 말이 성립하려면, 가장 먼저 1. 정보량이 정의되어야 하고, 또 2. 정보를 표현하는 방법에 대한 논의도 필요하다.

그렇다면 정보량은 무엇일까? 정보 이론에서는 정보량이 가져야하는 성질을 다음과 같이 정의한다.

“예상치 못한 사건의 정보량은 뻔한 사건의 정보량보다 높다.”

예를 들어, “내일 아침에 해가 뜬다”는 말은 너무나도 당연하기 때문에 정보량이 낮다. 만약 누가 이런 말을 한다면, 아무도 이 정보에는 관심을 가지지 않을 것이고 다음날 실제로 이 명제가 참인지 확인해보는 사람도 없을 것이다.

반면 “내일 아침 일식이 있다”는, 잘 일어나지 않는 사건에 대한 정보이기 때문에 정보가가 훨씬 높고, 주목할 필요가 있게 된다. 엔트로피를 일반적으로 ‘불확실성의 정도’라고도 한다. 확실한 사건, 즉 엔트로피(불확실성)가 낮은 사건은 정보량이 낮다. 불확실성이 높은 사건일수록 우리는 더 주목하게 되고 그 사건은 정보량이 큰 사건이다.1

그리고 정보 이론에서는 이러한 직관적 이해를 바탕으로 정보량을 숫자로 표현하려고 한다. 정보량이 갖춰야할 성질들을 구체적으로 살펴보자.

  1. 자주 일어나는 사건일수록 정보량은 낮다.
  2. 따라서 ‘항상’ 일어나는 사건이 있다면, 그 사건의 정보량은 0이다.
  3. 정보량은 항상 0 이상의 값을 가진다.
  4. 독립적인 사건들의 전체 정보량은 개별 사건의 정보량의 합이어야 한다.
    예를 들어, 동전의 앞면이 두번 연속 나오는 사건 $\{Head, Head\}$의 정보량은 앞면이 한번 나온 사건 $\{Head\}$가 가지는 정보량의 두배이다.

위의 조건을 전부 만족하면서 정보량을 표현하는데에 사용되는 식은 다음과 같다.

$$I(x) = -\log{P(x)}$$

$I(x)$는 사건 $x$의 Self Information을 표현한다. 여기서 $P(x)$는 사건 $x$가 나타날 확률으로, 0과 1 사이의 값을 가진다. 그리고 $-\log{P(x)}$는 $P(x)$가 0에 가까워질수록 커지고, $P(x)$가 1에 가까워질수록 0에 가까운 값을 가진다. 때문에 위의 성질 1~3을 모두 만족하게 된다.

하지만 왜 하필 $\log{}$함수가 쓰인것일까?

그 이유는 네번째 성질 때문인데, 엔트로피가 additive 해야 하기 때문이다.

어떤 두 독립적인 물리계를 합치면, 질량, 부피, 에너지 등 여러 물리량이 증가한다. 그리고 이러한 물리량 중에서는 두 계를 합칠 때 각각의 물리량을 단순히 더하면 되는 성질(extensive property)을 띠는 것이 몇가지 있다 (질량, 부피). 이러한 성질을 띠는 물리량들은 계산이 굉장히 편리하다.

하지만 경우의 수는 어떠한가? 어떤 두 독립적인 물리계에서의 경우의 수를 각각 $N_1$, $N_2$라 할 때, 두 계를 합쳤을 때의 경우의 수는 $N_1 \times N_2$가 된다. 주사위와 동전을 동시에 던지면, 가능한 조합의 수는 $6 \times 2 = 12$가 된다. 이렇게 곱으로 물리량이 늘어나는 경우, 계산이 굉장히 복잡해진다. 따라서 엔트로피는 여기서 경우의 수에 로그를 취해 곱셈을 덧셈으로 변환해준다. 그 결과, 전체 계의 엔트로피는 각 물리계의 엔트로피를 서로 더해주면 되어 매우 간단해진다.

독립적인 각 사건이 일어날 확률을 각각 $p_1$, $p_2$라고 해보자. 이 때 두 사건이 동시에 일어날 확률은 두 사건이 독립이기 때문에 두 확률값을 곱한 $p_1p_2$가 된다. 그리고 그 사건의 정보량 $I(X_1,X_2)$는 다음과 같이 $I(X_1)$과 $I(X_2)$의 합으로 쪼개질 수 있다. 이것이 가능한 것은 로그함수의 성질 덕분이다.


위에서 소개되었던 self information은 단일 사건에서의 정보량만을 알려주지만, 우리는 특정 사건을 일어나게 한 확률 분포의 정보량을 알고 싶을수도 있다. Self information이 주사위에서 1이 나오는 사건의 정보량이었다면, 이제는 주사위의 정보량을 알고 싶은 것이다. 이때는 각 사건이 발생할 확률 $P(x)$에 각 사건의 정보량($-\log{P(x)}$)을 곱해서 더해주면 되는데, 이 값이 곧 섀넌 엔트로피 (Shannon Entropy)이다. 섀넌 엔트로피는 결국 정보량의 기댓값이다.

엔트로피는 불확실성이 전제되어야 하는 개념이기 때문에, 확률변수에 대해서만 존재한다.

2. Entropy = 정보를 인코딩하는데에 필요한 비트 수?

정보량은 곧 그 정보를 인코딩하는데에 필요한 resource의 크기와도 직결된다. 엔트로피를 “$\log{}$(어떤 확률변수에서 나타날 수 있는 사건의 수)”라고도 하는데, 가능한 사건이 다양해지면, 불확실성은 증가하고, 큰 정보량을 담을 큰 그릇이 필요하게 된다.

그리고 컴퓨터에서 정보는 0 또는 1의 값을 가지는 비트의 형태로 저장된다. 따라서 정보량이 늘어나면, 필요한 비트의 수도 많아진다. 식으로 확인해보자.

이 식에서 $\log{}$의 밑을 $2$로 두면, $-log_2{P(x)}$는 사건 $x$를 표현하기 위해 필요한 비트의 수가 된다. 그리고 $H(X)$는 정보를 인코딩하는데에 평균적으로 필요한 비트 수로도 해석을 할 수 있게 된다.

아래의 두 가지 상황을 비교하며 좀 더 구체적으로 이해해보자.

상황 1.

내가 날씨를 예측하려고 하는데, 가능한 모든 날씨는 다음과 같다.

$$\mathrm{weather} \in \{\mathrm{sunny, rainy, cloudy, snowy}\}$$

그리고 각 날씨가 나타날 확률은 $\frac{1}{4}$로 동일하다. 이 예시를 위의 $H(X)$에 적용해보자.

즉, 모든 날씨를 표현하기 위해 필요한 평균 비트수는 2가 되고, 실제로도 각 날씨는

상황 2.

각 날씨가 나타날 확률이 서로 동일하지 않을 수 있다.
만약 sunny의 확률이 $\frac{1}{2}$, rainy의 확률이 $\frac{1}{4}$, cloudy의 확률이 $\frac{1}{8}$, snowy의 확률이 $\frac{1}{8}$이라면?

이때 $H(X)$를 다시 계산해보면,

$H(weather)$이 2에서 1.75로 줄어들었다! 모든 날씨를 표현하기 위해 필요한 평균 비트수가 줄어든 것이다. 각 날씨에 해당하는 비트 표현도 한번 확인해보자. 여기서 각 날씨는 발생 확률이 다르기 때문에 가변길이 인코딩(variable length encoding)을 적용하여 다음과 같이 표현할 수 있게 된다.

각 날씨에 해당하는 비트의 길이인 1, 2, 3, 3은 각 날씨의 $-\log{P(weather)}$값과 같다.

즉, 상대적으로 자주 발생할 수 있는 어떤 사건(sunny)이 생기자, 불확실성이 줄어들면서 정보량이 줄어들었고, 그에 따라 정보를 표현하기 위해 요구되는 최소한의 비트 수가 줄어든 것이다. 이처럼 좀 더 예측이 쉬운 확률변수일수록 더 적은 양의 비트로도 표현이 가능하다.

여기서 한 가지 더 확인할 수 있는 것이 있다. 어떤 확률변수에서 나타날 수 있는 사건이 $N$가지 일 때 가장 불확실한 상황은 모든 사건이 $\frac{1}{N}$의 확률로 동일하게 발생하는 경우다. 이때 엔트로피는 $\log_2{N} = -log_2{\frac{1}{N}}$으로, 경우의 수가 $N$인 상황 중에서 가장 큰 엔트로피를 가진다.

  1. 나는 이 개념이 베이즈 통계의 사전분포, 사후분포 개념과도 비슷하다고 생각했다. Bayesian에서는 1. 어떤 사건을 실제로 관측하기 전에 그 사건에 대한 나의 사전 믿음을 Prior로 설정하고, 2. 데이터를 통해 결과를 얻은 후 3. 이 모든 정보를 종합해 사건의 사후분포를 계산한다. 예를 들어 만약 내가 동전을 던지는데 이 동전은 내가 강제로 앞면이 더 잘 나오도록 조작한 동전이라면, 나는 앞면이 나올 확률을 0.9, 뒷면이 나올 확률을 0.1으로 Prior를 설정할 것이다. 반면 이 동전이 난생 처음 본 동전이라 이에 대한 사전 지식이 거의 없을 때 나는 non-informative prior을 사용할 수 있다. 이때 non-informative prior는 uniform 분포의 모양을 띠는데, 즉 “나는 아는 게 없으니까 일단 발생할 수 있는 모든 사건에 공평하게 확률을 나눠주자”는 것이다 (앞면: 0.5, 뒷면: 0.5). 이렇게 prior를 설정한 후에 데이터를 관측하면, prior의 힘이 강력할수록 실제로 관측되는 개별 사건의 힘은 상대적으로 약해진다. 데이터로부터 얻은 정보가 사후분포에 거의 반영이 되지 않는 것이다. 반면 non-informative prior 하에서는, prior의 영향력이 약하기 때문에 이후에 관측되는 데이터 하나하나가 가지는 영향력이 상대적으로 커진다. 즉, 어떤 확정적인 사건이 존재하는 확률분포를 가정하면, 실제 사건의 발생이 가지는 영향력, 여기서는 ‘정보량’이 작아진다는 것이다. 내기나 경마, 스포츠 경기도 그 결과를 정확히는 알 수 없다는 것이 재미의 핵심이다. 승자가 누가될지 모두가 이미 알고있는 뻔한 결말의 스포츠 경기는 아무도 시청하지 않을 것이다. 

Recent Posts

Broadcasting in numpy
파이썬 라이브러리별 여러가지 팁
Reproducing kernel Hilbert space
이터레이터, 이터러블, 이터레이션?
Surrogate Loss Functions (2)