티스토리 뷰

1. Introduction
지난번에 이어서 PINN을 구현하는 것을 계속 실습 중이다.
이전 포스팅: https://jinsustory.tistory.com/312

 

[Python] 22.08.27 딥러닝 실습 (2탄: PINN)

1. Introduction Data에 100% 의존하지 않고, 우리가 선험적으로 알고 있는 지식을 활용해서 보다 적은 수의 데이터를 활용하면서 동시에 기존 Domain knowledge를 잘 융합하는 것에 대한 키워드이

jinsustory.tistory.com


궁극적으로 내가 하려고 하는 것은 PDE-foward & inverse problem (FP/IP)을 자유롭게 푸는 것이고,

ODE FP > ODE IP > PDE FP > PDE IP 순으로 해보려고 한다.

MATLAB에서는 위 네 가지를 모두 수치해석으로 풀어본 경험이 있기에,

이것을 Python & Deep learning technique을 통해서 다른 방식으로 구현해보고 새로운 가치를 발굴해보는 것을 의의로 삼는다.

2. DeepXDE
 PINN을 구현하기 위해 PYTHON에서 제공하는 패키지이다.
 링크: https://deepxde.readthedocs.io/en/latest/
 PDE를 위해 필요한 여러 가지 모듈을 이미 만들어놓았다.
 API구성을 보면 Data / Geometry / ICBC (Initial & boundary condition) / NN (nueral network) 등 여러 가지 구성 요소가 나름 직관적으로 공개되어있고, 각각의 샘플이 오픈되어 있다.

 

DeepXDE — DeepXDE 1.6.2 documentation

© Copyright 2019, Lu Lu Revision 15078f65.

deepxde.readthedocs.io

 

API 목차


 3. Simple ODE implmentation
 - 포항공대 기계공학과의 인공지능을 연구하는 이승철 교수님의 연구실에서 DeepXDE 예제를 공개해 두어서 이를 기반으로 실습을 진행해보았다.

 - 간단한 형태의 PDE/ODE 중 일반해를 구할 수 있는 간단한 문제를 만든다 (=test problem).

 - PINN을 통해 간단한 문제를 풀어보고, analytical solution과 비교해본다.

 

참고) 이러한 logical flow는 흔히 수학과에서 수치해석분야에서 많이 쓰이는 방법이다.

정답이 있는 편미분 방정식의 대수식과 IC/BC를 정의하고 > 이를 n차 미분하여 이것을 해석해보는 과정을 통해

 수치해석 알고리즘 / convergence / numerical method 등을 테스트하는 것과 같은 논리적인 흐름이다.

 

출처 유튜브 링크: https://www.youtube.com/watch?v=fZH-Ml2Fcmg&list=PLGMtjo8jDX9BuhD15T0WOE-loUhAwgFpZ&index=97

물리기반 인공신경망 실습

 

Step 1. 라이브러리 설치

 deepxde 하나만 설치해주면 된다.

 

외부 노트북 작업을 하는 바람에 colab으로 GPU를 빌려 돌렸다.

 

Step 2. 라이브러리 불러오기

 텐서플로우 / deepxde / numpy는 기본적으로 불러오고,

그 외에 필요한 수학 연산자 및 결과 시각화를 위한 패키지도 불러온다.

 

Step 3-1. ODE system define

ode를 정의하기 위해 몇 가지 요소를 나누었다.

 du_t = du / dt를 의마하고, righ-hand-side의 derivative를 먼저 define해준다.

참고) dde.grad.jacobian은 해당 패키지의 문법인데, 1차 미분을 뜻한다.

 

Step 3-2. IC 정의

 ode기 때문에 IC만 정해주면된다.

 참고) return 값으로 받는 결과가 boolean 형태인데, 이를 통해서 우리가 define해준 IC와 매우 가까운 조건들만 살아남도록 처리해주었다.

 

Step 3-3. Time span 정의

Time domain을 정해준다.

예제이기 때문에 true solution (= analyticla solution)이 있는 문제 였고, 그것을 입력할 수 있도록 문법이 구성되어 있다.

 

 

Step 4. 아키텍쳐 설계

문법은 크게 어렵지 않았다. 몇 가지 설정을 입력해주면 끝.

 

Step 5. Training

model.train이라는 함수를 불러와 해당 문법에 맞추어서 훈련을 시켜준다.

Epoch는 6000이었고, 값을 저장하지 말고 plot만 하도록 한 뒤에 그 결과를 확인해보도록 한다.

 

학습 결과: 본인 컴퓨터의 gpu 에서 18초 걸렸던 것이 구글 코랩 gpu를 썼더니 5.7초로 단축되었다.

 

 

오늘은 ODE의 forward problem을 어떻게 구현하는지 확인하였다.

다음에는 PDE의 forward problem을 적용해보기로 한다!

 

오늘의 일기 끝.