정보 이론은 정보의 저장, 전송, 압축에 관한 수학적 이론이다. Claude Shannon이 1948년 창시했으며 엔트로피, 채널 용량, 데이터 압축의 이론적 한계를 정량화한다.
Shannon 엔트로피
정보량 (자기 정보):
I(x) = -log₂(P(x)) [비트]
확률이 낮을수록 정보량이 크다
Shannon 엔트로피 (불확실성의 평균):
H(X) = -Σ P(x) · log₂(P(x))
H(X) = E[I(X)]
최대 엔트로피: 균등 분포일 때 H = log₂(n)
최소 엔트로피: 확실한 결과일 때 H = 0
엔트로피 계산 예시
python
import numpy as np
from scipy.stats import entropy
def shannon_entropy(probs):
"""비트 단위 Shannon 엔트로피"""
probs = np.array(probs)
probs = probs[probs > 0] # 0 제거 (0 * log(0) = 0 정의)
return -np.sum(probs * np.log2(probs))
# 동전 던지기 (공정한 동전)
fair_coin = [0.5, 0.5]
print(f"공정한 동전: {shannon_entropy(fair_coin):.3f} bits") # 1.0
# 편향된 동전
biased_coin = [0.9, 0.1]
print(f"편향된 동전: {shannon_entropy(biased_coin):.3f} bits") # 0.469
# 주사위 (6면)
dice = [1/6] * 6
print(f"주사위: {shannon_entropy(dice):.3f} bits") # 2.585
# 조건부 엔트로피 H(Y|X)
joint = np.array([[0.3, 0.1], [0.1, 0.5]])
marginal_x = joint.sum(axis=1)
conditional_entropy = sum(
marginal_x[i] * shannon_entropy(joint[i] / marginal_x[i])
for i in range(len(marginal_x))
)
print(f"조건부 엔트로피: {conditional_entropy:.3f} bits")
I(X;Y) = H(X) + H(Y) - H(X,Y)
= H(X) - H(X|Y)
= H(Y) - H(Y|X)
해석: X를 알면 Y에 대한 불확실성이 얼마나 줄어드는가
ML 응용: 특성 선택 (feature selection)
KL 발산 (쿨백-라이블러)
python
from scipy.stats import entropy
# D_KL(P || Q): P를 Q로 근사할 때의 정보 손실
P = [0.4, 0.3, 0.2, 0.1]
Q = [0.25, 0.25, 0.25, 0.25]
kl_div = entropy(P, Q) # scipy는 자연 로그 사용
kl_bits = entropy(P, Q, base=2) # 비트 단위
print(f"KL 발산: {kl_bits:.3f} bits")
# ML에서 교차 엔트로피 = H(P) + D_KL(P||Q)
# 실제 분포 P를 모델 Q로 예측할 때의 손실
관련 문서