Files
2nd/10_Wiki/Topics/AI_and_ML/Epistemic-Uncertainty.md
T
Antigravity Agent f8b21af4be Wiki cleanup: error-doc removal, dedup merge, link normalization
10_Wiki/Topics 대규모 정리:
- 오류 캡처/미완성 stub 문서 227개 제거
- 교차폴더 중복 43클러스터 병합 (63파일 → redirect)
- 링크명 정규화: 깨진 링크 수정·redirect 직결·개념 매핑 ~2,400건
- 카테고리 MOC 6개 신규 생성
- Graph 섹션 미해결 related-keyword 링크 10,058건 제거

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 23:52:15 +09:00

7.5 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-epistemic-uncertainty Epistemic Uncertainty 10_Wiki/Topics verified self
epistemic uncertainty
model uncertainty
reducible uncertainty
Bayesian DL
deep ensemble
none A 0.96 applied
ai
probability
statistics
epistemic-uncertainty
bayesian
deep-learning
uncertainty
2026-05-10 pending
language framework
Python PyTorch / Pyro / NumPyro

Epistemic Uncertainty

매 한 줄

"매 reducible — 매 data ↑ 매 reduce". 매 vs aleatoric (irreducible noise). 매 ML / DL 의 핵심 개념. 매 Bayesian neural net, 매 deep ensemble, 매 MC dropout, 매 SWAG. 매 OOD / safety / AL critical.

매 핵심

매 epistemic vs aleatoric

  • Epistemic: 매 model 의 부족 — 매 reducible.
  • Aleatoric: 매 data 의 noise — 매 irreducible.
  • Total: 매 sum.

매 method

  • Bayesian DL: 매 weight posterior.
  • Deep ensemble (Lakshminarayanan): 매 N 모델.
  • MC Dropout (Gal & Ghahramani): 매 dropout at inference.
  • SWAG (Maddox): 매 SGD trajectory.
  • Laplace approximation.
  • Variational inference.
  • Conformal prediction: 매 distribution-free.

매 응용

  1. Active learning: 매 uncertain → label.
  2. OOD detection: 매 epistemic ↑.
  3. Safety-critical: 매 abstain.
  4. Bayesian opt: 매 acquisition.
  5. Reinforcement learning: 매 exploration.
  6. Medical / autonomous: 매 reject low-conf.

매 modern context

  • LLM: 매 token entropy + sampled response.
  • Foundation model: 매 calibration.
  • Conformal: 매 marginal coverage guarantee.

💻 패턴

Deep ensemble

import torch

def train_ensemble(create_model, X, y, n=5):
    return [create_model().fit(X, y, seed=s) for s in range(n)]

def ensemble_predict(models, x):
    preds = torch.stack([m(x) for m in models])
    mean = preds.mean(0)
    epistemic = preds.var(0)  # 매 model disagreement
    return mean, epistemic

MC Dropout

class MCDropoutNet(torch.nn.Module):
    def __init__(self, in_dim, hid, out_dim, p=0.2):
        super().__init__()
        self.fc1 = torch.nn.Linear(in_dim, hid)
        self.dropout = torch.nn.Dropout(p)
        self.fc2 = torch.nn.Linear(hid, out_dim)
    
    def forward(self, x):
        return self.fc2(self.dropout(torch.relu(self.fc1(x))))

def mc_predict(model, x, T=50):
    model.train()  # 매 dropout active
    preds = torch.stack([model(x) for _ in range(T)])
    return preds.mean(0), preds.var(0)

Bayesian linear regression (Pyro)

import pyro
import pyro.distributions as dist

def bayesian_lin(X, y):
    w = pyro.sample('w', dist.Normal(torch.zeros(X.shape[1]), torch.ones(X.shape[1])).to_event(1))
    sigma = pyro.sample('sigma', dist.HalfNormal(1.0))
    with pyro.plate('data', len(X)):
        pyro.sample('obs', dist.Normal(X @ w, sigma), obs=y)

SWAG (Maddox 2019)

class SWAG:
    """매 SGD iterates 의 Gaussian fit."""
    def __init__(self, model):
        self.mean = self._flatten(model)
        self.sq_mean = self._flatten(model) ** 2
        self.D = []
        self.K = 20  # 매 low-rank
        self.n = 0
    
    def collect(self, model):
        flat = self._flatten(model)
        self.n += 1
        self.mean = (self.n - 1) / self.n * self.mean + flat / self.n
        self.sq_mean = (self.n - 1) / self.n * self.sq_mean + flat ** 2 / self.n
        if self.n > self.K:
            self.D.pop(0)
        self.D.append(flat - self.mean)
    
    def sample(self):
        var = torch.relu(self.sq_mean - self.mean ** 2)
        z1 = torch.randn_like(self.mean) * torch.sqrt(var) / 2 ** 0.5
        D_mat = torch.stack(self.D)
        z2 = D_mat.T @ torch.randn(len(self.D)) / (2 * (self.K - 1)) ** 0.5
        return self.mean + z1 + z2

Conformal prediction

def conformal_interval(model, X_cal, y_cal, X_test, alpha=0.1):
    """매 marginal coverage 1-alpha."""
    cal_preds = model.predict(X_cal)
    cal_residuals = np.abs(y_cal - cal_preds)
    q = np.quantile(cal_residuals, 1 - alpha, method='higher')
    
    test_preds = model.predict(X_test)
    return test_preds - q, test_preds + q  # 매 [lower, upper]

LLM token uncertainty

def token_entropy(model, prompt, n_tokens=10):
    inputs = tokenizer(prompt, return_tensors='pt')
    with torch.no_grad():
        out = model(**inputs)
    logits = out.logits[0, -n_tokens:]
    probs = logits.softmax(-1)
    return -(probs * probs.clamp(min=1e-10).log()).sum(-1)

Active learning (uncertainty sampling)

def active_learn(unlabeled, model, n_query=10):
    _, epistemic = ensemble_predict(model, unlabeled)
    most_uncertain = epistemic.argsort()[-n_query:]
    return unlabeled[most_uncertain]

OOD detection (Mahalanobis)

def mahalanobis_score(test_features, train_features):
    mu = train_features.mean(0)
    cov = np.cov(train_features.T)
    inv = np.linalg.pinv(cov)
    diff = test_features - mu
    return np.sqrt(np.einsum('bi,ij,bj->b', diff, inv, diff))

Bayesian optimization (UCB)

def ucb_acquisition(mean, std, kappa=2.0):
    return mean + kappa * std

def bayes_opt_step(gp, X_pool):
    mean, std = gp.predict(X_pool, return_std=True)
    return X_pool[ucb_acquisition(mean, std).argmax()]

Disagreement-based exploration (RL)

def epistemic_bonus(ensemble_q_values, state, action):
    qs = [m(state)[action] for m in ensemble_q_values]
    return np.std(qs)  # 매 disagreement = explore here

Calibration (temperature scaling)

def temperature_scale(logits, T):
    return (logits / T).softmax(-1)

def fit_temperature(logits, labels):
    T = torch.tensor(1.0, requires_grad=True)
    optim = torch.optim.LBFGS([T])
    def closure():
        optim.zero_grad()
        loss = F.cross_entropy(logits / T, labels)
        loss.backward()
        return loss
    optim.step(closure)
    return T.item()

매 결정 기준

상황 Approach
Best practical Deep ensemble (5x)
Tight budget MC Dropout
Distribution-free Conformal
Bayesian rigor Pyro / NumPyro VI
LLM Sampled responses + token entropy
Active learning Uncertainty sampling
RL exploration Ensemble disagreement
Safety Conformal + abstain

기본값: 매 deep ensemble (5x) + 매 conformal calibration + 매 abstention threshold + 매 OOD detection.

🔗 Graph

🤖 LLM 활용

언제: 매 safety-critical. 매 active learning. 매 OOD risk. 매 medical / AV. 언제 X: 매 toy problem. 매 abundant data + simple task.

안티패턴

  • Confuse epistemic / aleatoric: 매 reducibility 의 wrong.
  • Single model 의 uncertainty 의 trust: 매 ensemble 필요.
  • No calibration: 매 number 의 meaning X.
  • High-confidence OOD: 매 detect 의 fail.
  • Conformal without exchangeability: 매 coverage 의 lose.

🧪 검증 / 중복

  • Verified (Lakshminarayanan 2017, Gal 2016, Maddox SWAG, Vovk Conformal).
  • 신뢰도 A.

🕓 Changelog

날짜 변경
2026-04-26 UNCERT auto
2026-05-08 Phase 1
2026-05-10 Manual cleanup — epi vs ale + 매 ensemble / MC dropout / SWAG / conformal / AL code