기본 콘텐츠로 건너뛰기

찌그러진 동전 던지기로 정보량, 기댓값, 엔트로피 쉽게 설명

찌그러진 동전 던지기로 정보량, 기댓값, 엔트로피 쉽게 설명

1. 찌그러진 동전 던지기

던지면 백 번 중 한 번의 확률로 뒷면이 나오는 찌그러진 동전이 있습니다.

ph=99100pt=1100 \begin{align} & p_{h} = \frac {99}{100} \\ & p_{t} = \frac {1}{100} \end{align}

여기서,

  • php_h: 앞면(head)이 나올 확률
  • ptp_t: 뒷면(tail)이 나올 확률

이 글 전체에서 위의 동전을 예로 사용하였습니다.

2. 특정 사건의 정보량(Information Content)

정보량의 정의는 다음과 같습니다.

Ix=log2px \begin{align} I_x = -log_2{p_x} \end{align}

여기서,

  • xx: 개별 사건(동전 앞면, 뒷면)
  • pxp_x: 특정 사건 xx가 발생할 확률
  • IxI_x: 특정 사건 xx가 발생함을 알았을 때 얻게 되는 정보량

동전 던지기 결과를 알았을 때 그 정보의 가치에 대하여 다음과 같은 평가가 가능합니다.

  • 결과가 앞면임을 알았을 때:
    • 뒷면보다는 자주 발생하는 사건이라서 정보의 가치는 뒷면이 나왔을 때보다 작다.
  • 결과가 뒷면임을 알았을 때:
    • 앞면보다는 드물게 발생하는 사건이라서 정보의 가치는 앞면이 나왔을 때보다 크다.

정보량을 정보의 가치라고 해석할 수 있으며 다음과 같은 관계가 성립합니다.

Ih<It \begin{align} I_{h} < I_{t} \end{align}

여기서,

  • IhI_h: 앞면이 나온 것을 알았을 때의 정보량
  • ItI_t: 뒷면이 나온 것을 알았을 때의 정보량

3. 정보량에 대한 기댓값

동전 던지기 결과를 알게 된다면 얻게 될 정보량에 대한 기댓값은 개별 사건으로부터 얻게 될 정보량에 그 사건이 일어날 확률을 곱한 값을 모두 더하여 계산합니다.

E[I]=phIh+ptIt \begin{align} E[I] &= p_h I_h + p_t I_t \end{align}

여기서,

  • E[I]E[I]: 정보량에 대한 기댓값

동전 던지기 결과로부터 얻을 정보량에 대한 기댓값을 계산할 때 지배적인 영향을 미치는 것은 뒷면일 수도 있고 앞면일 수도 있습니다.

  • 앞면의 경우 정보량은 작겠지만 사건 발생 확률이 크다.
  • 뒷면의 경우 정보량은 크겠지만 사건 발생 확률이 작다.

각 사건이 정보량에 대한 기댓값에 미치는 영향이 어느 정도인지는 아래 두 값을 계산하면 알 수 있습니다.

  • phIhp_h I_h: 앞면의 경우
  • ptItp_t I_t: 뒷면의 경우

4. 정보원(Information Source)의 엔트로피(Entropy)

엔트로피에 대한 정의는 정보량에 대한 기댓값과 같습니다.

H=E[I] \begin{align} H = E[I] \end{align}

이 글에서 예로 든 동전을 던져서 나오는 결과 맞추기 게임을 한다면 다음과 같이 말할 수 있습니다.

  • 동전 던지기 결과를 앞면이라고 예측하면 맞을 가능성이 높다.
    • 예측 불확실성이 작다.
    • 정보 부재에 대한 아쉬움이 작다.
    • 정보의 가치에 대한 기대가 작다.
    • 엔트로피가 작다.

5. 정보량, 기댓값, 엔트로피 계산 결과

ph=99100p_h = \frac{99}{100}인 동전에 대하여 정보량, 기댓값, 엔트로피를 계산하면 아래와 같습니다.

  • 특정 사건의 정보량:

Ih=log2ph=log299100=0.0145It=log2pt=log21100=6.6439 \begin{align} I_h = -log_2{p_h} = -log_2{\frac{99}{100}} = 0.0145 \\ I_t = -log_2{p_t} = -log_2{\frac{1}{100}} = 6.6439 \end{align}

  • 정보량에 대한 기댓값(엔트로피):

H=E[I]=phIh+ptIt=99100×0.0145+1100×6.6439=0.0144+0.0664=0.0808 \begin{align} H &= E[I] \\ &= p_h I_h + p_t I_t \\ &= \frac{99}{100} \times 0.0145 + \frac{1}{100} \times 6.6439 \\ &= 0.0144 + 0.0664 \\ &= 0.0808 \end{align}

위 계산 결과와 비교할 수 있도록 ph=12p_h = \frac{1}{2}인 동전에 대하여 정보량, 기댓값, 엔트로피를 계산해 보았습니다.

  • 특정 사건의 정보량:

Ih=log2ph=log212=1.0It=log2pt=log212=1.0 \begin{align} I_h = -log_2{p_h} = -log_2{\frac{1}{2}} = 1.0 \\ I_t = -log_2{p_t} = -log_2{\frac{1}{2}} = 1.0 \end{align}

  • 정보량에 대한 기댓값(엔트로피):

H=E[I]=phIh+ptIt=12×1.0+12×1.0=0.5+0.5=1.0 \begin{align} H &= E[I] \\ &= p_h I_h + p_t I_t \\ &= \frac{1}{2} \times 1.0 + \frac{1}{2} \times 1.0 \\ &=0.5 + 0.5 \\ &= 1.0 \end{align}

Written with StackEdit.

댓글

이 블로그의 인기 게시물

Intel MKL 예제를 Microsoft Visual C++로 빌드하기

Intel MKL 예제를 Microsoft Visual C++로 빌드하기 인텔 프로세서 시스템에서 아래의 영역에 해당하는 수학 계산을 빠르게 수행하고자 한다면 Intel MKL 라이브러리를 사용할 수 있습니다. Linear Algebra Fast Fourier Transforms (FFT) Vector Statistics & Data Fitting Vector Math & Miscellaneous Solvers 이 문서는 Intel MKL 이 제공하는 예제 파일을 Microsoft Visual C++ 로 컴파일하고 링크하여 실행 파일을 만드는 과정을 소개합니다. 빌드 환경 다음은 이 문서를 작성하는 과정에서 Intel MKL 예제를 빌드하기 위하여 사용한 환경입니다. 시스템 운영체제: Windows 10 (64비트) 프로세서: Intel Core i7 설치 제품 IDE: Microsoft Visual Studio Community 2019 (version 16) 라이브러리: Intel Math Kernel Library 2019 Update 5 환경 변수 명령 프롬프트 창을 엽니다. 아래 스크립트를 실행하여 환경 변수 INCLUDE , LIB , 그리고 PATH 를 설정합니다. @echo off set CPRO_PATH=C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows set MKLROOT=%CPRO_PATH%\mkl set REDIST=%CPRO_PATH%\redist set INCLUDE=%MKLROOT%\include;%INCLUDE% set LIB=%MKLROOT%\lib\intel64;%LIB% set PATH=%REDIST%\intel64\mkl;%PATH% REM for OpenMP intel thread set LIB=%CPRO_PATH%\compiler\lib...

Llama 3.2로 문장 생성 및 챗팅 완성 실습

Llama 3.2로 문장 생성 및 챗팅 완성 실습 Running Meta Llama on Linux 문서의 내용을 참고하여 Llama 3.2 1B 모델로 다음 두 가지 기능을 실습합니다. 문장 완성 챗팅 완성 실습 환경 Ubuntu 20.04.6 LTS Python 3.12.7 Llama3.2-1B, Llama3.2-1B-Instruct rustc 1.83.0 NVIDIA RTX 4090 24GB 프로그램 준비 실습에서 사용할 wget , md5sum 설치 sudo apt-get install wget sudo apt-get install md5sum NVIDIA GPU 설치 여부 확인 nvidia-smi 실습 디렉토리 만들기 mkdir llama3-demo cd llama3-demo git clone https://github.com/meta-llama/llama3.git Python 3.10 이상의 버전으로 가상환경 만들고 활성화 python -m venv llama-venv . llama-venv/bin/activate Rust 컴파일러 설치 How To Install Rust on Ubuntu 20.04 문서를 참고하여 Rust 컴파일러를 설치합니다. curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh 위 명령을 실행하면 아래와 같이 세 가지 선택 옵션이 나타나는데 그냥 엔터를 쳐서 1번 옵션으로 진행합니다. ... 1) Proceed with installation (default) 2) Customize installation 3) Cancel installation 아래 명령을 실행하여 현재 쉘에 반영하고 설치된 컴파일러 버전을 확인합니다. source $HOME/.cargo/env rustc --version 의존 라이브러리 설치 pip install ...