FDA × Deep Learning — Neural Operator 와 Functional Regression의 만남

DeepONet · FNO 가 함수공간 매핑을 어떻게 일반화하는가

DeepONet, Fourier Neural Operator (FNO) 등 함수공간 매핑을 학습하는 신경망이 고전적 functional regression 의 어떤 자연스러운 확장인지 정리한다. Karhunen-Loève 전개·기저 전개와의 구조적 대응, 응용 영역, 실무 코드를 포함한다.

Statistics
Functional Data Analysis
Deep Learning
저자

Kwangmin Kim

공개

2026년 04월 28일

1 정의

정의: Neural Operator

Neural operator 는 함수공간 사이의 사상(operator) \(\mathcal{G}: \mathcal{U} \to \mathcal{V}\) 를 신경망으로 근사하는 모형이다. 입력은 함수 \(u(\cdot) \in \mathcal{U}\), 출력은 또 다른 함수 \(v(\cdot) \in \mathcal{V}\) 이다.

대표적인 구조:

  • DeepONet (Lu et al., 2021) — branch · trunk 두 신경망의 내적으로 사상을 표현
  • Fourier Neural Operator (FNO) (Li et al., 2020) — 푸리에 영역에서 곱셈으로 적분 핵을 학습

이 정의는 고전 FDA 의 functional regression 과 동일한 문제를 푼다. 차이는 함수 형태에 대한 가정의 강도다.

모형 입력 출력 함수 형태 가정
Scalar-on-function regression 함수 \(X(s)\) 스칼라 \(Y\) 선형 \(Y = \int \beta(s) X(s) ds\)
Function-on-function regression 함수 \(X(s)\) 함수 \(Y(t)\) 선형 \(Y(t) = \int \beta(s,t) X(s) ds\)
DeepONet / FNO 함수 \(u(\cdot)\) 함수 \(v(\cdot)\) 비선형 \(\mathcal{G}_\theta\) (자유 형태)

2 개념 및 원리

2.1 출발점: 고전 Functional Regression 의 두 가정

함수형 데이터에서 function-on-function regression 은 다음과 같다 (Kokoszka & Reimherr, 2017, Ch.5):

\[ Y_i(t) = \alpha(t) + \int_0^1 \beta(s, t) X_i(s) \, ds + \varepsilon_i(t) \]

여기서 두 가정이 결정적이다:

  1. 선형성: \(X_i\)\(Y_i\) 사이가 적분 핵 \(\beta(s,t)\) 의 선형 작용이다
  2. 고정 격자: \(X_i\)\(Y_i\) 가 동일한 도메인 \([0,1]\) 에서 관측된다고 가정한다

이 두 가정은 분석 가능성의 대가다. PDE 해를 학습하거나 비선형 동역학을 잡으려면 첫째 가정을 풀어야 한다. 다양한 해상도의 데이터를 동시에 다루려면 둘째 가정도 풀어야 한다.

2.2 DeepONet — Branch + Trunk 분해

DeepONet 의 핵심 아이디어는 다음 분해다:

\[ \mathcal{G}_\theta(u)(y) = \sum_{k=1}^p b_k(u_{\text{sensors}}) \cdot t_k(y) + b_0 \]

여기서:

  • \(u_{\text{sensors}} = (u(x_1), \ldots, u(x_m))\) 는 입력 함수를 \(m\) 개 센서 위치에서 샘플링한 벡터
  • Branch net \(b: \mathbb{R}^m \to \mathbb{R}^p\) — 입력 함수의 표현을 \(p\) 개 계수로 매핑
  • Trunk net \(t: \mathbb{R}^d \to \mathbb{R}^p\) — 출력 위치 \(y\)\(p\) 개 기저값으로 매핑
  • 둘의 내적이 \(\mathcal{G}(u)(y)\) 의 근사

이 구조의 의미는 다음과 같다. \(b_k(u)\)데이터 의존적 계수, \(t_k(y)\)위치 의존적 기저로 행동한다. 즉 DeepONet 은 학습된 기저 전개 \(\sum_k c_k(u) \phi_k(y)\) 의 신경망 버전이다.

이는 FDA 의 Karhunen-Loève 전개 와 정확히 같은 구조다 (Kokoszka, 2017, Ch.3):

\[ X(t) = \mu(t) + \sum_j \xi_j v_j(t) \]

여기서 \(\xi_j = \int X(t) v_j(t) dt\) 는 데이터 의존 점수, \(v_j(t)\) 는 위치 의존 고유함수다. DeepONet 은 이 \(\xi_j\)\(v_j\)데이터로부터 비선형으로 학습한다.

2.3 Fourier Neural Operator — 적분 핵을 푸리에로 곱한다

FNO 는 다른 길을 택한다. 함수 \(v\) 에 적분 연산자 \(\mathcal{K}\) 를 작용시키는 일반 형태:

\[ (\mathcal{K} v)(x) = \int \kappa(x, y) v(y) \, dy \]

는 합성곱 정리(convolution theorem)에 의해 푸리에 영역에서 단순한 곱셈이 된다:

\[ \widehat{\mathcal{K} v}(\xi) = \widehat{\kappa}(\xi) \cdot \widehat{v}(\xi) \]

FNO 는 이 \(\widehat{\kappa}(\xi)\) — 즉 푸리에 계수(저주파 모드 \(k_{\max}\) 개)— 를 학습 가능 파라미터로 두고, FFT → 곱셈 → IFFT 의 한 사이클을 신경망 한 층으로 본다:

\[ v_{l+1}(x) = \sigma\left( W v_l(x) + \mathcal{F}^{-1}\left( R_\theta \cdot \mathcal{F}(v_l) \right)(x) \right) \]

여기서 \(R_\theta\) 가 학습 가능한 푸리에 계수 텐서다. 격자 해상도가 학습 시와 추론 시 달라도 작동하는 이유는 모드 \(k_{\max}\) 가 격자 크기와 무관하게 정의되기 때문이다 (mesh invariance).

이 구조는 FDA 의 Fourier basis 표현 의 자연스러운 확장이다. 고전 FDA 가 \(X(t) = \sum_k c_k e^{2\pi i k t}\) 로 표현하고 \(c_k\) 를 추정한다면, FNO 는 \(c_k\) 를 비선형 변환의 학습 가능 가중치로 둔다.

2.4 두 접근의 비교

측면 DeepONet FNO
구조 모티브 Karhunen-Loève Fourier basis
메쉬 의존성 입력은 고정 센서, 출력은 자유 학습·추론 격자 다를 수 있음
적합 도메인 일반 함수 매핑, 임의 위치 평가 정규 격자 PDE 해, 시공간
학습 비용 중간 FFT 덕분에 효율적
해석성 \(b_k \cdot t_k\) 로 분해 가능 푸리에 모드 시각화

3 왜 필요한가

3.1 문제 1: 비선형 동역학 — 선형 적분 핵으로 부족하다

PDE 해, 화학 반응 동역학, 신경 신호 동역학은 본질적으로 비선형이다. 고전 functional regression 의 \(\int \beta(s,t) X(s) ds\) 형태는 선형 작용소만 표현한다. 비선형 작용소를 잡으려면 \(\beta(s,t,X(\cdot))\) 처럼 \(X\) 자체에 의존하는 핵이 필요하다 — 이는 정확히 neural operator 가 학습하는 대상이다.

3.2 문제 2: 격자 가변성 — wearable 의 들쭉날쭉한 샘플링

연속 혈당 모니터(CGM)는 5분 간격, 가속도계는 30Hz, 심박은 1Hz 로 측정된다. 한 환자의 다중 센서 데이터를 같은 모형으로 다루려면 격자 가변성을 다뤄야 한다. FNO 의 mesh invariance 와 DeepONet 의 trunk net 을 통한 임의 위치 평가가 이 문제를 푼다.

3.3 문제 3: 작은 데이터에서의 일반화 — physics-informed 결합

전통 DL 은 대량의 표지 데이터를 요구하지만, 과학·헬스 도메인은 데이터가 비싸다. Neural operator 는 PDE residual 을 손실에 추가하는 PINN(Physics-Informed Neural Network)과 결합하기 쉽다. 적은 데이터로도 물리 제약을 만족하는 사상을 학습한다.


4 응용 분야

도메인 활용 입력 함수 출력 함수
기후·해양 Navier-Stokes 빠른 시뮬레이터 초기 속도장 \(u_0(x,y)\) 시점 \(t\) 의 속도장 \(u(x,y,t)\)
분자진단 RT-PCR 곡선 → Ct 분포 45-cycle RFU 곡선 Ct posterior 함수
의료 영상 DTI 트랙 형태 → 인지 함수 뇌량 fractional anisotropy 곡선 인지 점수 시간 곡선
웨어러블 24h 심박/활동 → 다음날 예측 \([0,24]\) 의 심박 함수 \([24,48]\) 의 심박 함수
음성 처리 음향 곡선 → spectrogram 시간 영역 신호 시간-주파수 함수
재무 IRS curve 진화 오늘의 yield curve 30일 후 yield curve
산업 IoT 진동 신호 → RUL 함수 가속도계 시계열 잔여수명 분포 함수

특히 RT-PCR / qPCR / digital PCR 같은 분자진단 도메인에서는 45-cycle 형광 곡선이 자연스럽게 함수로 인식된다. FPCA 가 점수만 추출했다면, neural operator 는 곡선 자체를 다른 곡선(예: 정량 표준곡선) 으로 변환하는 사상을 학습할 수 있다.


5 예시 — DeepONet 의 작은 손계산

함수 \(u(s) = \sin(\omega s)\) 를 입력받아 적분 \(\int_0^x u(s) ds = (1-\cos(\omega x))/\omega\) 를 출력하는 사상 \(\mathcal{G}\) 를 생각하자.

DeepONet 은 다음과 같이 학습한다:

  1. Branch net: \(u_{\text{sensors}} = (u(s_1), \ldots, u(s_m))\) 을 입력 → \(\omega\) 정보를 \(p\) 차원 표현으로 인코딩
  2. Trunk net: 출력 위치 \(x\) 를 입력 → \((1, \cos x, \sin x, \cos 2x, \ldots)\) 와 유사한 기저 표현
  3. 둘의 내적이 \((1 - \cos(\omega x))/\omega\) 를 근사

학습이 잘 되면 trunk net 은 사실상 푸리에 기저를 자가 발견하고, branch net 은 \(\omega\) 에 따라 어떤 기저를 켤지 결정하는 게이트로 행동한다. 이는 FDA 의 기저 전개 + 데이터 의존 계수와 정확히 같은 구조다.


6 코드 예시

6.1 Step 1: PyTorch 로 미니 DeepONet 구현 (원리 이해)

import torch
import torch.nn as nn

class MiniDeepONet(nn.Module):
    """입력 함수 u(.)와 출력 위치 y 를 받아 G(u)(y) 를 근사한다."""

    def __init__(self, m_sensors: int, p_basis: int, hidden: int = 64):
        super().__init__()
        # branch: 센서 값 m 개 → 기저 계수 p 개
        self.branch = nn.Sequential(
            nn.Linear(m_sensors, hidden), nn.ReLU(),
            nn.Linear(hidden, hidden), nn.ReLU(),
            nn.Linear(hidden, p_basis),
        )
        # trunk: 출력 위치 1차원 → 기저 함수 p 개
        self.trunk = nn.Sequential(
            nn.Linear(1, hidden), nn.ReLU(),
            nn.Linear(hidden, hidden), nn.ReLU(),
            nn.Linear(hidden, p_basis), nn.ReLU(),
        )
        self.bias = nn.Parameter(torch.zeros(1))

    def forward(self, u_sensors: torch.Tensor, y: torch.Tensor) -> torch.Tensor:
        b = self.branch(u_sensors)        # (B, p)
        t = self.trunk(y.unsqueeze(-1))   # (B, p)
        return (b * t).sum(dim=-1) + self.bias

# 학습 데이터 — 적분 사상 u(s) = sin(omega s) -> (1 - cos(omega x))/omega
m, p = 50, 16
sensors = torch.linspace(0, 1, m)

def make_batch(n=128):
    omega = torch.rand(n) * 5 + 1
    u = torch.sin(omega.unsqueeze(-1) * sensors.unsqueeze(0))
    y = torch.rand(n)
    target = (1 - torch.cos(omega * y)) / omega
    return u, y, target

model = MiniDeepONet(m, p)
opt = torch.optim.Adam(model.parameters(), lr=1e-3)

for step in range(2000):
    u, y, target = make_batch()
    pred = model(u, y)
    loss = ((pred - target) ** 2).mean()
    opt.zero_grad(); loss.backward(); opt.step()
    if step % 200 == 0:
        print(f"step {step:4d}  MSE = {loss.item():.4e}")

해석: branch 가 \(\omega\) 정보를 추출해 16개 계수를 만들고, trunk 가 출력 위치 \(y\) 에 대한 16개 기저를 만든다. 둘의 내적이 \((1-\cos(\omega y))/\omega\) 를 근사한다.

6.2 Step 2: neuraloperator 라이브러리로 FNO (실무)

import torch
from neuralop.models import FNO

# Burgers 방정식 데이터 가정 — 입력: 초기 조건 u0(x), 출력: T초 후 u(x,T)
# 데이터 형태: (B, C, H) — Batch, Channel, spatial grid
# x_train.shape = (1024, 1, 256)
# y_train.shape = (1024, 1, 256)

model = FNO(
    n_modes=(16,),       # 푸리에 모드 16개만 학습
    in_channels=1,
    out_channels=1,
    hidden_channels=32,
    n_layers=4,
)

opt = torch.optim.Adam(model.parameters(), lr=1e-3)
loss_fn = torch.nn.MSELoss()

for epoch in range(100):
    for x, y in loader:
        opt.zero_grad()
        pred = model(x)
        loss = loss_fn(pred, y)
        loss.backward()
        opt.step()

# Mesh invariance 확인 — 학습은 256 격자, 추론은 512 격자
x_high_res = torch.randn(1, 1, 512)
y_high_res = model(x_high_res)  # 동일 모델로 작동

해석: n_modes=16 이 학습 가능한 푸리에 모드 개수다. 격자 256 에서 학습한 가중치가 격자 512 에서도 작동하는 이유는 모드 정의가 격자 무관이기 때문이다.


7 고전 FDA 와 Neural Operator 의 대응

고전 FDA 개념 Neural Operator 대응 관계
Karhunen-Loève 전개 \(X(t) = \sum_j \xi_j v_j(t)\) DeepONet branch · trunk 분해 점수 \(\xi_j\) 와 기저 \(v_j\) 의 비선형 일반화
Fourier basis \(\{e^{2\pi i k t}\}\) FNO 학습 가능 푸리에 계수 고정 기저 → 학습 기저
적분 핵 \(\beta(s,t)\) FNO 의 \(R_\theta\) 선형 핵 → 비선형 작용소
\(\int \beta(s,t) X(s) ds\) DeepONet \(\sum_k b_k(X) t_k(t)\) 선형 사상 → 비선형 사상
Roughness penalty weight decay + spectral cutoff 매끄러움 정규화
FPCA 점수 회귀 Branch net 출력 → downstream 차원 축소 + 비선형

이 표가 시사하는 것은 명확하다 — neural operator 는 FDA 의 단절이 아니라 연속적 일반화다. FDA 를 충실히 공부한 사람이 neural operator 의 구조를 자연스럽게 이해할 수 있는 이유다.


8 한계와 함정

  1. 외삽(extrapolation) 위험 — 학습 분포 밖의 함수에서 성능이 급락한다. 고전 FDA 의 \(\beta(s,t)\) 가 형식적으로 보장하던 외삽 거동이 보장되지 않는다
  2. 해석성 손실 — branch · trunk 의 분해는 가능하지만, 학습된 trunk 기저가 항상 의미 있게 정렬되지는 않는다. FPCA 의 고유함수 해석성과 다르다
  3. 데이터 효율 — neural operator 는 수천 개의 입력-출력 함수 쌍을 요구한다. PCR 임상 코호트처럼 함수 표본이 100개 수준이면 고전 FDA + 약한 가정이 더 안전하다
  4. PDE residual 손실의 균형 — physics-informed 손실이 데이터 손실을 압도하면 underfit 된다
  5. 메쉬 invariance 의 함정 — FNO 는 정규 격자만 처리한다. 비정규 격자라면 Graph Neural Operator 같은 변형이 필요하다

9 관련 주제

선행 지식

후속 주제

  • Physics-Informed Neural Networks (PINN) (placeholder)
  • Graph Neural Operators — 비정규 격자 처리 (placeholder)
  • Functional Time Series 와 Neural Operator 의 결합 (placeholder)

관련 개념


10 참고문헌

  • 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(3), 218–229.
  • Li, Z., Kovachki, N., Azizzadenesheli, K., Liu, B., Bhattacharya, K., Stuart, A., & Anandkumar, A. (2020). Fourier Neural Operator for Parametric Partial Differential Equations. ICLR 2021.
  • Kokoszka, P., & Reimherr, M. (2017). Introduction to Functional Data Analysis. CRC Press.
  • Ramsay, J. O., & Silverman, B. W. (2005). Functional Data Analysis (2nd ed.). Springer.
  • Kovachki, N., Li, Z., Liu, B., Azizzadenesheli, K., Bhattacharya, K., Stuart, A., & Anandkumar, A. (2023). Neural operator: Learning maps between function spaces. JMLR, 24(89), 1–97.

Subscribe

Enjoy this blog? Get notified of new posts by email: