10.7 특수한 최적화 문제

실습 · 연습문제 2개

Expected improvement 구현하기 expected-improvement

베이지안 최적화의 대리모델은 점 x\mathbf{x}에서 목적값을 정규분포 Y∼N(μ,σ2)Y \sim \mathcal{N}(\mu, \sigma^2)로 예측한다. 지금까지 관측한 최솟값이 f+f^{+}일 때(최소화 문제), expected improvement(EI)는 개선량의 기댓값이다.

EI=E[max⁡(f+−ξ−Y, 0)]=(f+−ξ−μ) Φ(z)+σ φ(z),z=f+−ξ−μσ.\mathrm{EI} = \mathbb{E}\big[\max(f^{+} - \xi - Y,\ 0)\big] = (f^{+} - \xi - \mu)\,\Phi(z) + \sigma\,\varphi(z), \qquad z = \frac{f^{+} - \xi - \mu}{\sigma}.

Φ\Phi와 φ\varphi는 표준정규분포의 누적분포함수와 확률밀도함수이고, ξ≥0\xi \ge 0은 탐색을 조금 더 하게 만드는 여유다. σ=0\sigma = 0이면 불확실성이 없으므로 EI=max⁡(f+−ξ−μ, 0)\mathrm{EI} = \max(f^{+} - \xi - \mu,\ 0)이다.

함수 expected_improvement(mu, sd, best, xi=0.0)를 완성한다. mu, sd는 스칼라이거나 같은 shape의 배열이고, 같은 shape의 결과를 반환한다. scipy.stats.norm의 cdf와 pdf를 쓴다.

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

  • 몬테카를로로 추정한 E[max⁡(f+−Y,0)]\mathbb{E}[\max(f^{+} - Y, 0)]와 일치한다
  • σ=0\sigma = 0일 때의 값
  • EI는 음수가 아니고, 평균이 낮을수록 크다(활용)
  • 평균이 같으면 불확실성이 클수록 크다(탐색)
  • ξ\xi를 키우면 EI가 줄어든다

힌트: σ=0\sigma = 0인 성분에서 0으로 나누지 않도록 np.where로 나눠 처리한다.

2목적 hypervolume 계산하기 hypervolume-2d

다목적 최적화의 결과는 점 하나가 아니라 Pareto front라는 점들의 집합이다. 두 front를 비교하는 대표적인 지표가 hypervolume이다. 모든 목적을 최소화할 때, 기준점 r=(r1,r2)\mathbf{r} = (r_1, r_2)(모든 목적에서 받아들일 수 있는 가장 나쁜 값)를 정하고, 집합의 점들이 지배하는 영역

⋃f∈F[f1,r1]×[f2,r2]\bigcup_{\mathbf{f} \in F} [f_1, r_1] \times [f_2, r_2]

의 넓이를 잰다. 넓이가 클수록 front가 기준점에서 멀리, 넓게 펼쳐져 있다.

함수 hypervolume_2d(F, ref)를 완성한다. F는 shape (m, 2)의 목적값, ref는 (2,)의 기준점이다.

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

  • 점 하나 (1,1)(1, 1), 기준점 (3,3)(3, 3)이면 넓이 4
  • 계단 모양으로 겹치는 두 점 (1,2)(1, 2), (2,1)(2, 1)이면 겹친 부분을 한 번만 세어 3
  • 점의 순서와 지배당한 점은 결과를 바꾸지 않는다
  • 기준점보다 나쁜 좌표가 있는 점은 기여하지 않는다
  • 무작위 점 집합에서 격자로 센 넓이와 일치한다

힌트: f1f_1 오름차순으로 정렬하고 지금까지의 최소 f2f_2를 기억하며 직사각형 띠를 더한다.