시뮬레이션 대리모델

먼저 읽을 장 26.1 ML 연구자를 위한 연속체 역학과 시뮬레이션24.5 하이브리드 모델과 대리모델

설계 최적화, 불확실성 정량화, 실시간 제어는 같은 시뮬레이션을 수백에서 수백만 번 반복해야 한다. 한 번에 몇 시간 걸리는 시뮬레이션으로는 불가능한 일이다. 대리모델(surrogate model)은 시뮬레이터의 입력–출력 관계를 데이터로 근사해, 같은 질문에 훨씬 빨리 답하는 모델이다. 대리모델의 방법론(GP, 축소 모델, 신경 연산자)은 13.7장과 24.4–24.5장에서 다룬다. 이 장은 물리·공학 문제에서 대리모델을 언제, 어떤 구조로 만들고, 그 이득과 한계를 어떻게 정직하게 보고하는가를 다룬다.

대리모델 논문의 가장 흔한 문제는 두 가지다. 하나는 학습 범위 밖의 조건에서 조용히 틀리는 것이고, 다른 하나는 속도 이득을 불공정한 비교로 부풀리는 것이다. 이 장의 계산은 둘을 모두 직접 보인다.

학습 목표

  • 문제에 맞는 대리모델 구조를 선택한다
  • 대리모델의 정확도와 속도 이득을 공정하게 측정한다
  • 물리 검사로 대리모델의 외삽 실패를 점검하고 그 한계를 안다

대리모델의 종류

왜 필요한가. "시뮬레이션을 대신한다"는 말은 출력이 무엇이냐에 따라 전혀 다른 문제가 된다. 출력의 종류가 데이터의 양, 모델 구조, 평가 방법을 모두 정한다.

세 가지 종류.

종류 입력 → 출력 예 주된 어려움
스칼라 출력 회귀 설계·운전 파라미터 μ\boldsymbol{\mu} → 관심 출력량 yy 형상 파라미터 → 항력 계수, 운전 조건 → 최고 온도 데이터가 적다(시뮬레이션 수 = 표본 수)
장(field) 예측 μ\boldsymbol{\mu} 또는 입력 장 → 출력 장 u(x)u(\mathbf{x}) 유입 조건 → 속도장, 하중 → 응력 분포 출력 차원이 크다(격자점 수)
시간 전개(rollout) 현재 상태 unu^n → 다음 상태 un+1u^{n+1} 한 step 예측을 반복해 궤적 생성 오차가 누적된다(26.5장)

스칼라 회귀는 출력이 하나라 단순해 보이지만 시뮬레이션 한 번이 표본 하나라서 데이터가 수십–수백 개뿐인 경우가 많다. 그래서 GP(Gaussian process)처럼 적은 데이터에서 불확실성까지 주는 모델이 흔히 쓰인다(13.7장; Rasmussen, Williams, 2006). 장 예측은 시뮬레이션 한 번이 수만 개의 값을 주지만, 그 값들은 서로 강하게 상관되어 있어 실제 자유도는 훨씬 작다. 이 구조를 이용하는 것이 다음 절의 축소 모델이다. 시간 전개는 학습은 한 step으로 하지만 사용은 수천 step으로 하므로, 학습 손실과 실제 성능 사이의 간극이 가장 크다.

구조 선택

왜 필요한가. 같은 장 예측이라도 격자가 균일한 사각형인지, 형상이 바뀌는 비구조 메시인지, 해상도를 바꿔 써야 하는지에 따라 쓸 수 있는 구조가 다르다. 구조가 데이터의 기하에 맞지 않으면 보간·재샘플링에서 오차가 생기고, 맞으면 적은 데이터로도 일반화가 좋아진다.

선택 기준.

  • 균일 격자의 장 → CNN·U-Net. 격자를 영상처럼 다룬다. 평행이동 등변성이 지역적 물리 법칙과 잘 맞는다. 형상이 바뀌면 격자로 재샘플링해야 한다.
  • 비구조 메시 → 그래프 신경망. 메시의 노드를 그래프 노드, 셀 연결을 간선으로 두고 메시지 전달로 이웃 상호작용을 학습한다. 형상마다 메시가 달라도 같은 모델을 쓸 수 있다(Pfaff 외, 2021).
  • 함수 → 함수, 해상도 변화 → 신경 연산자. 입력 함수에서 출력 함수로의 사상을 이산화와 분리해 학습한다. FNO·DeepONet 등은 24.4장에서 다룬다.
  • 적은 데이터, 매끄러운 파라미터 의존성 → 축소 모델(POD) + 회귀. 스냅샷 행렬을 특이값 분해해 소수의 공간 모드를 찾고(proper orthogonal decomposition, POD), 모드 계수만 파라미터의 함수로 회귀한다(Berkooz, Holmes, Lumley, 1993). 선형대수만으로 만들 수 있어 다른 구조의 baseline으로도 반드시 비교해야 한다.

POD + 회귀의 수식. 학습 파라미터 μ1,…,μM\mu_1, \dots, \mu_M에서 얻은 해를 행으로 쌓은 스냅샷 행렬 X∈RM×N\mathbf{X} \in \mathbb{R}^{M\times N}에서 평균 uˉ\bar{\mathbf{u}}를 빼고 특이값 분해하면, 앞의 rr개 오른쪽 특이벡터 ϕ1,…,ϕr\boldsymbol{\phi}_1, \dots, \boldsymbol{\phi}_r이 POD 모드다. 대리모델은

u^(μ)=uˉ+∑k=1rak(μ) ϕk\hat{\mathbf{u}}(\mu) = \bar{\mathbf{u}} + \sum_{k=1}^{r} a_k(\mu)\,\boldsymbol{\phi}_k

이고, 계수 함수 ak(μ)a_k(\mu)를 학습 데이터의 투영 계수 ak(μi)=(ui−uˉ)⊤ϕka_k(\mu_i) = (\mathbf{u}_i - \bar{\mathbf{u}})^\top\boldsymbol{\phi}_k로부터 회귀한다. 오차는 두 부분으로 나뉜다. 모드 rr개로 표현할 수 없는 부분(기저 오차)과 계수를 잘못 예측한 부분(회귀 오차)이다. 모드 kk의 특이값 sks_k에 대해 sk2s_k^2의 누적 비율을 "에너지"라 부르고, 학습 데이터의 기저 오차는 버린 에너지와 같다.

점성 Burgers 방정식 ut+(u2/2)x=νuxxu_t + (u^2/2)_x = \nu u_{xx}(주기 경계, 초기조건 0.5+sin⁡x0.5 + \sin x)의 시각 T=1.5T = 1.5 해를 대리모델로 만든다. 파라미터는 점성 ν\nu이고, 학습 범위는 [0.05,0.2][0.05, 0.2]에서 로그 간격 16개다. 26.1장의 보존형 유한체적 solver를 고충실도 모델로 쓴다.

import numpy as np

def solve(nu, N=128, T=1.5):
    """u_t + (u²/2)_x = nu u_xx, 주기 경계 [0, 2π), u0 = 0.5 + sin x. 유한체적 + Heun."""
    dx = 2 * np.pi / N
    u = 0.5 + np.sin(np.arange(N) * dx)                       # (N,)
    n = int(np.ceil(T / (0.4 * min(dx / 1.5, dx**2 / (2 * nu)))))
    def rhs(u):
        ur = np.roll(u, -1)                                    # (N,) 오른쪽 이웃
        a = np.maximum(np.abs(u), np.abs(ur))
        F = 0.25 * (u**2 + ur**2) - 0.5 * a * (ur - u) - nu * (ur - u) / dx   # (N,) 면 유속
        return -(F - np.roll(F, 1)) / dx
    for _ in range(n):
        u1 = u + T / n * rhs(u)
        u = 0.5 * (u + u1 + T / n * rhs(u1))
    return u, n

nu_train = np.geomspace(0.05, 0.2, 16)                         # (16,) 학습 범위 [0.05, 0.2]
X = np.array([solve(nu)[0] for nu in nu_train])                # (16, 128) 스냅샷 행렬
print("스냅샷 행렬", X.shape, " 질량 ∫u dx 범위",
      np.round([X.sum(1).min() * 2 * np.pi / 128, X.sum(1).max() * 2 * np.pi / 128], 6))
스냅샷 행렬 (16, 128)  질량 ∫u dx 범위 [3.141593 3.141593]

모든 스냅샷의 질량 ∫u dx\int u\,dx가 초기값 π\pi와 같다. 보존형 이산화와 주기 경계 덕분이다. 이제 POD 기저를 만들고, 모드 계수를 log⁡ν\log\nu의 3차 다항식으로 회귀한다. 학습 범위 안(내삽)과 밖(외삽)의 ν\nu에서 고충실도 해와 비교한다.

mean = X.mean(0)                                               # (128,)
_, s, Vt = np.linalg.svd(X - mean, full_matrices=False)        # Vt: (16, 128) POD 모드
print("누적 에너지 비율:", np.round(np.cumsum(s**2)[:4] / np.sum(s**2), 5))
r = 4
A = (X - mean) @ Vt[:r].T                                      # (16, r) 학습 계수
coef = [np.polyfit(np.log(nu_train), A[:, k], 3) for k in range(r)]

def surrogate(nu):
    a = np.array([np.polyval(c, np.log(nu)) for c in coef])    # (r,)
    return mean + a @ Vt[:r]                                   # (128,)

rel = lambda a, b: np.linalg.norm(a - b) / np.linalg.norm(b)
for nu in [0.07, 0.13, 0.03, 0.02, 0.4]:
    u_ref = solve(nu)[0]
    proj = mean + (u_ref - mean) @ Vt[:r].T @ Vt[:r]           # 기저로 표현할 수 있는 최선
    tag = "내삽" if 0.05 <= nu <= 0.2 else "외삽"
    print(f"nu={nu:4.2f} ({tag})  대리모델 오차 {rel(surrogate(nu), u_ref):6.2%}  기저 투영 오차 {rel(proj, u_ref):6.2%}")
누적 에너지 비율: [0.98362 0.99957 0.99999 1.     ]
nu=0.07 (내삽)  대리모델 오차  0.03%  기저 투영 오차  0.00%
nu=0.13 (내삽)  대리모델 오차  0.01%  기저 투영 오차  0.01%
nu=0.03 (외삽)  대리모델 오차  1.98%  기저 투영 오차  0.26%
nu=0.02 (외삽)  대리모델 오차  6.58%  기저 투영 오차  0.68%
nu=0.40 (외삽)  대리모델 오차  5.53%  기저 투영 오차  2.06%

모드 4개가 에너지의 99.999% 이상을 담는다. 내삽에서는 오차가 0.03% 이하다. 그러나 범위를 조금만 벗어나도 오차가 수십–수백 배 커진다. 오차 분해가 원인을 알려 준다. ν=0.02\nu = 0.02에서 기저 투영 오차는 0.68%인데 대리모델 오차는 6.58%다. 해 자체는 기저로 꽤 잘 표현되는데, 계수 회귀가 외삽하면서 대부분의 오차가 생겼다. 이 경우 모드를 늘려도 나아지지 않는다. 다항식 회귀가 학습 범위 밖에서 빠르게 발산하는 것은 회귀 모델 일반의 성질이다(16.2장). 반대로 ν=0.4\nu = 0.4에서는 기저 오차도 2%로 커졌다. 점성이 크면 해가 학습 데이터에 없던 모양(더 매끄러운 파형)이 되기 때문이다.

정답 없이 외삽을 알아챌 수 있는가. 실제 사용에서는 새 조건의 고충실도 해가 없다. 그래도 물리 법칙에서 나오는 성질은 정답 없이 검사할 수 있다. 이 방정식의 해는 세 가지를 만족해야 한다. 질량 ∫u dx\int u\,dx가 보존된다. 점성 Burgers 방정식은 새 극값을 만들지 않으므로 해는 초기값의 범위 [−0.5,1.5][-0.5, 1.5] 안에 있다(최대·최소 원리). 같은 이유로 주기 영역의 총변동(total variation) ∑j∣uj+1−uj∣\sum_j |u_{j+1} - u_j|은 초기값 4를 넘지 않는다.

mass0 = np.pi                                                  # ∫(0.5 + sin x) dx over [0, 2π)
for nu in [0.07, 0.03, 0.02, 0.4]:
    u = surrogate(nu)
    mass_err = abs(u.sum() * 2 * np.pi / 128 - mass0)
    tv = np.abs(np.diff(np.append(u, u[0]))).sum()             # 주기 총변동, 초기값 4
    bounds_ok = (u.max() <= 1.5 + 1e-9) and (u.min() >= -0.5 - 1e-9)
    print(f"nu={nu:4.2f}  질량 보존 {mass_err < 1e-10}  최대·최소 원리 {bounds_ok}  "
          f"총변동 {tv:.3f} ≤ 4 {tv <= 4}")
nu=0.07  질량 보존 True  최대·최소 원리 True  총변동 3.430 ≤ 4 True
nu=0.03  질량 보존 True  최대·최소 원리 True  총변동 3.610 ≤ 4 True
nu=0.02  질량 보존 True  최대·최소 원리 False  총변동 4.409 ≤ 4 False
nu=0.40  질량 보존 True  최대·최소 원리 True  총변동 2.229 ≤ 4 True

결과는 세 가지를 말한다. 첫째, 질량은 모든 예측에서 보존된다. 학습 스냅샷이 모두 같은 질량을 가지므로 평균은 같은 질량을, 모드는 질량 0을 가진다. 따라서 평균 + 모드의 어떤 선형 결합도 질량을 보존한다. 선형 축소 모델은 모든 학습 스냅샷이 만족하는 선형 제약을 구조적으로 물려받는다(연습문제 pod-basis). 이 검사는 그래서 외삽을 감지하지 못한다. 둘째, ν=0.02\nu = 0.02의 예측은 최대·최소 원리와 총변동 조건을 모두 어긴다. 학습 범위보다 가파른 충격파를 다항식 계수로 흉내 내다 진동이 생긴 것이다. 정답 없이 실패를 잡아냈다. 셋째, ν=0.4\nu = 0.4의 예측은 모든 검사를 통과하지만 앞 셀에서 5.5% 틀렸다. 물리 검사는 실패를 찾는 도구이지 정확도의 증명이 아니다. ν=0.03\nu = 0.03도 통과했지만 2% 틀렸다.

연구에서의 의미. 구조 선택의 첫 질문은 "가장 단순한 baseline이 얼마나 하는가"다. 이 예처럼 파라미터 하나에 대해 매끄럽게 변하는 문제라면 POD + 다항식이 내삽에서 이미 고충실도 solver의 이산화 오차보다 작은 오차를 낸다. 신경망 대리모델은 이 baseline을 같은 데이터·같은 평가 조건에서 이겨야 의미가 있다. 그리고 baseline의 오차 분해(기저 대 회귀)는 신경망이 어느 쪽을 개선해야 하는지 알려 준다.

다중 충실도

왜 필요한가. 고충실도 시뮬레이션은 비싸서 적게 돌릴 수밖에 없고, 저충실도 시뮬레이션(거친 격자, 단순한 물리 모델, 느슨한 tolerance)은 싸지만 체계적으로 틀린다. 둘을 결합하면 같은 예산으로 더 정확한 대리모델을 얻을 수 있다.

정의. 가장 널리 쓰이는 형태는 고충실도 출력을 저충실도 출력의 함수와 보정항의 합으로 두는 것이다.

fH(μ)=ρ fL(μ)+δ(μ).f_H(\boldsymbol{\mu}) = \rho\, f_L(\boldsymbol{\mu}) + \delta(\boldsymbol{\mu}).

fLf_L은 많은 저충실도 실행으로 정확히 학습하고, 상대적으로 매끄럽고 작은 보정 δ\delta는 적은 고충실도 실행으로 학습한다. fLf_L과 δ\delta를 독립인 GP로 두는 방법이 Kennedy와 O'Hagan(2000)의 자기회귀 모델이다. 신경망에서는 저충실도 해를 입력 채널로 함께 넣거나, 저해상도 데이터로 사전 학습한 뒤 고해상도 데이터로 미세 조정하는 방식이 쓰인다.

직관. 26.1장의 실습 표에서 Re = 400의 N=128N = 128 해는 소산율을 44% 과대 추정했다. 이 오차는 크지만 체계적이어서, 파라미터에 따라 매끄럽게 변한다면 소수의 고해상도 실행으로 보정할 수 있다. 반대로 저충실도 모델이 어떤 영역에서 물리적으로 다른 행동을 보이면(예: 거친 격자에서 비물리적 진동이 생기는 영역) 보정 δ\delta가 매끄럽지 않아 이 전략이 실패한다. 다중 충실도는 두 모델이 상관되어 있을 때만 이득이 있다.

속도 이득의 측정

왜 필요한가. 대리모델 논문은 흔히 "solver보다 10310^3배 빠르다"를 보고한다. 그런데 그 숫자는 비교 조건에 따라 몇 자릿수씩 바뀐다. 공정하지 않은 비교로 얻은 속도 이득은 대리모델이 필요한지 판단하는 데 쓸 수 없다.

공정한 비교의 조건.

  1. 같은 정확도에서 비교한다. 대리모델 오차가 1%라면, solver도 1% 오차를 내는 가장 싼 설정(더 거친 격자, 더 느슨한 tolerance, 더 낮은 차수)과 비교해야 한다. 고충실도 설정의 solver와 비교하면 solver가 쓸데없이 정확한 답을 내는 비용까지 대리모델의 이득으로 계산된다.
  2. 같은 하드웨어와 같은 최적화 수준. GPU 위의 대리모델과 CPU 한 코어의 solver를 비교하면 하드웨어 차이가 이득에 섞인다.
  3. 학습 비용을 포함한다. 학습 데이터 생성(시뮬레이션 MM회)과 학습 시간을 더한 총비용이 solver를 직접 돌리는 비용보다 작아지려면 질의가 몇 번 필요한지(손익분기점)를 보고한다.
  4. 배치 효과를 분리한다. 대리모델은 수천 개 질의를 한 번에 처리할 때 빠르다. 질의가 하나씩 순차적으로 오는 응용(제어, 대화형 설계)이라면 단일 질의 지연을 보고한다.

시간은 기계와 구현에 따라 달라지므로 여기서는 연산량 대리 지표(N×N\timesstep 수)로 비교한다. 같은 ν=0.07\nu = 0.07에서 solver 격자를 줄였을 때의 정확도와 비교한다. 거친 격자의 결과는 기준 해를 같은 셀 크기로 평균한 값과 비교한다.

u_ref = solve(0.07)[0]                                         # (128,) 기준 해
for N in [32, 64, 128]:
    u, n = solve(0.07, N=N)
    u_up = np.repeat(u, 128 // N)                              # (128,) 셀 평균을 기준 격자로
    ref_avg = np.repeat(u_ref.reshape(N, -1).mean(1), 128 // N)
    print(f"solver N={N:3d}  step {n:4d}  비용 N×step {N * n:7d}  기준 대비 오차 {rel(u_up, ref_avg):6.2%}")
print(f"대리모델     추론 비용 약 r×N = {r * 128}  기준 대비 오차 {rel(surrogate(0.07), u_ref):6.2%}  (학습 데이터 생성: solver 16회)")
solver N= 32  step   29  비용 N×step     928  기준 대비 오차 12.61%
solver N= 64  step   58  비용 N×step    3712  기준 대비 오차  4.81%
solver N=128  step  218  비용 N×step   27904  기준 대비 오차  0.00%
대리모델     추론 비용 약 r×N = 512  기준 대비 오차  0.03%  (학습 데이터 생성: solver 16회)

이 문제에서는 거친 격자의 solver가 수치 확산 때문에 크게 부정확하다(N=64N = 64에서 4.8%). 그래서 내삽 조건의 대리모델(0.03%)은 같은 정확도의 solver보다 실제로 훨씬 싸다. 그러나 대리모델을 만드는 데 고충실도 solver를 16번 돌렸으므로, 대리모델은 질의가 16번을 훨씬 넘을 때만 이득이다. 그리고 그 이득은 학습 범위 안에서만 성립한다. 범위 밖에서는 정확도가 무너지므로 "같은 정확도"라는 비교 조건 자체가 깨진다.

실습

POD 대리모델과 신경망 대리모델을 같은 데이터셋에서 비교하고, 정확도·추론 비용·학습 비용을 함께 보고한다. 코드는 labs/physics-and-engineering/surrogate-modeling/surrogate_compare.py다. 본문의 Burgers 데이터셋(학습 ν∈[0.05,0.2]\nu \in [0.05, 0.2] 16개)으로 세 모델을 만든다. (1) POD + 3차 다항식, (2) POD + GP 회귀, (3) log⁡ν\log\nu를 입력으로 128개 격자값을 직접 출력하는 작은 MLP(scikit-learn). 내삽 시험 ν\nu 8개와 외삽 시험 ν\nu 4개에서 상대 오차와 물리 검사(최대·최소 원리, 총변동)를 표로 만든다. 집필 시점의 실행 결과는 다음과 같다.

데이터 생성: solver 16회 0.25 s,  solver 1회 평균 19.4 ms
모델                학습 s    추론 ms     내삽 평균     내삽 최대   외삽 nu=0.02 / 0.03 / 0.3 / 0.4   물리 검사 위반(외삽)
POD + 다항식         0.00    0.022     0.03%     0.05%    6.58% /  1.98% /  1.81% /  5.53%   0.02
POD + GP          0.03    0.086     0.01%     0.01%   14.78% /  6.15% /  7.86% / 27.55%   없음
MLP (직접)          0.21    0.081     0.99%     1.49%    6.74% /  4.43% /  6.97% / 12.75%   0.02, 0.03, 0.4
GP 예측 표준편차(모드 1 계수): nu=0.1: 0.004, nu=0.03: 1.668, nu=0.4: 2.376

결과를 읽는 법은 다음과 같다.

  • 내삽에서는 POD 기반 모델이 MLP보다 수십 배 정확하다. 표본 16개로 128개 출력을 직접 맞추는 MLP는 데이터에 비해 자유도가 너무 많다. POD는 출력의 구조(소수의 모드)를 먼저 찾아 회귀 문제를 4차원으로 줄였다. 구조는 데이터의 양에 맞아야 한다.
  • 외삽의 순위는 내삽의 순위와 다르다. 내삽에서 가장 정확한 POD + GP가 외삽에서는 가장 나쁘다(최대 27.55%). RBF 커널 GP는 데이터에서 멀어지면 사전 평균 쪽으로 돌아가므로, 외삽 예측이 학습 해들의 평균 모양에 가까워진다. 내삽 시험만으로 모델을 고르면 이 사실을 알 수 없다.
  • GP는 자기가 외삽하고 있다는 것을 알린다. 모드 1 계수의 예측 표준편차가 ν=0.1\nu = 0.1에서 0.004인데 ν=0.03\nu = 0.03, 0.40.4에서 1.7, 2.4로 수백 배 커졌다. 반면 GP의 외삽 실패는 물리 검사로는 하나도 잡히지 않았다. 평균 쪽으로 돌아간 예측은 매끄러워서 최대·최소 원리와 총변동 조건을 모두 만족하기 때문이다. MLP의 외삽 실패는 반대로 물리 검사가 세 개를 잡았다. 불확실성 추정과 물리 검사는 서로 다른 실패를 잡는다. 둘 다 쓴다.
  • 추론 비용은 모두 solver 1회보다 두 자릿수 이상 작다. 다만 이 시간은 이 기계에서 한 번 잰 값이고, solver를 더 거친 설정으로 돌리는 비교와 데이터 생성 비용은 본문 셀 4처럼 따로 따져야 한다.

스크립트를 고쳐 다음을 확인한다. (1) 학습 표본을 8개, 32개로 바꾸면 세 모델의 내삽·외삽 오차가 어떻게 바뀌는가. (2) 학습 범위를 [0.02,0.4][0.02, 0.4]로 넓히면 외삽 실패가 사라지는가, 그리고 내삽 정확도는 어떻게 되는가. (3) GP의 예측 표준편차로 "이 질의는 solver로 넘긴다"는 규칙을 만들고, 그 규칙이 외삽 시험 4개 중 몇 개를 걸러 내는지 센다.

이어서 POD 기저를 에너지 기준으로 고르는 연습문제를 푼다.

실패 사례

  • solver의 정확도 설정을 낮춘 비교 없이 속도 이득을 주장하는 것. 대리모델 오차가 1%인데 solver를 0.01% 정확도 설정으로 돌려 비교하면 속도 이득이 몇 자릿수 부풀려진다. 같은 정확도의 가장 싼 solver 설정과 비교하고, 데이터 생성·학습 비용과 손익분기점을 함께 보고한다.
  • 내삽 시험만으로 대리모델을 평가하는 것. 무작위로 나눈 시험 데이터는 대부분 학습 표본 사이에 있다. 설계 최적화나 새 운전 조건처럼 실제 용도가 외삽을 포함한다면, 파라미터 범위 밖의 시험 집합을 따로 만든다(26.5장).
  • 물리 검사 통과를 정확도의 증거로 쓰는 것. 보존량·최대 원리·총변동 검사는 위반을 찾을 때 강력하지만, 통과했다고 정확한 것은 아니다. 본문의 ν=0.4\nu = 0.4 예측은 모든 검사를 통과하면서 5.5% 틀렸다.
  • 모드 수를 늘려 외삽 오차를 고치려는 것. 외삽 오차가 계수 회귀에서 오면 모드를 늘려도 줄지 않는다. 오차를 기저 오차와 회귀 오차로 나누어 본 뒤 대책을 정한다.

통과 기준

  • 대리모델의 정확도–속도 trade-off를 solver와 같은 조건(같은 정확도, 같은 하드웨어, 학습 비용 포함)에서 보고하고, 손익분기 질의 수를 계산한다.
  • 내삽 시험과 외삽 시험을 나누어 오차를 보고하고, 외삽 오차를 기저 오차와 회귀 오차로 분해한다.
  • 정답 없이 계산할 수 있는 물리 검사 두 가지 이상을 대리모델 예측에 적용하고, 검사가 잡은 실패와 놓친 실패를 함께 적는다.
  • 연습문제 pod-basis의 테스트를 통과한다.

참고 문헌

  • Berkooz, G., Holmes, P., Lumley, J. L. (1993). The proper orthogonal decomposition in the analysis of turbulent flows. Annual Review of Fluid Mechanics, 25, 539–575. doi:10.1146/annurev.fl.25.010193.002543 — 유동 해석에서의 POD
  • Benner, P., Gugercin, S., Willcox, K. (2015). A survey of projection-based model reduction methods for parametric dynamical systems. SIAM Review, 57(4), 483–531. doi:10.1137/130932715 — 파라미터 축소 모델의 개관
  • Kennedy, M. C., O'Hagan, A. (2000). Predicting the output from a complex computer code when fast approximations are available. Biometrika, 87(1), 1–13. doi:10.1093/biomet/87.1.1 — GP 기반 다중 충실도 모델
  • Pfaff, T., Fortunato, M., Sanchez-Gonzalez, A., Battaglia, P. W. (2021). Learning mesh-based simulation with graph networks. ICLR 2021. arXiv:2010.03409 — 비구조 메시 위의 그래프 신경망 시뮬레이터
  • Rasmussen, C. E., Williams, C. K. I. (2006). Gaussian Processes for Machine Learning. MIT Press. — 적은 데이터의 회귀와 불확실성