coredot.today
함수를 먹고 함수를 뱉는다 — DeepONet 완전 해부
블로그로 돌아가기
DeepONet신경 연산자딥러닝시뮬레이션보편 근사FNOPINN

함수를 먹고 함수를 뱉는다 — DeepONet 완전 해부

1995년 증명된 '신경망으로 임의의 연산자를 근사할 수 있다'는 정리가, 25년 뒤 DeepONet으로 실현됐다. Branch Net과 Trunk Net의 우아한 이중 구조가 함수에서 함수로의 매핑을 학습하는 원리를 완전 해부한다.

코어닷투데이2026-03-0355

들어가며 — "만약 신경망이 숫자가 아니라, 함수를 학습할 수 있다면?"

일반적인 신경망은 숫자를 먹고 숫자를 뱉는다. 이미지(픽셀 값 벡터)를 넣으면 클래스(확률 벡터)를 돌려준다. 문장(토큰 시퀀스)을 넣으면 다음 토큰을 예측한다. 입력과 출력 모두 유한 차원의 벡터다.

하지만 과학과 공학의 핵심 문제는 다르다.

  • 입력: 초기 온도 분포 u0(x)u_0(x) — 이것은 숫자가 아니라 함수
  • 출력: 시간 TT 후의 온도 분포 u(x,T)u(x, T) — 이것도 함수

함수를 먹고 함수를 뱉는 매핑. 수학에서는 이것을 연산자(operator) 라고 부른다. 계산기가 숫자를 받아 숫자를 돌려주듯, 연산자는 곡선 전체를 받아 곡선 전체를 돌려준다.

만약 신경망이 이 연산자를 학습할 수 있다면? 초기조건이 바뀌든, 경계조건이 달라지든, 한 번 학습한 모델로 즉시 답할 수 있다면?

1995년, 한 편의 정리(theorem)가 이것이 이론적으로 가능하다는 것을 증명했다. 그리고 25년의 침묵 뒤, 2021년 Nature Machine Intelligence에 실린 한 편의 논문이 이 정리를 현실로 만들었다.

그 이름이 DeepONet — Deep Operator Network이다.


제1장: 이론적 기원 — Chen & Chen (1995)의 보편 근사 정리

유한 차원의 보편 근사 정리

딥러닝의 이론적 기반 중 하나인 보편 근사 정리(Universal Approximation Theorem) 는 잘 알려져 있다. 1989년 Hornik, Stinchcombe, White가 증명한 이 정리의 핵심은:

충분히 넓은 단일 은닉층 신경망은 RnRm\mathbb{R}^n \to \mathbb{R}^m임의의 연속 함수를 원하는 정밀도로 근사할 수 있다.

수학적으로 표현하면, 컴팩트 집합 KRnK \subset \mathbb{R}^n 위에서 정의된 임의의 연속 함수 f:KRf: K \to \mathbb{R}에 대해:

supxKf(x)N(x)<ϵ\sup_{x \in K} |f(x) - \mathcal{N}(x)| < \epsilon

을 만족하는 신경망 N\mathcal{N}이 존재한다. 하지만 이것은 벡터에서 벡터로의 매핑 — 유한 차원의 이야기다.

무한 차원으로의 확장

1995년, Tianping Chen과 Hong ChenIEEE Transactions on Neural Networks에서 이 정리를 무한 차원으로 확장했다. 논문 제목은:

"Approximation of continuous functionals by neural networks with application to dynamic systems"

핵심 결과를 현대적 표기로 정리하면:

GG가 컴팩트 집합 KK 위에서 정의된 임의의 연속 비선형 연산자일 때, 적절한 구조의 신경망 N\mathcal{N}이 존재하여 모든 uKu \in K에 대해 G(u)N(u)<ϵ\|G(u) - \mathcal{N}(u)\| < \epsilon을 만족한다.

여기서 G:UVG: \mathcal{U} \to \mathcal{V}는 함수 공간 U\mathcal{U}에서 함수 공간 V\mathcal{V}로의 매핑이다. 즉, 신경망으로 임의의 연속 연산자를 근사할 수 있다.

보편 근사 정리의 확장
Hornik et al. (1989) 벡터 → 벡터 유한 차원 함수 근사
$f: \mathbb{R}^n \to \mathbb{R}^m$
Chen & Chen (1995) 함수 → 함수 무한 차원 연산자 근사
$G: \mathcal{U} \to \mathcal{V}$

25년의 침묵

이론적으로는 1995년에 이미 증명되었지만, 실제로 이를 구현하기에는 당시의 기술이 부족했다.

  • 컴퓨팅 파워: GPU 병렬 학습이 일상이 아니었다
  • 데이터: 대규모 시뮬레이션 데이터를 생성할 인프라가 없었다
  • 최적화 기법: Adam, 배치 정규화, 잔차 연결 등 현대적 훈련 기법이 아직 등장하지 않았다
  • 자동 미분: PyTorch/TensorFlow 같은 프레임워크가 존재하지 않았다

그렇게 25년 동안 이 정리는 수학 논문 속에 잠들어 있었다.


제2장: DeepONet의 탄생 — Lu et al. (2021)

논문과 저자

2021년, Brown University의 George Em Karniadakis 교수 그룹이 이 25년 된 정리를 현대 딥러닝으로 부활시켰다.

"Learning nonlinear operators via DeepONet based on the universal approximation theorem of operators" — Lu Lu, Pengzhan Jin, Guofei Pang, Zhongqiang Zhang, George Em Karniadakis Nature Machine Intelligence, 3, 218–229 (2021)

George Em Karniadakis는 PINN의 공동 창시자이기도 하다 — Raissi, Perdikaris와 함께 2019년 Journal of Computational Physics에서 PINN을 발표한 바로 그 연구자다. 그가 PINN의 한계를 직접 목격한 후, 연산자 학습이라는 더 근본적인 해법을 추구한 것이 DeepONet이다.

Lu Lu(루 루) 는 당시 Brown University 박사후연구원으로, 이후 DeepXDE 라이브러리를 개발하며 과학 머신러닝 생태계의 핵심 인물이 되었다.

PINN의 한계에서 출발하다

DeepONet이 왜 필요한지를 이해하려면, PINN의 구조적 한계를 먼저 짚어야 한다.

PINN은 좌표 (x,t)(x, t)를 입력받아 해당 점에서의 물리량 u(x,t)u(x, t)를 출력한다. 하나의 PINN 모델은 하나의 특정 문제 인스턴스(특정 초기조건, 특정 경계조건, 특정 파라미터)에 대한 해를 학습한다.

문제: 초기조건이 u0(x)=sin(πx)u_0(x) = \sin(\pi x)에서 u0(x)=ex2u_0(x) = e^{-x^2}으로 바뀌면? PINN을 처음부터 다시 학습해야 한다.

이것은 마치 덧셈 공식을 모르는 채로, "3 + 5 = 8"을 외우고, "3 + 6"이 나오면 다시 처음부터 외우는 것과 같다.

DeepONet은 다르다. 덧셈이라는 연산 자체를 학습한다. 어떤 숫자 쌍이 들어오든 즉시 합을 계산할 수 있는 것처럼, 어떤 초기조건이 들어오든 즉시 해를 예측한다.

PINN vs DeepONet — 근본적 차이
PINN 좌표 → 물리량 $(x,t) \to u$
단일 인스턴스만 학습
조건 변경 시 재학습 필요
DeepONet 함수 → 함수 $u_0 \mapsto u(\cdot, T)$
무한 인스턴스 일반화
새 조건에 즉시 추론

제3장: 아키텍처 심층 해부 — Branch Net과 Trunk Net

DeepONet의 아키텍처는 놀랍도록 우아하다. 두 개의 하위 네트워크가 서로 다른 역할을 분담하고, 그 출력의 내적(dot product)이 최종 결과를 만든다.

핵심 구조

우리가 학습하려는 연산자는 G:uG(u)G: u \mapsto G(u)이다. 예를 들어, 열방정식의 초기조건 uu에서 시간 TT 후의 온도 분포 G(u)G(u)로의 매핑이다.

DeepONet의 출력은:

G(u)(y)k=1pbk(u(x1),u(x2),,u(xm))tk(y)G(u)(y) \approx \sum_{k=1}^{p} b_k\big(u(x_1), u(x_2), \ldots, u(x_m)\big) \cdot t_k(y)

여기서:

  • bkb_k: Branch Networkkk번째 출력
  • tkt_k: Trunk Networkkk번째 출력
  • {x1,x2,,xm}\{x_1, x_2, \ldots, x_m\}: 입력 함수 uu를 평가하는 고정된 센서 포인트
  • yy: 출력 함수를 평가하고 싶은 위치
  • pp: 기저 함수(basis function)의 수

벡터 표기로 더 간결하게 쓰면:

G(u)(y)b(u),t(y)+b0G(u)(y) \approx \langle \mathbf{b}(u), \mathbf{t}(y) \rangle + b_0

b(u)Rp\mathbf{b}(u) \in \mathbb{R}^pt(y)Rp\mathbf{t}(y) \in \mathbb{R}^p내적에 바이어스 b0b_0를 더한 것이다.

Branch Network — "어떤 함수인가?"

Branch Network는 입력 함수의 정체를 인코딩한다.

입력 함수 uu를 직접 받을 수는 없다 — 함수는 무한 차원이므로. 대신, 미리 정해진 mm개의 센서 포인트 {x1,x2,,xm}\{x_1, x_2, \ldots, x_m\}에서의 함수값 벡터 [u(x1),u(x2),,u(xm)][u(x_1), u(x_2), \ldots, u(x_m)]를 유한 차원 입력으로 사용한다.

Branch:RmRp\text{Branch}: \mathbb{R}^m \to \mathbb{R}^p

[u(x1),,u(xm)][b1,b2,,bp][u(x_1), \ldots, u(x_m)] \mapsto [b_1, b_2, \ldots, b_p]

직관: Branch Net은 입력 함수의 "지문(fingerprint)"을 추출한다. sin(x)\sin(x)ex2e^{-x^2}은 센서 포인트에서의 값 패턴이 다르고, Branch Net은 이 차이를 pp개의 계수로 인코딩한다.

Trunk Network — "어디서 평가할 것인가?"

Trunk Network는 출력을 평가할 위치를 인코딩한다.

Trunk:RdRp\text{Trunk}: \mathbb{R}^d \to \mathbb{R}^p

y[t1(y),t2(y),,tp(y)]y \mapsto [t_1(y), t_2(y), \ldots, t_p(y)]

여기서 yy는 출력 함수를 알고 싶은 점의 좌표다. dd는 출력 도메인의 차원(1D, 2D, 3D 등)이다.

직관: Trunk Net은 출력 공간의 기저 함수(basis functions) {t1(y),t2(y),,tp(y)}\{t_1(y), t_2(y), \ldots, t_p(y)\}를 학습한다. 푸리에 급수에서 sin(kx)\sin(kx), cos(kx)\cos(kx)가 기저 함수 역할을 하듯, Trunk Net이 데이터로부터 최적의 기저를 스스로 학습한다.

두 네트워크의 결합 — 내적의 우아함

최종 출력은 Branch 출력(계수)과 Trunk 출력(기저 함수값)의 내적이다.

G(u)(y)=k=1pbk(u)계수 (Branch)tk(y)기저 함수 (Trunk)G(u)(y) = \sum_{k=1}^{p} \underbrace{b_k(u)}_{\text{계수 (Branch)}} \cdot \underbrace{t_k(y)}_{\text{기저 함수 (Trunk)}}

이것은 함수 근사의 고전적 형태와 정확히 일치한다. 푸리에 급수를 떠올려 보자:

f(y)=k=1ckϕk(y)f(y) = \sum_{k=1}^{\infty} c_k \cdot \phi_k(y)

푸리에 급수에서 기저 함수 ϕk\phi_k는 사인/코사인으로 고정되어 있고, 계수 ckc_k만 함수마다 달라진다. DeepONet에서는 기저 함수도 학습하고, 계수도 학습한다. 그래서 더 효율적이다.

DeepONet 추론 과정
입력입력 함수 $u$를 센서 포인트에서 샘플링: $[u(x_1), \ldots, u(x_m)]$
Branch센서 값 벡터를 Branch Net에 통과 → 계수 벡터 $\mathbf{b} = [b_1, \ldots, b_p]$ 출력
Trunk평가 위치 $y$를 Trunk Net에 통과 → 기저 함수값 $\mathbf{t} = [t_1(y), \ldots, t_p(y)]$ 출력
결합내적 계산: $G(u)(y) = \langle \mathbf{b}, \mathbf{t} \rangle + b_0$

수학적 통찰: 분리의 힘

DeepONet의 아키텍처가 우아한 이유는 "어떤 함수인가"(Branch)"어디서 평가하는가"(Trunk) 를 완전히 분리했기 때문이다.

이 분리 덕분에:

  1. Branch는 한 번만 실행하면 된다. 입력 함수가 고정되면, 수천 개의 서로 다른 위치 yy에서의 값을 얻기 위해 Branch를 다시 실행할 필요 없이 Trunk만 반복 실행하면 된다.
  2. Trunk은 입력 함수에 독립적이다. 출력 위치의 기저 함수는 모든 입력 함수에 대해 공유된다.
  3. 병렬 처리에 최적화되어 있다. Branch와 Trunk은 독립적이므로 완전히 병렬로 실행할 수 있다.

제4장: 학습 — DeepONet을 어떻게 훈련시키는가?

데이터 구조

DeepONet의 학습 데이터는 (입력 함수, 출력 함수) 쌍으로 구성된다.

구체적으로, 학습 데이터셋은:

D={(u(i),G(u(i)))}i=1N\mathcal{D} = \Big\{\big(u^{(i)}, G(u^{(i)})\big)\Big\}_{i=1}^{N}

여기서 각 입력 함수 u(i)u^{(i)}는 센서 포인트에서의 값 [u(i)(x1),,u(i)(xm)][u^{(i)}(x_1), \ldots, u^{(i)}(x_m)]으로 표현되고, 출력 함수 G(u(i))G(u^{(i)})는 여러 위치 {yj}j=1Q\{y_j\}_{j=1}^{Q}에서의 값으로 제공된다.

손실 함수

가장 기본적인 손실 함수는 평균제곱오차(MSE)다:

L=1NQi=1Nj=1QG(u(i))(yj)G^(u(i))(yj)2\mathcal{L} = \frac{1}{NQ} \sum_{i=1}^{N} \sum_{j=1}^{Q} \left| G(u^{(i)})(y_j) - \hat{G}(u^{(i)})(y_j) \right|^2

여기서 G^\hat{G}는 DeepONet의 예측값이다. NN은 학습에 사용한 입력 함수의 수, QQ는 각 출력 함수를 평가한 점의 수다.

학습 데이터는 어디서 오는가?

학습 데이터를 생성하는 주된 방법은:

  1. 수치 시뮬레이션: 전통적 솔버(유한요소법, 유한차분법 등)로 다양한 조건에 대해 해를 미리 계산
  2. 해석해: 특수한 경우에 정확한 해가 알려진 문제 활용
  3. 실험 데이터: 실제 물리 실험에서 측정한 데이터
학습 데이터 생성 파이프라인 (예: 열방정식)
1단계: 가우시안 랜덤 필드(GRF)로 N개의 초기조건 $u_0^{(i)}(x)$ 생성
2단계: 각 초기조건에 대해 전통 솔버로 해 $u^{(i)}(x, T)$ 계산
3단계: 입력 — 센서 포인트에서 $u_0^{(i)}$ 샘플링 → $[u_0^{(i)}(x_1), \ldots, u_0^{(i)}(x_m)]$
4단계: 출력 — 평가 포인트에서 $u^{(i)}(y_j, T)$ 기록
5단계: (입력, 출력) 쌍을 학습 데이터셋에 추가

제5장: DeepONet vs FNO — 쌍벽의 비교

DeepONet과 FNO는 모두 신경 연산자(neural operator) 라는 같은 목표를 추구하지만, 접근 방식이 근본적으로 다르다. 둘 다 2021년에 발표되어 과학 머신러닝의 양대 산맥을 이루고 있다.

아키텍처 철학

DeepONet vs FNO — 아키텍처 비교
DeepONet Branch-Trunk 분리 점 평가(point evaluation) 기반
임의의 기하학 지원
비균일 격자 자연 처리
FNO 푸리에 스펙트럼 학습 주파수 공간 필터링
균일 격자 필요
해상도 불변성

FNO는 입력 함수를 균일 격자 위의 이산화된 형태로 받아, 푸리에 변환 → 주파수 필터링 → 역변환을 반복하여 출력 함수를 생성한다. 주파수 공간에서 전역적 상호작용을 학습하는 것이 핵심이다.

DeepONet은 입력 함수를 센서 포인트에서의 값으로 받고(Branch), 출력 위치를 별도로 받아(Trunk), 두 정보의 내적으로 출력을 생성한다. 함수를 계수와 기저로 분해하는 것이 핵심이다.

핵심 차이점 비교

DeepONet vs FNO — 특성 비교
비정규 격자 유연성
DeepONet 우위
해상도 불변성
FNO 우위
계산 효율 (대규모 격자)
FNO 우위
이론적 기반 성숙도
DeepONet 우위
복잡한 도메인 형상
DeepONet 우위

수학적 구조의 차이

FNO의 핵심 연산 — 푸리에 레이어:

vl+1(x)=σ(Wlvl(x)+F1[Rlv^l](x))v_{l+1}(x) = \sigma\Big(W_l \cdot v_l(x) + \mathcal{F}^{-1}\big[R_l \cdot \hat{v}_l\big](x)\Big)

FFT를 통해 O(NlogN)O(N \log N) 복잡도로 전역 상호작용을 포착한다. 하지만 FFT는 균일 격자를 요구한다.

DeepONet의 핵심 연산 — 내적:

G(u)(y)=k=1pbk(u)tk(y)G(u)(y) = \sum_{k=1}^{p} b_k(u) \cdot t_k(y)

입력과 출력의 위치가 완전히 자유롭다. 센서 포인트 {xi}\{x_i\}와 평가 포인트 {yj}\{y_j\}가 균일 격자일 필요가 없다. 비행기 날개, 심장 혈관, 지질 구조 같은 불규칙한 기하학에서 DeepONet이 자연스러운 이유다.

언제 무엇을 쓸 것인가?

문제 정의
격자가 균일한가?
예 → 대규모 격자?
FNO (FFT 활용 속도 이점)
아니오 → 복잡한 도메인?
DeepONet (격자 자유)

FNO를 선택할 때:

  • 직교 균일 격자 위의 문제 (기상, 유체역학 정규 도메인)
  • 다중 해상도 전이가 필요한 경우
  • 대규모 격자에서 속도가 중요한 경우

DeepONet을 선택할 때:

  • 비정규 도메인, 불규칙한 기하학
  • 센서 데이터가 산재한 실험 환경
  • 입력과 출력의 도메인이 다른 경우 (예: 시간 영역 입력 → 공간 영역 출력)
  • 해석적 유연성이 중요한 경우

제6장: DeepONet의 변형들 — 기본을 넘어서

원조 DeepONet 이후, 한계를 극복하고 성능을 높이는 다양한 변형이 등장했다.

6.1 Physics-Informed DeepONet (PI-DeepONet)

Wang, Wang & Perdikaris (2021)가 제안. PINN의 물리 제약을 DeepONet에 결합한 가장 중요한 변형이다.

핵심 아이디어: 데이터 손실에 PDE 잔차 손실을 추가한다.

Ltotal=Ldata+λLphysics\mathcal{L}_{\text{total}} = \mathcal{L}_{\text{data}} + \lambda \, \mathcal{L}_{\text{physics}}

Lphysics=1NQi=1Nj=1QR[G^(u(i))](yj)2\mathcal{L}_{\text{physics}} = \frac{1}{NQ} \sum_{i=1}^{N} \sum_{j=1}^{Q} \left|\mathcal{R}\big[\hat{G}(u^{(i)})\big](y_j)\right|^2

여기서 R\mathcal{R}은 PDE의 잔차 연산자다. 예를 들어, 열방정식 tu=α2u\partial_t u = \alpha \nabla^2 u에 대해:

R[u]=tuα2u\mathcal{R}[u] = \partial_t u - \alpha \nabla^2 u

장점: 라벨이 붙은 학습 데이터가 적어도 물리 법칙이 정규화(regularization) 역할을 하여, 데이터 효율이 크게 향상된다. 페어 데이터 없이 PDE만으로 학습하는 것도 가능하다.

6.2 POD-DeepONet

Lu et al. (2022)이 제안. 고유직교분해(Proper Orthogonal Decomposition, POD) 를 Trunk Network 대신 사용한다.

기본 DeepONet의 Trunk Net이 기저 함수를 학습하는 대신, 학습 데이터에서 SVD를 통해 추출한 POD 기저를 사용한다:

G(u)(y)k=1pbk(u)ϕk(y)G(u)(y) \approx \sum_{k=1}^{p} b_k(u) \cdot \phi_k(y)

여기서 ϕk(y)\phi_k(y)는 데이터에서 추출한 POD 기저로, 학습하지 않는 고정된 기저다. Branch Net만 학습하면 되므로 학습이 더 빠르고 안정적이다.

6.3 Multi-output DeepONet (MODeepONet)

출력이 스칼라가 아닌 벡터장(vector field) 인 경우를 위한 확장이다. 예를 들어, 유체역학에서 속도장 (vx,vy,vz)(v_x, v_y, v_z)과 압력 pp를 동시에 예측할 때:

Gl(u)(y)=k=1pbk(l)(u)tk(y),l=1,2,,LG_l(u)(y) = \sum_{k=1}^{p} b_k^{(l)}(u) \cdot t_k(y), \quad l = 1, 2, \ldots, L

여러 Branch Net이 Trunk Net을 공유하는 구조다. 공유된 기저 함수가 출력 변수들 사이의 상관관계를 자연스럽게 포착한다.

6.4 DeepONet with Attention

Transformer의 어텐션 메커니즘을 DeepONet에 결합한 변형. Branch와 Trunk의 상호작용을 단순 내적에서 크로스 어텐션(cross-attention) 으로 확장한다. 복잡한 비선형 연산자에서 표현력이 향상된다.

DeepONet (2021)
PI-DeepONet (2021)
POD-DeepONet (2022)
MODeepONet (2022)
Attention DeepONet (2023)

제7장: 실전 응용 — DeepONet이 풀고 있는 문제들

응용 1: 열 전달 예측 — 다양한 기하학에서

문제: 전자 부품의 열 관리에서, 히트싱크 형상이 바뀔 때마다 열 전달 시뮬레이션을 다시 수행해야 한다. 형상 후보가 수백 개라면 비용이 막대하다.

DeepONet 적용: 히트싱크 표면의 온도 분포(입력 함수)에서 정상상태 온도장(출력 함수)으로의 연산자를 학습한다. 비정규 메시 위의 데이터를 자연스럽게 처리할 수 있으므로, 복잡한 핀(fin) 기하학에 바로 적용 가능하다.

효과: 새로운 히트싱크 형상에 대해 밀리초 단위의 열 예측이 가능하여, 설계 최적화 루프가 수백 배 가속된다.

응용 2: 다상 유동의 기포 역학

문제: 원자로 냉각수, 화학 반응기 등에서 기포(bubble)의 생성·성장·합체·붕괴 역학을 예측하는 것은 CFD에서도 가장 어려운 문제 중 하나다. 계면 추적(interface tracking)에 엄청난 계산 비용이 든다.

DeepONet 적용: Lin et al. (2021)은 기포 역학의 연산자를 DeepONet으로 학습시켜, 초기 기포 형상에서 시간에 따른 기포 형태 변화를 예측했다. Branch Net이 초기 기포 형상의 함수값을 인코딩하고, Trunk Net이 시공간 좌표를 처리한다.

응용 3: 구조 응답 예측 — 다양한 하중 하에서

문제: 교량이나 건물에 작용하는 하중은 시간에 따라 변한다(바람, 지진, 교통 등). 각 하중 시나리오에 대해 구조의 동적 응답을 예측하려면 반복적인 유한요소 해석이 필요하다.

DeepONet 적용: 하중 함수 F(t)F(t)(시간에 따른 외력)를 입력으로, 변위 함수 d(x,t)d(x, t)(위치와 시간에 따른 구조 변위)를 출력으로 하는 연산자를 학습한다.

핵심 이점: 하중의 형태가 임의적이어도 — 정현파든, 임펄스든, 지진파든 — 학습된 DeepONet이 즉시 구조 응답을 예측한다. 구조 건전성 모니터링(SHM) 의 실시간 디지털 트윈에 직접 활용 가능하다.

응용 4: 핵융합 플라즈마 제어

문제: 토카막(tokamak) 핵융합 장치에서 플라즈마를 안정적으로 가둬두려면, 자기장 코일의 전류를 실시간으로 조절해야 한다. 플라즈마의 MHD(자기유체역학) 방정식을 실시간으로 풀기에는 너무 느리다.

DeepONet 적용: 코일 전류 프로파일(입력 함수)에서 플라즈마 평형 상태(출력 함수)로의 연산자를 DeepONet으로 학습한다. 마이크로초 단위의 추론이 가능하여, MHD 시뮬레이션 대신 실시간 피드백 제어 루프에 투입할 수 있다.

DeepMind의 2022년 Nature 논문(Degrave et al.)이 강화학습으로 토카막 플라즈마를 제어한 것과 유사한 맥락이지만, DeepONet은 물리 방정식의 연산자를 직접 학습한다는 점에서 해석 가능성이 더 높다.

응용 5: 약물 용량 최적화 — 약동학(Pharmacokinetics)

문제: 환자의 체내에서 약물 농도가 시간에 따라 어떻게 변하는지는 약동학 ODE 시스템으로 모델링된다. 환자마다 체중, 대사율, 간 기능 등 파라미터가 다르므로, 개인화된 약물 용량을 계산하려면 각 환자에 대해 ODE를 다시 풀어야 한다.

DeepONet 적용: 약물 투여 스케줄(입력 함수 — 시간에 따른 투여량)에서 혈중 농도 곡선(출력 함수)으로의 연산자를 학습한다. 환자 파라미터는 Branch Net의 추가 입력으로 처리한다.

효과: 새로운 환자에 대해 다양한 투여 스케줄의 결과를 즉시 시뮬레이션하여, 개인맞춤형 최적 용량을 실시간으로 결정할 수 있다.

DeepONet 응용 분야별 성숙도 (2026년 기준)
열 전달 / 확산
실전 적용
구조 역학
활발
유체역학
확산 중
약동학 / 의료
연구 활발
핵융합 제어
초기 단계

제8장: DeepXDE — DeepONet의 공식 무기

라이브러리 소개

DeepXDE는 Lu Lu가 개발한 오픈소스 Python 라이브러리로, DeepONet과 PINN을 통합적으로 지원하는 과학 머신러닝의 핵심 도구다.

Lu, L., Meng, X., Mao, Z., & Karniadakis, G. E. (2021). DeepXDE: A deep learning library for solving differential equations. SIAM Review, 63(1), 208–228.

DeepXDE는 SIAM Review에 게재되었다 — 응용수학 분야 최고 권위의 리뷰 저널이다. 이는 이 라이브러리가 단순한 소프트웨어가 아니라, 방법론적 기여로 인정받았음을 의미한다.

DeepXDE의 핵심 기능

DeepXDE가 지원하는 문제 유형
ODE상미분방정식 — 초기값 문제, 경계값 문제
PDE편미분방정식 — 타원형, 포물선형, 쌍곡선형
적분 방정식프레드홀름/볼테라 적분방정식
분수계 PDE분수 미분을 포함한 비정수 차수 PDE
연산자 학습DeepONet, PI-DeepONet으로 함수-함수 매핑 학습

코드 예제: DeepONet으로 항-미분 연산자 학습

DeepXDE로 DeepONet을 구현하는 것이 얼마나 간결한지 보자. 다음은 항-미분(antiderivative) 연산자 G:u0yu(s)dsG: u \mapsto \int_0^y u(s) \, ds를 학습하는 예다:

hljs language-python
import deepxde as dde
import numpy as np

# 1. 데이터 생성 — 가우시안 랜덤 필드에서 입력 함수 샘플링
m = 100  # 센서 포인트 수
num_train = 10000
num_test = 1000

X_train, y_train = dde.data.triple_to_pair(
    *gen_antiderivative_data(num_train, m)
)
X_test, y_test = dde.data.triple_to_pair(
    *gen_antiderivative_data(num_test, m)
)

data = dde.data.TripleCartesianProd(
    X_train, y_train, X_test, y_test
)

# 2. DeepONet 정의 — Branch와 Trunk 아키텍처
net = dde.nn.DeepONetCartesianProd(
    [m, 128, 128, 128],    # Branch: 입력 m → 128 → 128 → 128
    [1, 128, 128, 128],    # Trunk: 입력 1(좌표 y) → 128 → 128 → 128
    activation="relu",
)

# 3. 모델 컴파일 및 학습
model = dde.Model(data, net)
model.compile("adam", lr=1e-3, metrics=["mean l2 relative error"])
model.train(epochs=50000)

Branch Net의 입력 차원이 mm(센서 수), Trunk Net의 입력 차원이 1(평가 위치 yy)이다. 두 네트워크의 최종 은닉층 크기가 128로 같아야 내적이 가능하다.


제9장: DeepONet의 한계 — 솔직한 이야기

한계 1: 센서 포인트 선택 문제

Branch Net은 고정된 센서 포인트 {x1,,xm}\{x_1, \ldots, x_m\}에서의 함수값을 입력으로 받는다. 이 센서 위치가 학습 시 결정되면, 추론 시에도 정확히 같은 위치에서 입력 함수를 평가해야 한다.

현실적 문제:

  • 센서 수 mm이 너무 적으면 입력 함수의 정보가 손실된다
  • mm이 너무 많으면 Branch Net의 입력 차원이 폭발한다
  • 센서 위치가 최적이 아닐 수 있다 — 어디에 센서를 놓아야 하는가?

이는 FNO와의 결정적 차이점이다. FNO는 임의 해상도의 균일 격자를 받을 수 있어 이 문제가 없다(대신 균일 격자라는 제약이 있다).

한계 2: 차원의 저주

입력 함수의 도메인이 고차원(3D 공간 + 시간 등)이면, 센서 포인트 수 mm이 기하급수적으로 증가해야 함수를 충분히 표현할 수 있다. 예를 들어, 3D 도메인을 각 축 10개 점으로 이산화하면 m=103=1,000m = 10^3 = 1{,}000, 각 축 20개 점이면 m=8,000m = 8{,}000이다. Branch Net의 입력 차원이 수천~수만이 되면 학습이 어려워진다.

한계 3: 학습 데이터 생성 비용

FNO와 공유하는 한계다. DeepONet을 학습시키려면 (입력 함수, 출력 함수) 쌍이 수천 개 필요하고, 이 데이터는 대부분 비싼 수치 시뮬레이션으로 생성한다. PI-DeepONet이 이를 완화하지만, 복잡한 비선형 문제에서는 여전히 데이터가 필요하다.

한계 4: 기저 함수의 수 결정

Trunk Net이 출력하는 기저 함수의 수 pp는 하이퍼파라미터다. pp가 너무 작으면 표현력이 부족하고, 너무 크면 과적합(overfitting) 위험이 있다. 최적의 pp를 결정하는 체계적 방법은 아직 연구 중이다.

DeepONet 한계 심각도 평가
센서 포인트 의존성
중간
고차원 입력 함수
심각
학습 데이터 비용
중간
하이퍼파라미터 민감성
관리 가능

제10장: 신경 연산자의 통합 지도 — PINN, DeepONet, FNO

세 가지 접근법은 경쟁이 아니라 상호 보완이다. 각각이 다른 상황에서 최적의 선택이 되며, 결합했을 때 가장 강력해진다.

과학 머신러닝의 3대 축
PINN 물리 + 신경망 데이터 불필요 가능
단일 인스턴스 특화
역문제에 강력
DeepONet Branch + Trunk 임의 기하학 지원
점 평가 기반 유연성
이론적 기반 견고
FNO 푸리에 스펙트럼 해상도 불변성
GPU 친화적 속도
대규모 격자에 최적
PI-DeepONet / Physics-Informed FNO 물리 제약 + 연산자 학습 → 데이터 효율 + 일반화 + 속도의 삼위일체

의사결정 가이드

문제 유형별 추천 접근법
방정식은 알지만 데이터가 없다 → PINN
데이터가 풍부하고 균일 격자이며 빠른 반복이 필요하다 → FNO
데이터가 풍부하고 복잡한 도메인/산재 센서가 있다 → DeepONet
데이터가 적고 방정식을 알며 다양한 조건에 일반화해야 한다 → PI-DeepONet
대규모 균일 격자 + 물리 제약이 필요하다 → Physics-Informed FNO

제11장: 미래 — 과학의 기초 모델을 향하여

DeepONet과 Foundation Model

LLM이 자연어의 기초 모델이라면, 신경 연산자는 물리 시뮬레이션의 기초 모델을 향한 핵심 빌딩 블록이다. Karniadakis 그룹은 2024년 이후 다중 물리(multi-physics) 연산자 학습 — 열, 유동, 구조, 전자기를 하나의 모델에서 동시에 다루는 — 을 연구하고 있다.

이 비전이 실현되면:

  1. 하나의 모델이 열 전달도, 유체 유동도, 구조 역학도 처리
  2. 새로운 물리 문제에 대해 전이 학습(transfer learning) 으로 빠르게 적응
  3. 실험 데이터와 시뮬레이션 데이터를 통합 학습

DeepONet + 생성형 AI

확산 모델(diffusion model)과 DeepONet의 결합도 주목할 만하다. 결정론적 예측 대신 확률 분포로서의 해를 학습하면, 불확실성 정량화가 자연스럽게 따라온다.

p(G(u)(y))=DeepONet이 학습한 조건부 분포p(G(u)(y)) = \text{DeepONet이 학습한 조건부 분포}

단일 점 추정이 아닌, "이 초기조건에서 해는 95% 확률로 이 범위 안에 있다"는 신뢰 구간을 제공할 수 있다.

디지털 트윈의 실시간 두뇌

2026년 현재, 가장 활발한 응용은 디지털 트윈이다. 물리 시스템(발전소, 항공기 엔진, 건축물 등)의 디지털 복제에 DeepONet이 실시간 물리 예측 엔진으로 들어간다.

실제 시스템 센서 데이터
DeepONet (밀리초 추론)
전체 상태 예측
실시간 제어 결정
이상 감지 / 최적화
시나리오 분석

센서가 온도, 압력, 변형률 데이터를 실시간으로 보내면, DeepONet이 이를 Branch Net의 입력으로 받아 시스템 전체의 물리적 상태를 밀리초 안에 예측한다. 전통적 시뮬레이션은 "사후 분석"에 머물렀지만, DeepONet의 속도는 "실시간 의사결정" 을 가능하게 한다.


마치며 — 25년의 기다림이 만든 우아함

1995년, Chen & Chen은 증명했다 — 신경망으로 임의의 연산자를 근사할 수 있다고. 하지만 그것은 종이 위의 정리일 뿐이었다. GPU도, PyTorch도, Adam 옵티마이저도 없던 시절이었다.

25년 뒤, Lu Lu와 Karniadakis는 이 정리를 깨워 DeepONet을 만들었다. Branch Net과 Trunk Net이라는 우아한 이중 구조로, 함수에서 함수로의 매핑을 학습하는 방법을 실현했다.

DeepONet의 핵심은 이것이다:

"어떤 함수인가"와 "어디서 평가하는가"를 분리하라.

이 단순한 분리가 연산자 학습을 가능하게 했고, 비정규 도메인에서의 자유를 선사했으며, 과학 시뮬레이션의 패러다임을 바꾸고 있다.

FNO가 주파수의 눈으로 물리를 보았다면, DeepONet은 기저 함수의 눈으로 물리를 본다. 둘은 경쟁이 아니라 쌍벽(雙璧) — 과학 머신러닝이라는 성벽의 두 기둥이다.

1995년의 정리가 2021년에 꽃피기까지 25년. 수학적 진리는 때때로 기술이 따라오기를 기다린다. 그리고 기술이 준비되었을 때, 그 폭발력은 25년의 기다림에 비례한다.


더 읽어볼 자료

  • Chen, T., & Chen, H. (1995). Universal approximation to nonlinear operators by neural networks with arbitrary activation functions and its application to dynamical systems. IEEE Transactions on Neural Networks, 6(4), 911–917.
  • Lu, L., Jin, P., Pang, G., Zhang, Z., & Karniadakis, G. E. (2021). Learning nonlinear operators via DeepONet based on the universal approximation theorem of operators. Nature Machine Intelligence, 3, 218–229.
  • Wang, S., Wang, H., & Perdikaris, P. (2021). Learning the solution operator of parametric partial differential equations with physics-informed DeepONets. Science Advances, 7(40), eabi8605.
  • Lu, L., Meng, X., Mao, Z., & Karniadakis, G. E. (2021). DeepXDE: A deep learning library for solving differential equations. SIAM Review, 63(1), 208–228.
  • Li, Z., Kovachki, N., Azizzadenesheli, K., et al. (2021). Fourier Neural Operator for Parametric Partial Differential Equations. ICLR 2021.
  • Kovachki, N., Li, Z., Liu, B., et al. (2023). Neural Operator: Learning Maps Between Function Spaces with Applications to PDEs. JMLR, 24(89), 1–97.
  • DeepXDE 라이브러리 — github.com/lululxvi/deepxde
  • NVIDIA Modulus — developer.nvidia.com/modulus