DeepONet

milkbuttercheese·2023년 2월 23일

Operator Learning 논문

목록 보기
1/1

Learning nonlinear operators for identifying differential equations based on the universal approximation theorem of operators

Reference

  • 함수공간 function space ref
    - 함수들의 집합 XX 가 벡터공간이면, XX 를 함수공간이라 부른다
    - 함수공간 XX 에서의 내적은 다음과 같이 정의된다
    - f,g=f(x)g(x)dx\langle {f},{g} \rangle=\displaystyle\int_{}^{}{f(x)g(x)dx } f,gXf,g \in X
    - 주요하게 다루는 함수공간은 다음과 같다
    - 연속함수공간 CmC ^{m}
    - Cm(R){fC(R):f(n) is continous C ^{m}(\mathbb{R})\equiv \{ f \in C(\mathbb{R}) :f ^{(n) }\text{ is continous } nm}∀n \le m\}
    -

  • 바나흐 공간Banach space
    - 완비complete metric노름공간이다
    - 완비complete metric
    - 그 안이나 경계에 빠진점이 없는 거리공간
    - 점들의 사이가 점점 가까워지는 코시열이 모두 수렴하는 점을 가질때 완비성을 지녔다고 말한다
    - 노름공간normed space
    - 벡터의 '크기'가 정의된 벡터공간을 지칭한다
    - 내적공간은 노름공간의 일종이다.
    - 힐버트 공간은 완비내적공간complete inner product space로, 바나흐 공간의 일종이다.

  • compactness
    - (대략) 무한히 뻗어나가지 않고 유한한 성질
    - 유계(집합 XRX \in \mathbb{R} 에 대하여 집합XX 에 속하는 모든 원소보다 크거나 같은수, 작거나 같은수가 모두 존재할때를 부르는 개념)의 일반화된 개념이다.
    - 유클리드 공간의 부분집합의 경우, 닫힌 유계집합과 동치이다

  • 작용소 operator (in Functional Analysis)
    - 노름 공간(X,X)(X,\| \cdot \|_{X})에서 노름공간 (Y,Y)(Y,\| \cdot \|_{Y}) 으로 대응하는 사상
    - 이때 x1,x2Xx _{1},x _{2} \in X , αF\alpha \in F에 대하여 T:XYT:X \to YT(x1+αx2)=T(x1)+αT(x2)T(x _{1}+\alpha x _{2})=T(x _{1})+\alpha T(x _{2}) 일경우 TT 를 선형 작용소라고 칭한다.

  • Trunk와 Branch (in CNN)
    - Trunk network는 이미지 픽셀 전체를 학습하는 네트워크이고, branch network는 이미지의 국소영역을 학습하는 네트워크이다

  • inductive bias
    - 주어지지 않은 입력의 출력을 예측하는 것으로, 일반화 성능을 높이기 위해 추가적인 가정을 한다
    - CNN에서는 locality(한 픽셀은 주변 픽셀과 서로 관계를 갖는다), translation invariance(이미지를 평행이동켜 그곳에서 출력된 값이 기존 값과 다르지 않을 것이라는 가정)을 갖는다
    - RNN는 Sequential(입력이 시계열의 특징을 갖는다), Temporal Invariance(동일한 순서로 입력이 들어오면 출력도 동일하다)는 가정

  • 시스템 식별system identification
    - 시스템의 분류
    - white box model : 모델이 물리법칙으로 표현가능하며, 변수도 모두 아는 모델
    - gray box model: 어느정도 물리법칙으로 표현 가능하며 변수도 어느정도 알고있는 모델
    - black box model:모델이 물리법칙으로 표현하기 어렵고, 변수도 알기 어려운 모델
    - 신호처리signal processing의 한 분야로써, 시스템의 입력과 출력데이터를 활용하여 수학적 모델을 얻기 위한 방법론이다

  • chebyshev 다항식
    - (1x2)2y2xxyx+n2y=0(1-x ^{2})\cfrac{\partial ^{2}{y}}{\partial ^{2}{x}}-x \cfrac{\partial {y}}{\partial {x}}+n ^{2}y=0
    - 해는 Tn(cos(θ))=cos(nθ)T _{n}(cos(\theta))=cos(n \theta) 를 만족한다
    - Chebyshev polynomial 테이블
    - T0=0T _{0}=0
    - T1(x)=xT _{1}(x)=x
    - T2(x)=2x21T _{2}(x)=2 x ^{2}-1
    - T3(x)=4x33xT _{3}(x)=4 x ^{3}-3x
    - ...

  • 확률 과정 stochastic process 및 무작위장 random field
    - ref
    - 시간의 진행에 따라 확률적인 변화를 갖는 구조이다
    - 확률과정 정의
    - 파라미터 공간 TT 가 주어졌을 때, TT에 대한 확률과정 ff은 다음의 확률변수들의 집합이다
    - {f(t):tT}\{ f(t):t \in T \}
    - 무작위장 정의
    - TTNN 차원의 집합이라면, 확률변수 f(t)f(t)dd 차원의 벡터를 갖는 변수이고, 이를 잇는 함수 ff(N,d)(N,d) 의 무작위장이라 부른다

  • 공분산행렬
    - 확률변수 X\boldsymbol{X}에 대하여 [Cov(X,X)]ij=Cov(Xi,Xj)[Cov(\boldsymbol{X},\boldsymbol{X})]_{ij}=Cov(X _{i},X _{j}) 를 만족시키는 행렬

  • 가우시안 변수
    - 1차원
    - 확률변수 XX의 분포가 ϕ(x)12πσ2exp[(xμ)22σ2]\phi(x)\equiv \displaystyle\frac{1}{\sqrt{2\pi \sigma ^{2}}}exp[-\displaystyle\frac{-(x-\mu) ^{2}}{2 \sigma ^{2}}] 를 따르면 가우시안 변수라고 부른다
    - 다변수
    - 확률변수 X=[X1,X2,Xd]Rd\boldsymbol{X}=[X _{1},X _{2}\cdots,X _{d}] \in \mathbb{R} ^{d} 의 분포가 있다 하자.
    - 확률변수 X\boldsymbol{X} 에 대한 평균벡터 μ=[μ1,μ2,,μd]Rd\boldsymbol{\mu}=[\mu _{1},\mu _{2},\cdots, \mu _{d}]\in \mathbb{R} ^{d} 와 공분산행렬 ΣRD×D\boldsymbol{\Sigma} \in \mathbb{R} ^{D \times D} 이 있다하자.
    - ϕ(x;μ,Σ)=1(2π)d/2Σ1/2exp[12(xμ)TΣ1(xμ)]\phi(\boldsymbol{x};\boldsymbol{\mu},\boldsymbol{\Sigma})=\displaystyle\frac{1}{(2\pi) ^{d/2}|\boldsymbol{\Sigma}| ^{1/2}}exp[-\displaystyle\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu})^{\mathsf{T}}\boldsymbol{\Sigma} ^{-1}(\boldsymbol{x}-\boldsymbol{\mu})] 확률변수 X\boldsymbol{X}의 분포가 이 식을 따르면 이를 다변수 가우시안 변수라 부른다
    - 이때 (xμ)TΣ1(xμ)(\boldsymbol{x}-\boldsymbol{\mu})^{\mathsf{T}}\boldsymbol{\Sigma} ^{-1}(\boldsymbol{x}-\boldsymbol{\mu}) 를 마할라노비스 거리Mahalanobis distance라 부른다
    - (xμ)TΣ1(xμ)(\boldsymbol{x}-\boldsymbol{\mu})^{\mathsf{T}}\boldsymbol{\Sigma} ^{-1}(\boldsymbol{x}-\boldsymbol{\mu})
    - =[(xμ)T]i[Σ1]ij[(xμ)]j=(xiμi)(Σ1)ij(xjμj)=[(\boldsymbol{x}-\boldsymbol{\mu})^{\mathsf{T}}]_{i}[\boldsymbol{\Sigma} ^{-1}]_{ij}[(\boldsymbol{x}-\boldsymbol{\mu})]_{j}=(x _{i}-\mu _{i})(\Sigma ^{-1})_{ij}(x _{j}-\mu _{j})
    - =(Σ1)ij(xixjxiμjxjμi+μiμj)=(\Sigma ^{-1})_{ij}(x _{i}x _{j}-x _{i}\mu _{j}-x _{j}\mu _{i}+\mu _{i}\mu _{j})
    - 공분산행렬 Σ\boldsymbol{\Sigma} 가 대칭행렬이기 때문에, 이 분포는 대칭의 형태를 갖고 있다.

  • 가우시안 필드

  • 가우시안 분포에서 추출한 픽셀 이미지

  • RBF(Radial Basis Function) / Gaussian Kernel ref
    - KRBF(x,x)=exp[γxx2]K _{RBF}(\boldsymbol{x},\boldsymbol{x}')=exp[-\gamma \| \boldsymbol{x}-\boldsymbol{x}' \| ^{2}]
    - 일단 일반성을 잃지않고, γ=12\gamma=\displaystyle\frac{1}{2} 로 두자
    - K(x,x)=exp[12xx,xx]K(\boldsymbol{x},\boldsymbol{x}')=exp[-\displaystyle\frac{1}{2}\langle {\boldsymbol{x}-\boldsymbol{x}'},{\boldsymbol{x}-\boldsymbol{x}'} \rangle]
    - =exp[12(x,x+x,xx,xx,x)]=exp[-\displaystyle\frac{1}{2}(\langle {\boldsymbol{x}},{\boldsymbol{x}} \rangle+\langle {\boldsymbol{x}'},{\boldsymbol{x}'} \rangle-\langle {\boldsymbol{x}},{\boldsymbol{x}'} \rangle-\langle {\boldsymbol{x}'},{\boldsymbol{x}} \rangle)]
    - x,xRn\boldsymbol{x},\boldsymbol{x}' \in \mathbb{R} ^{n} 이라면
    - =exp[12(x2+x22x,x)]=exp[-\displaystyle\frac{1}{2}(\| \boldsymbol{x} \| ^{2}+ \| \boldsymbol{x}' \| ^{2}-2\langle {\boldsymbol{x}},{\boldsymbol{x}'} \rangle)]
    - C=exp[12x212x2]C=exp[-\displaystyle\frac{1}{2}\| \boldsymbol{x} ^{2} \|-\displaystyle\frac{1}{2}\| \boldsymbol{x}' \| ^{2}] 라는 상수로 둔다면
    - K(x,x)=Cex,xK(\boldsymbol{x},\boldsymbol{x}')=C e^{\langle {\boldsymbol{x}},{\boldsymbol{x}'} \rangle}
    -

0. Abstract

  • 히든 레이어를 갖고 있는 신경망 하나는 어떤 비선형 연속 연산자nonlinear continous operator를 근사할 수 있다.
  • 보편근사정리는 암시적으로 데이터로부터 비선형적 연산자를 신경망에서 학습시킬수 있는 것에 대한 가능성을 이야기하고 있다
  • 그러나 정리는 충분히 큰 네트워크에서의 작은 예측 오차만을 이야기할 뿐, 중요한 최적화 및 일반화 오차에 대하여선 이야기하고 있지 않다
  • 이 정리를 실용화하기 위하여 우리는 DeepONet란 네트워크를 제시한다
    - 2개의 서브 네트워크로 구성되어 있다
    - 하나는 고정된 수의 센서로부터 들어오는 입력함수값을 인코딩하는 네트워크이고
    - 또다른 하나는 출력함수를 인코딩한다
  • 그리고 DeepONet이 다른 fully-connected networks에 비해 엄청나게 generalization error를 줄였음을 보여준다
  • 우리는 근사오차가 센서의 수에 의존함을 보이고, 결과를 보일 것이다.

1. Introduction

  • 보편근사정리는 히든 레이어의 폭width과 깊이depth에 대한 제약이 없다면, 신경망은 어떠한 연속함수에 대하여 임의의 정확도로 근사할 수 있음을 보인다
  • 그러나 또다른 결과로, 하나의 히든 레이어만을 갖고 있는 신경망 또한 어떤 비선형 연속 functional(f:VRf:V \to \mathbb{R} , VV 는 함수 공간)이거나 (비선형) 연산자(g:VWg:V \to W , V,WV,W는 각각 함수 공간) 근사가능하다
  • 연산자에 대한 근사정리를 리뷰하기 이전에, 몇개의 표기법을 제안한다.
    - GG 가 입력함수input function uu 를 취하는 연산자라고 하자
    - G(u)G(u) 는 이에 대응하는 출력함수output function 이다
    - yDy \in D , DDG(u)G(u) 의 정의역이라 하자 그렇다면 G(u)(y)G(u)(y) 는 real number 이다
  • 우리의 목표는 함수를 입력값으로 하는 연산자를 학습시켜야 함에도, 우리는 입력함수를 이산적으로 표현represent 해야 한다. 그렇기 때문에 네트워크 근사가 적용될 수 있는 것이다.

정리 1. Operator에 대한 보편근사정리

  • 조건
    - XX 가 바나흐Banach 공간이라 하자
    - σ\sigma 가 연속 비다항함수non-polynomial function이라고 하자
    - K1XK _{1} \subset X , K2RdK _{2}\subset \mathbb{R} ^{d} 가 각각 X,RdX,\mathbb{R} ^{d} 에서 compact set이라고 하자
    - VVC(K1)C(K _{1}) 에서 compact set이라고 하자
    - G:VC(K2)G:V \to C(K _{2}) 는 비선형 연속 연산자라고 하자
  • 주장
    - 임의의 ϵ>0\epsilon > 0 이 있고, 양의 정수 n,p,mn,p,m 과 상수 cik,ξijk,θikRc _{i} ^{k},\xi _{ij} ^{k},\theta _{i} ^{k}\in \mathbb{R} 이고, wkRdw _{k} \in \mathbb{R} ^{d} , xjK1,i=1,,nx _{j}\in K _{1} \,\, , i=1,\cdots,n , k=1,2,,pk=1,2,\cdots,p , j=1,2,,mj=1,2,\cdots,m 의 값들이 존재하여 아래의 식을 만족시킨다.
    - G(u)(y)k=1pi=1ncikσ(j=1mξijku(xj)+θik)σ(wky+ζk)<ϵ|G(u)(y)-\displaystyle\sum_{k=1}^{p}{\displaystyle\sum_{i=1}^{n}{c _{i} ^{k}\sigma(\displaystyle\sum_{j=1}^{m}{\xi _{ij} ^{k}u(x _{j})+\theta _{i} ^{k}})\sigma (w _{k}\cdot y+\zeta _{k})}}|<\epsilon
    - 이 식은 모든 uV,yK2u \in V, y \in K _{2} 에 대하여 만족한다
  • 해석
    - j=1mξijku(xj)+θik\displaystyle\sum_{j=1}^{m}{\xi _{ij} ^{k}u(x _{j})+\theta _{i} ^{k}} 부분을 branch, σ(wky+ζk)\sigma (w _{k}\cdot y+\zeta _{k}) 를 trunk 이라고 칭한다.
    - (in CNN) Trunk network는 이미지 픽셀 전체를 학습하는 네트워크이고, branch network는 이미지의 국소영역을 학습하는 네트워크이다
    - kk 는 브랜치의 순서를, jj 는 함수 uu 에 입력되는 데이터의 순서를, ii 는 브랜치에서 (행렬곱 후 활성화함수 σ\sigma를 거쳐)나온 representation을 가중치 cikc _{i} ^{k} 에 대하여 가중치합하기 위하여 쓴 인덱스이다
    - 즉 과정은 다음과 같다
    1. branch net에서 uu의 정의역에 속한 원소 xjx _{j} 에 대한 함수값 u(xj)u(x _{j}) 를 행렬곱 후 활성화함수를 거쳐 나온 representation을 계산한다
    2. trunk net에서 G(u)G(u)의 정의역에 속한 원소 yy에 대한 행렬곱 후 활성화함수를 거쳐 나온 representation을 계산한다. 이 representation은 branch의 수만큼 존재한다
    3. 이 두 결과를 서로 내적한다
    4. G(u)(y)G(u)(y) 와 3번의 결과의 차가 임의의 ϵ\epsilon 보다 작게끔 하는 파라미터들이 존재한다
    - 이 보편근사정리는 신경망을 비선형적 작용소에 작용시킬 수 있는 가능성을 나타낸다
    - 그러나 이 이론은 어떻게 작용소를 학습시키는지 효율적인지에 대해선 말하지 않는다
    - 고전적 이미지 분류의 경우에선, 함수에 대한 보편근사원리는 FNN이 실제 분류함수에 정확하도록 근사할 수 있음을 보여준다.
    - 하지만 실제 FNN의 성능이 뛰어나지 않으므로, CNN이나 다른 Capsule neural network등을 주로 사용한다
  • 퍼포먼스의 측정은 다음의 세가지로 분류될 수 있다
    1. approximation
    2. optimization
    3. generalization
    - 보편근사정리는 오로지 충분히 큰 네트워크에서의 작은 근사 오차approximation error만을 측정할 뿐이다. 문제는 최적화 오차와 일반화 오차또한 실제 활용에 있어 동등하게 중요하다는 점에 있다
  • 신경망의 비선형 작용소 학습의 효율성과 능력을 설명하기 위하여, 가장 약한 제한조건을 걸어 가장 일반화된 형태의 문제를 풀어보자
    - 오로지 하나의 조건, 독립변수의 값이 측정된 위치가 {x1,x2,,xn}\{ x _{1},x _{2},\cdots,x _{n} \} 으로 고정도어 있다고만 하자.
    - 이때 모든 격자에 대하여 동일한 입력함수 uu 를 가져야 한다는 제한도 걸지 않는다
    - 작용소가 효율적으로 학습하기 위하여 우리는 DeeONet이라는 네트워크 구조를 제안한다. 2개의 sub-network로 구성되는데, 이중 branch-net은 입력함수를, trunk-net은 출력함수를 평가한다

2.Methodology

  • 네트워크의 입력값은 다음과 같은 두 성분으로 나뉜다
    - [u(x1),u(x2),u(xm)]T[u(x _{1}),u(x _{2}),\cdots u(x _{m})]^{\mathsf{T}}yy 이다
    - 연산상의 이점을 위하여 [u(x1),u(x2),u(xm),y]T[u(x _{1}),u(x _{2}),\cdots u(x _{m}),y]^{\mathsf{T}}로 잇자
  • 높은 차원 문제에선 yydd 개의 성분으로 구성된 벡터이다. 그리고 yy 의 차원은 u(xi)u(x _{i}) 와 더이상 맞지 않게 된다.
    - 이 경우는 [u(x1),u(x2),u(xm)]T[u(x _{1}),u(x _{2}),\cdots u(x _{m})]^{\mathsf{T}}yy 로 따로 구분지어 다뤄야 한다
  • 입력값이 특정 구조를 띄고 있지 않기 때문에, CNN이나 RNN 대신 FNN을 기본적 모델로 한다

구조

  • 2개의 서브 네트워크를 갖는다
    - trunk network
    - yy 를 입력값으로 받고, [t1,t2,,tp]TRp[t _{1},t _{2},\cdots,t _{p}]^{\mathsf{T}} \in \mathbb{R} ^{p} 를 출력으로 한다
    - trunk network는 마지막 층에 activation function이 적용된다 그러므로 tk=σ()t _{k}=\sigma(\cdot ) 이다
    - branch network는 [u(x1),u(x2),,u(xn)]T[u(x _{1}),u(x _{2}),\cdots,u(x _{n})]^{\mathsf{T}} 을 입력값으로 받고, bkRb _{k} \in \mathbb{R} 을 출력값으로 한다. (for k=1,2,,pk =1,2, \cdots,p)

  • 이 둘의 결과를 결합하면 다음과 같다
    - G(u)(y)k=1pbktkG(u)(y)\sim \displaystyle\sum_{k=1}^{p}{b _{k}t _{k}}
    - 다만 보편근사정리에서 위 공식에 bias 항이 필요하지 않음에도, bias는 generalization error를 줄이는데 기여하므로, 마지막 단계에서 추가한다
    - G(u)(y)k=1pbktk+b0G(u)(y) \sim \displaystyle\sum_{k=1}^{p}{b _{k}t _{k}+b _{0}}

  • 실전에서 pp 는 최소 10 이상의 크기를 가져, 많은 수의 브랜치 네트워크가 연산적으로, 그리고 비용적으로 많이 나가게 된다

  • 게다가 우리는 모든 브랜치 네트워크를 하나의 브랜치 네트워크로 통합하였기 때문에, 싱글 브랜치 네트워크는 [b1,b2,,bp]TRp[b _{1},b _{2},\cdots, b _{p}]^{\mathsf{T}} \in \mathbb{R} ^{p} 의 크기를 갖는다

  • DeepONet는 높은 레벨의 네트워크 구조로써, 사전에 내부 트렁크 또는 브랜치 네트워크가 정의되어 있지 않는다.
    - DeepONet가 혼자서 좋은 성능을 보이는 것을 설명하기 위해서, 이번 연구에서 가장 간단한 형태의 FNN을 서브네트워크로 삼는다

  • DeepONet의 성공은 이것의 서브 네트워크또한 강력한 inductive bias를 갖고 있기 때문이다. 신경망에 사전지식을 주입하는건 떄론 좋은 일반화 성능을 이끌어 낸다
    - G(u)(y)G(u)(y)uuyy 라는 입력값을 갖고, 트렁크와 브랜치 네트워크는 이 사전지식을 활용한다

데이터 생성 Data Generation

  • 프로세스중 입력 시그널 u(x)u(x) 는 시스템 인식에서 중요한 역할을 한다. 명확하게, 입력 시그널은 해당 반응에 관한 정보를 모으기 위한 과정에 영향을 주는 유일한 확률이다. 그리고, 식별 시그널의 질은 정확도를 유계하는 것을 결정한다
  • 이번 연구에서는 두 함수 공간을 고려한다. 가우시안 확률 필드Gaussian random field와 orthogonal poynomial이다
  • 정의
    - mean-zero GRF
    - uG(0,kl(x1,x2))u \sim G(0,k _{l}(x _{1},x _{2}))
    - 이때 공분산 커널 k(x1,x2)=exp[x1x222l2]k(x _{1},x _{2})=exp[-\displaystyle\frac{\| x _{1}-x _{2} \| ^{2}}{2 l ^{2}}] 이다
    - Chebyshev polynomial
    - Vpoly={i=0N1aiTi(x):aiM}V _{poly}=\{ \displaystyle\sum_{i=0}^{N-1}{a _{i}T _{i}(x):|a _{i}|\le M} \}
    - VpolyV _{poly} 로부터 데이터셋을 생성하기 위하여 aia _{i}[M,M][-M,M] 으로부터 랜덤으로 샘플링한다
    - uu 를 선택한 함수 공간으로부터 샘플링하고 난후, Runge-Kuntta (4,5)를 통해 상미분 시스템을 푼다. 그리고 second-order finite difference method를 통하여 PDE를 푼다

3. 비선형 동적 시스템을 인식하기 위한 센서의 수

  • 이번 단원에서는 얼마나 많은 센서가 정확도 ϵ\epsilon 로 비선형 동적 시스템을 식별하기 위해 필요한지 조사한다
  • 동적 시스템은 ODE 시스템에 종속된다 하자
    - xs(x)=g(s(x),u(x),x)\cfrac{\partial {}}{\partial {x}}\boldsymbol{s}(x)=\boldsymbol{g}(\boldsymbol{s}(x),u(x),x)
    - s(a)=s0\boldsymbol{s}(a)=\boldsymbol{s}_{0}
    - 이때 uVu \in VC[a,b]C[a,b] 의 compact subset이자, 입력 시그널이고, s:[a,b]Rk\mathbb{s}:[a,b]\to \mathbb{R} ^{k} 는 시스템의 해이다
  • GGuu 에 대한 작용소이고, s\boldsymbol{s} 를 결과값이라고 하자 GuGu 는 다음을 만족시킨다고 하자
    - (Gu)(x)=s0+axg((Gu)(t),u(t),t)dt(Gu)(x)=\boldsymbol{s}_{0}+\displaystyle\int_{a}^{x}{\boldsymbol{g}((Gu)(t),u(t),t)dt}
    - 이제 균등하게 m+1m+1 개의 데이터 포인트 xj=a+j(ba)mx _{j}=a+\displaystyle\frac{j(b-a)}{m} (for all j{1,2,,m}\text{for all }{j} \in \{1,2,\cdots,m\}) 을 택하자. 그리고 umu _{m} 을 다음과 같이 정의하자
    - ![[Pasted image 20230221221853.png]]
    - Lm:uum\mathcal{L}_{m}:u \to u _{m} 인 작용소 매핑이고, Um={Lm(u)uV}U _{m}=\{ \mathcal{L}_{m}(u)|u \in V \} 라고 하자
    - 이는 명백하게 C[a,b]C[a,b] 의 compact subet이고, Lm\mathcal{L}_{m} 은 compactness를 유지한다
    - 자연스럽게 WmVUmW _{m} \equiv V \cup U _{m} 이 두 컴팩트 집합의 합집합또한 컴팩트하다
    - GG 가 continous operator로 G(W)G(W)C([a,b];RK)C([a,b];\mathbb{R} ^{K}) 에서 compact 하다
    - 분석의 용이성을 위하여 우리는 g(s,u,x)g(\boldsymbol{s},u,x) 가 Lipschitz 조건을 만족한다고 가정한다. 이는 상수 cc 가 있어
    - g(s1,u,x)g(s2,u,x)2cs1s2\| \boldsymbol{g}(s _{1},u,x) -\boldsymbol{g}(\boldsymbol{s}_{2},u,x)\|_{2} \le c \| \boldsymbol{s}_{1}-\boldsymbol{s}_{2} \|
    - g(s,u1,x)g(s,u2,x)2cu1u2\| \boldsymbol{g}(\boldsymbol{s},u _{1},x)-\boldsymbol{g}(\boldsymbol{s},u _{2},x) \|_{2} \le c|u _{1}-u _{2}|
    - 이 조건은 g\boldsymbol{g} 가 각각 s\boldsymbol{s}uu 에 대하여 미분가능함으로서 충족된다
    - uV,umUmu \in V , u _{m} \in U _{m} 에 대하여 mm 과 컴팩트 공간 VV에 의존하는 상수 κ(m,V)\kappa(m,V) 가 존재하여 다음의 조건을 충족한다고 하자
    - maxx[a,b]u(x)um(xκ(m,V)\max\limits_{\displaystyle{x \in [a,b]}}{|u(x)-u _{m}(x|} \le \kappa(m,V) , κ(m,V)0\kappa(m,V)\to 0 as mm \to \infty
    - VVRBFRBF(kl=exp(x1x222l2)k _{l}=exp(- \displaystyle\frac{- \| x _{1}-x _{2} \| ^{2}}{2 l ^{2}}))를 갖는 GRFGRF(uG(0,kl(x1,x2)u \sim \mathcal{G}(0,k _{l}(x _{1},x _{2})) 이므로 κ(m,V)1m2l2\kappa(m,V) \sim \displaystyle\frac{1}{m ^{2}l ^{2}} 를 따른다.

정리

  • mm 이 양의 정수이고, c(ba)κ(m,V)ec(ba)c(b-a)\kappa(m,V)e^{c(b-a)}ϵ\epsilon 보다 작게 만드는 수라고 하자. 그렇다면 임의의 d[a,b]d \in [a,b] 에 대하여 W1Rn×(m+1)\mathcal{W}_{1}\in \mathbb{R} ^{n \times (m+1)} , b1Rm+1,W2RK×n,b2RKb _{1} \in \mathbb{R} ^{m+1},\mathcal{W}_{2}\in \mathbb{R} ^{K \times n},b _{2} \in \mathbb{R} ^{K} 가 있어
    - (Gu)(d)(W2σ(W1[u(xou(xm))]T+b1)+b2)2<ϵ\| (Gu)(d)-(\mathcal{W}_{2}\cdot \sigma(\mathcal{W}_{1}\cdot [u(x _{o} \,\,\cdots \,\,u(x _{m}))]^{\mathsf{T}}+b _{1})+b _{2}) \| ^{2}<\epsilon
    - 이 모든 uVu \in V 에 대해 성립한다

4. 시뮬레이션 결과

  • DeepONets이 더 낮은 일반화 오차덕분에, FNN보다 더 뛰어난 성능을 지니고 있음을 보인다
    - 우리는 Adam optimizer의 학습률 η=0.001\eta=0.001 로 지정하고
    - 반복횟수를 학습이 수렴하는것이 보장되게끔 설정하였다
    - 다른 파라미터와 네트워크 사이즈에 대해선 테이블 1과 2에 나열되었다
    - 해당 코드는 Github 에 공개되었다

1. 1차원 동적 시스템

  • ds(x)dx=g(s(x),u(x),x)\cfrac{d{s(x)}}{d {x}}=g(s(x),u(x),x) for x[0,1]x \in [0,1]
    - 초기조건으로 s(0)=0s(0)=0 으로 한다
    - 우리의 목표는 s(x)s(x) 를 임의의 u(x),x[0,1]u(x),x \in [0,1] 에 대하여 예측하는 것이다
  • 테이블 1
casesuu spaces# sensors mm# Training# Test$# IterationsOther parameters
1.1GRF (l=0.2l=0.2)1001000010000050000k=1 ,T=1
1.2GRF (l=0.2l=0.2)10010000100000100000
2GRF (l=0.2l=0.2)10010000100000100000
3GRF (l=0.2l=0.2)1001000000500000
  • 테이블 2
    | Case | Network Type | Trunk depth | Trunk width | Branch depth | Branch width |
    | ---- | ----------------- | ----------- | ----------- | ------------ | ------------ |
    | 1. | Stacked/Unstacked | 3 | 40 | 2 | 40 |
    | 2. | Unstacked | 3 | 40 | 2 | 40 |
    | 3. | Unstacked | 3 | 100 | 2 | 100 |

1-1. Linear case :

  • g(s(x),u(x),x)=u(x)g(s(x),u(x),x)=u(x)
    - G:u(x)s(x)=0xu(τ)dτG:u(x) \to s(x) = \displaystyle\int_{0}^{x}{u(\tau)d \tau }
    - 기초단계로, FNN을 역도함수에 근사하도록 학습시키는 것이다
    - FNN 의 최적의 성능을 찾기 위하여, 3개의 하이퍼파라미터를 그리드서치를 통해 찾는다
    - 깊이를 2부터 4, 폭을 10부터 2560, 학습률을 0.0001로부터 0.01까지 학습시킨다
    - 우리가 깊이 4만을 골랐지만, 결과들은 깊이를 늘린다고 해서 마냥 에러가 개선되지 않음을 보여준다
    - 가장 작은 테스트 오차는 104\sim 10 ^{-4} 로, 깊이 2, 폭 2560, 학습률 0.001일때 계산되었다
    - 우리가 관찰하였을 때, 네트워크가 작은 경우 학습오차는 크고, 일반화 오차(테스트 오차- 훈련 오차)는 작은 형태로 나타났다. 반대로 네트워크의 사이즈가 커짐에 따라, 학습 오차는 작아지는 대신, 일반화 오차는 커지는 형태로 나타났다.
    - FNN과 비교하여 DeepONet는 훨씬 작은 일반화 오차와 테스트 오차를 갖고 있었다

코드 분석

  • 파이토치로 구현됨
  • deeponet.py
class DeepONet(NN):
    """ args:
    layer_size_branch,layers_sizes_trunk: FNN의 폭을 지정한다. 이때 브랜치넷과 트렁크넷의 마지막층 폭의 크기는 항상 같아야 한다
    activation: 활성화 함수를 지정한다. `string` 형태로 호출한다. 이때 브랜치넷과 트렁크넷의 활성화 함수는 동일해야 한다. 만약 activation이 dict형태라면 트렁크넷과 브랜치넷은 각각 activation['trunk'], activation['branch'] 를 활용한다  
    """

    def __init__(
        self,
        layer_sizes_branch,
        layer_sizes_trunk,
        activation,
        kernel_initializer,
    ):
    """ super().__init__(): torch.nn.NN의 성질을 계승받는다"""
        super().__init__()
	""" isintance(obj_name,dtype_name): 해당 데이터타입에 맞는지 확인하는 함수,   여기선 activiation이 dict인가 아닌가에 따라 분리로 나누었음."""
        if isinstance(activation, dict):
            activation_branch = activations.get(activation["branch"])
            self.activation_trunk = activations.get(activation["trunk"])
        else:
            activation_branch = self.activation_trunk = activations.get(activation)
	"""callable이란 호출가능한 클래스 인스턴스,함수,메서드등의 객체를 의미한다.
		여기선 유저가 직접 정의 네트워크 형태가 있다면 이를 따르고, 아닌경우 트렁크와 브랜치 크기, 활성화함수,커널 초기화등의 인자를 입력받으면 FNN을 만들어줌 """
        if callable(layer_sizes_branch[1]):
            self.branch = layer_sizes_branch[1]
        else:
            self.branch = FNN(layer_sizes_branch, activation_branch, kernel_initializer)
        self.trunk = FNN(layer_sizes_trunk, self.activation_trunk, kernel_initializer)
        self.b = torch.nn.parameter.Parameter(torch.tensor(0.0))

    def forward(self, inputs):
	    """각각 함수값과 위치값을 inputs에서 분할하여 받는다"""
        x_func = inputs[0]
        x_loc = inputs[1]
        """함수값을 branch에 입력한다. branch는 변환후 함수에 대한 독립변수 y를 입력받고, trunk는 변환전 함수에 대한 독립변수 x를 입력받는다."""
        x_func = self.branch(x_func)
        # Trunk net to encode the domain of the output function
        if self._input_transform is not None:
            x_loc = self._input_transform(x_loc)
		"""activation_trunk는 """
        x_loc = self.activation_trunk(self.trunk(x_loc))
        # Dot product
        if x_func.shape[-1] != x_loc.shape[-1]:
            raise AssertionError(
                "Output sizes of branch net and trunk net do not match."
            )
		""" 
		torch.einsum : Einstein Summation Convention을 수행하는 명령어
		내적과 외적, 행렬곱등의 연산들을 모두 einsum 하나로 표현가능하다
		"ijk,jl ->ikl"  형식으로 작성한다
		""" 
        x = torch.einsum("bi,bi->b", x_func, x_loc)
        """ 
        squeeze:차원이 1인 차원을 제거한다 예: [3,1,20,128] ->[3,20,128]
        unsqueeze:반대로 1인 차원을 생성한다. 따라서 어느 차원에 생성할지 지정해야 한다 예: [3,20,128] 에 unsqueeze(dim=1) 실시 =>  [3,1,20,128]
        """
        x = torch.unsqueeze(x, 1)
        # Add bias
        x += self.b
        if self._output_transform is not None:
            x = self._output_transform(inputs, x)
        return x
  • activations.py
from .. import backend as bkd  
from .. import config  
from ..backend import backend_name, tf  
  
  
def linear(x):  
    return x  
  
  
def layer_wise_locally_adaptive(activation, n=1):  
    if backend_name != "tensorflow.compat.v1":  
        raise NotImplementedError("Only tensorflow.compat.v1 backend supports L-LAAF.")  
    a = tf.Variable(1 / n, dtype=config.real(tf))  
    return lambda x: activation(n * a * x)  
  
  
def get(identifier):  
	
    """
	함수를 반환한다 
    arguments:       identifier: Function or string.  
    Returns:        Function corresponding to the input string or input function.    """   
     if identifier is None:  
        return linear  
    if isinstance(identifier, str):  
        if identifier.startswith("LAAF"):  
            identifier = identifier.split()  
            n = float(identifier[0].split("-")[1])  
            return layer_wise_locally_adaptive(get(identifier[1]), n=n)  
		"""identifier 이름을 key값으로 하여 딕셔너리서 원하는 함수를 찾아 반환받는다"""
        return {  
            "elu": bkd.elu,  
            "relu": bkd.relu,  
            "selu": bkd.selu,  
            "sigmoid": bkd.sigmoid,  
            "silu": bkd.silu,  
            "sin": bkd.sin,  
            "swish": bkd.silu,  
            "tanh": bkd.tanh,  
        }[identifier]  
    if callable(identifier):  
        return identifier  
    raise TypeError(  
        "Could not interpret activation function identifier: {}".format(identifier)  
    )

5. 결론

  • 이 논문에서 DeepONet을 비선형 작용소를 학습시킬 수 있는 네트워크로서 제시하였다. DepONet은 2개의 서브네트워크로 구성되어, 입력함수와 위치변수를 각각 인코딩하고, 그들을 통합하여 계산한 결과를 출력한다
  • 우리는 DeepONet을 4개의 상미분/편미분 방정식을 푸는 테스트를 하였고, 테스트 결과 DeepONet은 inductive bias덕분에 더 작은 generalization error를 가지고 있음을 보였다
  • 우리의 시물레이션에선 각기 다른 인자에 대한 테스트 오차를 체계적으로 연구하였는데, 이는 센서의 수number of sensors, 최대 예측시간maximum prediction time, 입력함수의 공간의 복잡성complexity of the space of input functions, 훈련 데이터셋 크기training dataset size, 네트워크 크기network size등이 있다
  • 우리는 훈련 데이터셋에 크기에 따라 지수함수적인 오차를 발견했는데, 이는 딥러닝 역사상 처음 발견된 사례이다
  • 게다가 우리는 이론적으로 근사 오차의 의존성을 각 인자별로 유도하였는데, 이는 우리의 계산 결과에 일치하였음을 보여주었다
  • 앞서 말한 성과에도 불과하고, 많은 결과물들은 이론과 계산과 함께 이루어져야 한다
    - 예를 들어 operator approximation에서 네트워크의 사이즈에 대한 이론적 결과는 존재하지 않는다.
    - 또한 우리는 DeepONet이 왜 작은 generalization error를 발생시켰는지 이해하지 못한다.
    - 반면, 이 논문에서는 Fully-connected network 구조가
profile
안녕하세요!

1개의 댓글

comment-user-thumbnail
2023년 3월 2일

안녕하세요~ UAT에서 c(ki), xi(kij)는 각각 weight이고, theta(ki), zeta(k)는 bias가 맞을까요?

답글 달기