25.3 능동 학습과 베이지안 실험 설계

실습 · 연습문제 2개

D-최적 설계를 찾는 교환 알고리즘 d-optimal-exchange

회귀 모델 y=F(x) β+ε\mathbf{y} = \mathbf{F}(\mathbf{x})\,\boldsymbol{\beta} + \boldsymbol{\varepsilon}의 설계 행렬 F\mathbf{F}는 실험 조건마다 한 행이다. D-최적 설계는 log⁡det⁡(F⊤F)\log\det(\mathbf{F}^\top\mathbf{F})를 최대화하는 실험 조건 nn개를 고른다.

함수 d_optimal(features, cand, n, rng, sweeps)를 완성한다.

인자 뜻
features 조건 배열 (n,)을 받아 설계 행렬 (n, p)를 돌려주는 함수
cand 후보 실험 조건 (C,)
n 실험 수
rng np.random.Generator. 초기 설계를 rng.choice(cand, size=n)으로 뽑는다
sweeps 최대 반복 횟수

알고리즘:

  1. 무작위 초기 설계에서 시작한다.
  2. 한 번의 sweep에서 각 위치 ii의 조건을 후보 전체로 바꿔 보고, log⁡det⁡\log\det가 가장 커지는 후보가 현재보다 좋으면 바꾼다.
  3. 한 sweep 동안 아무것도 바뀌지 않으면 멈춘다.
  4. 정렬한 설계 (n,)을 반환한다.

F⊤F\mathbf{F}^\top\mathbf{F}가 특이하면 log⁡det⁡\log\det는 −∞-\infty로 취급한다(np.linalg.slogdet의 부호가 0 이하인 경우).

테스트는 다음을 확인한다.

  • 직선 모델(실험 4번)에서 양 끝 {−1,−1,1,1}\{-1, -1, 1, 1\}을 찾는지
  • 2차 모델(실험 6번)에서 {−1,−1,0,0,1,1}\{-1, -1, 0, 0, 1, 1\}을 찾는지
  • 결과의 log⁡det⁡\log\det가 같은 실험 수의 등간격 설계보다 크거나 같은지

힌트: 본문 셀 4와 같은 알고리즘이다. 특이 행렬 처리만 덧붙인다.

기대 정보 이득의 중첩 몬테카를로 추정 eig-monte-carlo

측정 모델이 y=m(θ,d)+ε\mathbf{y} = \mathbf{m}(\theta, d) + \boldsymbol{\varepsilon}, ε∼N(0,σ2I)\boldsymbol{\varepsilon} \sim \mathcal{N}(\mathbf{0}, \sigma^2\mathbf{I})일 때, 설계 dd의 기대 정보 이득을 중첩 몬테카를로로 추정한다.

EIG^=1N∑n=1N[log⁡p(yn∣θn)−log⁡1M∑m=1Mp(yn∣θm)]\widehat{\mathrm{EIG}} = \frac{1}{N}\sum_{n=1}^{N}\Big[\log p(\mathbf{y}_n \mid \theta_n) - \log \frac{1}{M}\sum_{m=1}^{M} p(\mathbf{y}_n \mid \theta_m)\Big]

함수 eig_nmc(mean_fn, theta_outer, theta_inner, sigma, rng)를 완성한다.

인자 뜻
mean_fn 파라미터 배열 (K, p)를 받아 측정의 평균 (K, n)을 돌려주는 함수(설계 dd는 이미 고정되어 있다)
theta_outer 사전분포에서 뽑은 바깥 표본 θn\theta_n, shape (N, p)
theta_inner 사전분포에서 따로 뽑은 안쪽 표본 θm\theta_m, shape (M, p)
sigma 측정 잡음 표준편차
rng np.random.Generator. 가상 측정 yn\mathbf{y}_n의 잡음을 뽑는 데 쓴다
  1. yn=m(θn)+σ ϵn\mathbf{y}_n = \mathbf{m}(\theta_n) + \sigma\,\boldsymbol{\epsilon}_n을 만든다. rng.normal(size=...)을 한 번 호출해 (N, n) 잡음을 뽑는다.
  2. 가우시안 로그우도의 상수항(−n2log⁡2πσ2-\tfrac{n}{2}\log 2\pi\sigma^2)은 두 항에서 같으므로 빼도 된다.
  3. 안쪽 평균의 로그는 수치 안정을 위해 scipy.special.logsumexp로 계산한다.
  4. 추정값(실수 하나, 단위 nat)을 반환한다.

테스트는 선형 가우시안 모델의 해석해 12log⁡det⁡(I+σ−2ΦΣ0Φ⊤)\tfrac{1}{2}\log\det(\mathbf{I} + \sigma^{-2}\boldsymbol{\Phi}\boldsymbol{\Sigma}_0\boldsymbol{\Phi}^\top)와 비교하고, 측정값이 파라미터와 무관한 설계에서 EIG가 0 근처인지, 같은 측정을 반복하면 EIG가 커지는지 확인한다.

힌트: 본문 셀 3의 eig_nmc와 같은 계산이다. 안쪽 로그우도 행렬의 shape은 (N, M)이다.