← 문제 목록/Sequential Bayesian Update (log-space) [medium]
문제 해설

Sequential Bayesian Update (log-space) [medium]

확률 · medium

preview

Sequential Bayesian Update [medium]

v1 Bayes 는 1 회 관측 후 posterior. 실무에서는 독립 관측 여러 번 이 쌓이면서 posterior 가 prior 가 되어 다음 관측을 흡수:

P(HE1,E2,,ET)P(H)t=1TP(EtH)P(H | E_1, E_2, \ldots, E_T) \propto P(H) \cdot \prod_{t=1}^{T} P(E_t | H)

문제: 수치적 안정성

관측 개수 TT 가 크거나 likelihood 가 작으면 곱이 underflow (1030010^{-300} 이하) 로 0 됨.

해결: log-space:

logP(HE1:T)=logP(H)+tlogP(EtH)logZ\log P(H | E_{1:T}) = \log P(H) + \sum_t \log P(E_t | H) - \log Z

정규화는 각 단계에서 할 필요 없고, 마지막에 log-sum-exp 로 한 번 만. 중간엔 단순 합.

과제

함수 sequential_bayes(prior, likelihoods) 를 완성하세요.

  • prior shape (K,): 합 = 1, P(Hi)P(H_i).
  • likelihoods shape (T, K): 각 행 tt 는 관측 EtE_t 의 likelihood 벡터 (반드시 합 1 아님 — 관측 조건부).
  • 반환: (final_posterior, history)
    • final_posterior: shape (K,), 합 = 1.
    • history: shape (T+1, K)history[0] = prior, history[t] = 관측 tt 개 후 posterior (각 행 합 1).
  • log-space 로 계산 하되 반환은 확률 (exp 복원 + 정규화).

왜 log-space?

  • 1000 관측에서 likelihood 가 0.5 씩이면 0.51000103010.5^{1000} \approx 10^{-301} → fp64 underflow.
  • log-space 에선 덧셈뿐이라 underflow 없음.
  • 최종 정규화만 log-sum-exp trick (max\max 빼고 복원).

테스트 케이스

#이름검증
1반환 (final, (T+1, K))
2history[0] = prior
3history[T] = final_posterior
4각 row 합 = 1
5작은 likelihood (0.01) 가 1000 회 관측돼도 finite + 정상
6naive (비 log) 와 저 T 에서 일치
7prior × prod(likelihoods) 수식 검증
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.