본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Maximum likelihood estimation; MLE; 최대 우도 추정, 최대 가능도 추정
관측된 데이터가 나올 확률(우도)을 가장 크게 만드는 모수 값을 추정값으로 고르는 방법

최대 우도 추정(maximum likelihood estimation, MLE)은 확률 모델의 모수를 데이터로 정하는 가장 기본적인 방법이다. "이 모수라면 지금 본 데이터가 나올 확률이 얼마인가"를 모수의 함수로 보고(이것이 우도다), 그 값이 가장 큰 모수를 고른다. likelihood를 '가능도'로 옮겨 '최대 가능도 추정', '최대가능도 방법'이라고도 하며, 줄여서 '최우추정(법)', '최대우도법'이라고도 한다.

기계 학습의 손실 함수 대부분이 MLE에서 나온다. 분류의 교차 엔트로피 손실은 범주 분포의 음의 로그 우도이고, 회귀의 평균 제곱 오차는 가우스 잡음을 가정한 음의 로그 우도이며, 대형 언어 모델의 사전 학습도 다음 토큰의 로그 우도를 최대화하는 MLE다. 사전 분포를 더하면 최대 사후 확률(MAP) 추정이 되고, 이는 규제와 같아진다. 상위 개념은 기계 학습, 생성 모델 문서 참고.

데이터 x1,…,xn이 모수 θ를 가진 분포 p(x∣θ)에서 독립적으로 나왔다고 하자(i.i.d. 가정). 우도 함수와 최대 우도 추정량은

L(θ)=∏i=1np(xi∣θ),θ^MLE=arg⁡maxθL(θ)

이다. 확률을 여러 개 곱하면 값이 너무 작아져 컴퓨터에서 언더플로가 나고 미분도 번거로우므로, 단조 증가 함수인 로그를 씌운 로그 우도를 최대화한다. 최적화 라이브러리는 최소화를 기본으로 하므로 실무에서는 음의 로그 우도(negative log-likelihood, NLL)를 최소화한다.

ℓ(θ)=∑i=1nlog⁡p(xi∣θ),θ^MLE=arg⁡minθ(−∑i=1nlog⁡p(xi∣θ))

로그 우도가 미분 가능하면 ∇θℓ(θ)=0(우도 방정식)의 해 중에서 찾는다. ∇θℓ을 점수 함수(score function)라 한다.

베르누이 분포

편집 원본 편집

동전을 n번 던져 앞면이 k번 나왔다. 앞면 확률이 p이면 ℓ(p)=klog⁡p+(n−k)log⁡(1−p)이고, 미분해서 0으로 두면 p^=k/n이다. 직관과 같은 결과다. 다만 k=0이면 p^=0이 되어 "절대 앞면이 안 나온다"고 단정하는 문제가 있다(아래 MAP 절 참고).

xi∼𝒩(μ,σ2)이면

ℓ(μ,σ2)=−n2log⁡(2πσ2)−12σ2∑i=1n(xi−μ)2

이고, 이를 최대화하면 μ^=x¯, σ^2=1n∑i(xi−x¯)2이다. 분산 추정량은 n−1이 아니라 n으로 나누므로 기댓값이 n−1nσ2인 편향 추정량이다. MLE가 언제나 불편 추정량은 아니라는 대표적인 예다. 자세한 내용은 정규 분포 문서 참고.

선형 회귀 = 최소제곱

편집 원본 편집

yi=w⊤xi+εi, εi∼𝒩(0,σ2)로 두면 음의 로그 우도는

−ℓ(w)=12σ2∑i=1n(yi−w⊤xi)2+n2log⁡(2πσ2)

이다. w에 대해서는 제곱 오차의 합만 남으므로, 가우스 잡음 가정에서 MLE는 최소제곱법과 같다. 평균 제곱 오차 손실의 확률적 근거가 여기에 있다. 잡음을 라플라스 분포로 가정하면 같은 논리로 평균 절대 오차(L1 손실)가 나온다.

분류 = 교차 엔트로피

편집 원본 편집

K개 클래스 분류에서 모델이 소프트맥스로 확률 y^ic=p(c∣xi,θ)를 낸다고 하자. 정답이 원-핫 벡터 yi이면

−ℓ(θ)=−∑i=1n∑c=1Kyiclog⁡y^ic

로, 이것이 정확히 교차 엔트로피 손실이다. 이진 분류에서 시그모이드 출력을 쓰면 이진 교차 엔트로피, 즉 로지스틱 회귀의 손실이 된다.

자기회귀 언어 모델은 문장 확률을 p(x1,…,xT)=∏tp(xt∣x<t)로 분해하고, 말뭉치 전체의 로그 우도 ∑tlog⁡pθ(xt∣x<t)를 최대화한다. 토큰당 평균 음의 로그 우도의 지수가 퍼플렉시티다. 자세한 내용은 생성 모델 문서 참고.

왜 MLE인가: KL 발산 관점

편집 원본 편집

데이터가 실제 분포 pdata에서 나온다면, 표본 평균은 기댓값으로 수렴하므로

1nℓ(θ)→𝔼x∼pdata[log⁡pθ(x)]=−H(pdata)−KL(pdata‖pθ)

이다. 엔트로피 H(pdata)는 θ와 무관하므로, 로그 우도 최대화는 데이터 분포에서 모델 분포로의 쿨백-라이블러 발산 KL(pdata‖pθ) 최소화와 같다. 교차 엔트로피 H(pdata,pθ) 최소화라고 해도 같은 말이다.

이 방향의 KL 발산은 데이터가 있는 곳에 모델 확률이 0에 가까우면 큰 벌점을 주므로, 모델이 데이터 분포 전체를 덮으려는 성질(mode-covering)이 있다. 생성 모델에서 MLE로 학습한 모델의 표본이 흐릿해지기 쉽다는 설명이 여기서 나온다. 반대 방향 KL이나 다른 발산을 쓰는 방법(예: GAN)과 대비된다.

모델이 올바르고 몇 가지 정칙 조건(지지 집합이 모수에 의존하지 않음, 매끄러움 등)이 성립하면, 표본이 커질 때 MLE는 다음 성질을 가진다.

성질 내용 의미
일치성 θ^n→θ0 (확률 수렴) 데이터가 많아지면 참값에 다가간다
점근 정규성 n(θ^n−θ0)→𝒩(0, I(θ0)−1) 신뢰 구간과 왈드 검정의 근거. I는 피셔 정보량
점근 효율성 분산이 크라메르-라오 하한 I(θ0)−1/n에 도달 큰 표본에서 불편 추정량 중 가장 정밀하다
불변성 g(θ)의 MLE는 g(θ^) 표준편차의 MLE는 분산 MLE의 제곱근. 매개변수화를 바꿔도 답이 같다

피셔 정보량은 I(θ)=𝔼[∇θlog⁡p(x∣θ)∇θlog⁡p(x∣θ)⊤]=−𝔼[∇θ2log⁡p(x∣θ)]로, 로그 우도 곡면이 얼마나 뾰족한지를 잰다. 뾰족할수록 모수가 정밀하게 정해진다.

이 성질들은 점근적이다. 표본이 적으면 편향이 있을 수 있고(정규 분포의 분산), 매개변수 수가 데이터에 비해 많으면 과적합된다. 또 모델이 틀렸으면(실제 분포가 모델 족에 없으면) MLE는 참값이 아니라 KL 발산으로 가장 가까운 모델로 수렴한다.

  • 닫힌 해: 지수족 분포(베르누이, 정규, 포아송 등)는 충분 통계량으로 바로 구한다.
  • 뉴턴 방법과 피셔 점수법: 2차 미분(헤세 행렬)이나 피셔 정보량을 써서 빠르게 수렴한다. 로지스틱 회귀 등 일반화 선형 모형의 표준 해법인 반복 재가중 최소제곱(IRLS)이 이 방식이다.
  • 경사 하강법: 매개변수가 많은 신경망은 NLL을 손실로 두고 확률적 경사 하강법이나 Adam 옵티마이저로 최소화한다. 미니배치 NLL의 평균이 전체 NLL의 불편 추정이다.
  • EM 알고리즘: 관측되지 않는 잠재 변수가 있으면 우도를 직접 최대화하기 어렵다. 잠재 변수의 사후 분포를 계산하는 E 단계와 기대 로그 우도를 최대화하는 M 단계를 번갈아 하며 우도를 단조 증가시킨다. 가우시안 혼합 모델이 대표 예다. 자세한 내용은 EM 알고리즘 문서 참고.
  • 수치 안정성: 확률 대신 로그 확률로 계산하고, 소프트맥스와 로그를 합친 함수(log_softmax, logsumexp)를 쓴다. 분산처럼 양수여야 하는 모수는 로그를 취해 제약 없이 최적화한다.

numpy 2.1, SciPy 1.15, PyTorch 2.5에서 실행해 확인했다.

import numpy as np
from scipy.optimize import minimize
from scipy.stats import norm

rng = np.random.default_rng(0)
x = rng.normal(loc=2.0, scale=1.5, size=1000)

# 1) 닫힌 해
mu_hat = x.mean()
sigma_hat = np.sqrt(((x - mu_hat) ** 2).mean())   # n으로 나눈다
print(mu_hat, sigma_hat)                           # 1.928 1.465

# 2) 수치 최적화: 음의 로그 우도 최소화
def nll(params):
    mu, log_sigma = params                         # sigma > 0을 로그 매개변수화로 보장
    return -norm.logpdf(x, loc=mu, scale=np.exp(log_sigma)).sum()
res = minimize(nll, x0=[0.0, 0.0], method="L-BFGS-B")
print(res.x[0], np.exp(res.x[1]))                  # 1.928 1.465 (닫힌 해와 같다)
import math
import torch
import torch.nn.functional as F

# 3) 범주 분포의 NLL = 교차 엔트로피
logits = torch.tensor([ [2.0, 0.5, -1.0], [0.1, 0.2, 3.0] ])
target = torch.tensor([0, 2])
nll = -F.log_softmax(logits, dim=-1)[torch.arange(2), target].mean()
print(torch.allclose(nll, F.cross_entropy(logits, target)))     # True

# 4) 분산 1인 가우스의 NLL = MSE / 2 + 상수
pred, y = torch.randn(100), torch.randn(100)
g = F.gaussian_nll_loss(pred, y, torch.ones(100), full=True)
print(torch.allclose(g, F.mse_loss(pred, y) / 2 + 0.5 * math.log(2 * math.pi)))  # True

PyTorch의 F.cross_entropy는 로짓을 받아 내부에서 log_softmax와 NLL을 합쳐 계산하므로, 소프트맥스를 먼저 적용한 값을 넣으면 안 된다.

MAP 추정과 비교

편집 원본 편집

베이즈 정리로 모수의 사후 분포는 p(θ∣x)∝p(x∣θ)p(θ)이다. 사후 분포를 최대로 하는 값이 최대 사후 확률(maximum a posteriori, MAP) 추정이다.

θ^MAP=arg⁡maxθ[log⁡p(x∣θ)+log⁡p(θ)]

로그 사전 분포가 손실에 더해지는 규제항이 된다.

  • 가우스 사전 분포 w∼𝒩(0,τ2I): −log⁡p(w)=12τ2‖w‖2+상수이므로 L2 정규화(릿지, 가중치 감쇠)가 된다. 잡음 분산이 σ2인 선형 회귀라면 규제 계수 λ=σ2/τ2인 릿지 회귀와 같다.
  • 라플라스 사전 분포: ‖w‖1 항이 생겨 L1 정규화(라소)가 된다.
  • 베타 사전 분포 Beta(α,β)(베르누이): p^MAP=k+α−1n+α+β−2. α=β=2이면 앞면·뒷면을 하나씩 더 본 것과 같아(라플라스 평활), k=0이어도 확률이 0이 되지 않는다.
import numpy as np
from sklearn.linear_model import Ridge
rng = np.random.default_rng(1)
X = rng.normal(size=(50, 5)); y = X @ rng.normal(size=5) + 0.5 * rng.normal(size=50)
sigma2, tau2 = 0.25, 0.1                     # 잡음 분산, 사전 분포 분산
lam = sigma2 / tau2
w_map = np.linalg.solve(X.T @ X + lam * np.eye(5), X.T @ y)
print(np.allclose(w_map, Ridge(alpha=lam, fit_intercept=False).fit(X, y).coef_))  # True
항목 MLE MAP 완전 베이즈 추론
최적화 대상 p(x∣θ) p(x∣θ)p(θ) 점 추정 없음. 사후 분포 p(θ∣x) 전체
사전 지식 쓰지 않음 사전 분포로 반영 사전 분포로 반영
결과 점 하나 점 하나(사후 분포의 최빈값) 분포. 예측은 ∫p(x*∣θ)p(θ∣x)dθ
데이터가 적을 때 과적합, 0 확률 문제 사전 분포가 완충 불확실성까지 표현
데이터가 많을 때 세 방법이 비슷해진다 우도가 사전 분포를 압도 사후 분포가 MLE 주변으로 좁아진다
매개변수화 불변성 있음 없음(밀도의 최빈값은 변수 변환에 따라 바뀐다) 있음
계산 비용 낮음 낮음 높음(MCMC, 변분 추론). 가우시안 프로세스처럼 닫힌 식이 있는 경우도 있다

한계와 주의점

편집 원본 편집
  • 과적합: 매개변수가 많으면 훈련 데이터의 우도를 끝없이 올릴 수 있다. 규제(MAP), 조기 종료, 검증 데이터의 로그 우도로 모델을 고른다. 자세한 내용은 편향-분산 트레이드오프 문서 참고.
  • 우도가 무한대로 가는 경우: 가우시안 혼합 모델에서 한 성분의 평균이 데이터 점 하나에 겹치고 분산이 0으로 줄면 우도가 무한대가 된다. 분산에 하한을 두거나 사전 분포를 쓴다.[1] 선형 분리 가능한 데이터의 로지스틱 회귀도 가중치가 무한대로 발산한다.
  • 0 빈도: 훈련 데이터에 한 번도 안 나온 사건의 확률이 0이 된다. n-그램 언어 모델의 평활 기법이 이를 보완한다.
  • 모델 오지정: MLE는 주어진 모델 족 안에서 최선일 뿐이다. 분포 가정이 틀렸으면 추정량과 신뢰 구간 모두 틀릴 수 있다.
  • 우도와 표본 품질: 생성 모델에서 우도가 높다고 표본이 보기 좋은 것은 아니다.

가우스, 라플라스, 에지워스 등이 비슷한 생각을 먼저 썼지만, 현대적인 최대 우도 방법은 로널드 피셔가 1912~1922년에 정립했다.[2] 피셔는 1922년 논문에서 일치성, 효율성, 충분성 같은 추정량의 기준을 세우고 최대 우도 방법을 체계화했다.[3]

  1. ↑ Christopher M. Bishop, 《Pattern Recognition and Machine Learning》, Springer, 2006, 9.2.1절. 마이크로소프트 리서치 공개본
  2. ↑ John Aldrich, 〈R.A. Fisher and the making of maximum likelihood 1912-1922〉, Statistical Science 12(3), 162~176, 1997. doi:10.1214/ss/1030037906
  3. ↑ R. A. Fisher, 〈On the mathematical foundations of theoretical statistics〉, Philosophical Transactions of the Royal Society A 222, 309~368, 1922. doi:10.1098/rsta.1922.0009