일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 일반기계기사
- PIDoN
- Physics Informed Neural Network
- 연산자 학습
- FNO
- Pino
- DeepONet
- Maxwell Equation
- Burgers Equation
- Wireless Power Transform
- 품질 인자
- 딥오넷
- jax error
- Operator Learning
- 맥스웰 방정식
- Governing Equation
- 순수 함수
- Neural Operator
- Resonance frequency
- PINN
- Wireless Power Transfer
- jax
- HFSS
- WPT
- Q factor
- 일러스트레이터 수식
- Anaconda
- COLAB
- Neural Operator 설명
- Physics Informed Neural Operator
- Today
- Total
잡다구리 너구리
[FNO] Fourier Neural Operator에 대해 본문
Fourier Neural Operator(FNO)는 Neural Operator의 일종으로 Kernel Integral Operator에서의 Kernel function을 사용하는 대신 Fast Fourier Transform(FFT)를 통해 Fourier 공간에서 표현한 Neural Operator이다. 본문에서는 FNO의 핵심 개념에 대해 다뤄볼 예정이다. 해당 개념을 제시한 논문은 Zongyi Li의 "Fourier Neural Operator for Parametric Partial Differential Equatons"로 FNO에 대해 자세히 알고 싶다면 해당 논문을 참조하면 된다. FNO에 대해 공부할 때 바로 포스팅을 했어야 됐는데 귀찮아서 미루다 보니 어느 정도 기억을 더듬어 적는 바가 있어 포괄적인 개념만 다룰 예정이다. 추가적으로 Physics-Informed Neural Operator도 마지막에 다룬다.
Neural Operator 종류
Neural Operator의 간단한 개념을 이전 게시글에 다룬 적이 있다.
2023.08.30 - [인공지능/Deep Learning] - [NO] Neural Operator에 대해
Neural Operator는 kernel function을 어떻게 사용하는지에 따라 다양하게 파생된다. 예를 들자면 Nystrom approximation과 Domain truncation을 통해 Kernel function에 대해 u의 식을 근사하는 Graph Neural Operator(GNO), Kernel function을 텐서 곱 형태로 가정하는(Finite-Rank Operator를 매개변수화하는 것과 같다.) Low-rank Neural Operator(LNO), 그 밖에도 Multipole Graph Neural Operator(MGNO) 등이 존재한다. Neural Operator의 종류에 관한 내용과 그 특징은 "Neural Operator: Learning Maps Between Function Spaces With Applications to PDEs(2022)" 논문에 잘 나와있으니 참고하면 될 듯하다. 그중 이번에 다루게 될 Fourier Neural Operator, 통칭 FNO는 Kernel function 대신 Fast Fourier Transform(FFT)를 통해 Fourier 공간에서 표현한 Operator이다.
Fourier Neural Operator 주요 개념
위의 사진이 FNO의 구조로 매우 간단한 모습을 취하는 것을 알 수 있다. 일반적으로 Neural Operator가 Iterative를 update 할 때의 general form은 아래와 같다.
$$v_{t+1}(x):=\sigma (Wv_t(x)+ ( \mathcal{K}(a;\phi)v_t)(x) )$$
이때 $Wv_t(x)$가 bias term이고 $(\mathcal{K}(a;\phi)v_t)(x))$가 Kernel function이다. 위의 그림에서 아래 동그라미 $W$가 bias term이며, 노란 박스 부분이 Kernel function 부분으로 Neural Operator의 종류를 결정짓는다. 이때 $(\mathcal{K}(a;\phi)v_t)(x))$는 여차저차한 과정으로 $( \mathcal{K}(\phi)v_t)(x)=\mathcal{F}^{-1}(R_\phi\cdot (\mathcal{F}v_t))(x)$가 된다. 자세한 증명 과정은 논문을 참조 바란다. 여하튼 중요한 점은 FFT로 Kernel function을 대체한다는 점이다.
이를 세 단계로 나누면 Fourier transform $\mathcal{F}$ Linear transform on the lower Fourier modes $R$ - Inverse Fourier transform $\mathcal{F}^{-1}$가 된다.
그렇다면 왜 Lower Fourier modes만 Linear transform을 하는지가 궁금해진다. 이는 High frequency modes를 제외한 일종의 Regularization으로 볼 수 있다. 아래 사진을 예로 들면 Initial Vorticity에서 색의 경계 부분에 쭈글쭈글한 부분(주름이 심한?)들이 있는 모습을 볼 수 있다. 이런 부분들이 High frequency modes가 되며, filtering 되는 것이다. 그렇다면 해당 부분들에 인한 영향은 예측하지 못하냐?라는 생각이 들 수도 있는데, 논문 저자는 non-linearity operator, 즉 activation function으로 이런 부분들이 충분히 감안된다라고 한다.
Physics-Informed Neural Operator
사실 FNO 포스팅은 추후 Physics-Informed Neural Operator(PINO)의 코드 분석 글을 올리기 위한 빌드업이다. 그렇기 때문에 PINO에 대해서도 찍먹할 예정이다. PINO는 PINN과 같이 물리적 정보를 기반으로 하는 프레임워크로 FNO를 기반으로 한다. 해당 부분은 역시나 코드로 보는 것이 간단하기 때문에 전체적인 프레임워크만 한번 확인해 보면 될 것 같다. 논문 제목은 "Physics-Informed Neural Operator for Learning Partial Differential Equations"이다.
위의 사진이 PINO의 프레임워크로 사실 FNO의 프레임워크도 이와 동일하다. 다만 차이점은 손실함수에 Equation loss가 들어가냐 마냐의 차이일 뿐
먼저 Lifting Operator로 Channel을 올려준뒤 여러 layer를 거쳐 최종적으로 Projection Operator로 출력 Channel로 내린다. FNO의 경우 모든 layer가 Fourier Layer(FFT)를 거치지만 PINO의 경우 논문 저자가 Fourier Layer와 Linear Layer를 적절하게 섞어 쓸 경우 더 좋은 결과를 얻을 수 있다고 말하며, 공개된 코드에서는 둘을 섞어 쓴다.
글을 마치며
사실 Physics-Informed DeepONet(PIDON)과 더불어 FNO 글은 좀 풍성하게 쓰고 싶었다. 내가 공부했을 때 좀 고생했기 때문에, 그런데 기간이 꽤 지나 까먹은 부분들도 있고 그렇다고 다시 개념을 확인해 보며 짜임새 있는 글까지는 쓸 정도는 아니라고 생각해 그냥 이 정도로 만족하려고 한다. 추후 Burger's Equation에 대한 PINO 코드 분석을 다룰 예정이다.
'인공지능 > Deep Learning' 카테고리의 다른 글
[PINO] Burger's Equation 예제 코드 분석 [2/2] (1) | 2023.10.11 |
---|---|
[PINO] Burger's Equation 예제 코드 분석 [1/2] (1) | 2023.10.10 |
[경계 조건] Dirichlet, Neumann, Periodic Boundary Condition (0) | 2023.09.11 |
[PINN] Burgers Equation 예제 코드 분석 (0) | 2023.09.08 |
[NO] Neural Operator에 대해 (6) | 2023.08.30 |