logo

論文レビュー: DeepONet 📂機械学習

論文レビュー: DeepONet

概要及び要約

  • リファレンス、数式の番号、表記法などはできるだけ論文に従う。

アクセシビリティのためにジャーナルに掲載されたバージョンではなく、アーカイブにアップロードされているバージョンを基準にレビューする。実験の部分で扱われている問題は少し異なるが、結局のところ、中心は実験結果や性能ではなく、DeepONet技法そのものの説明にある。

DeepONetは作用素を学習するために提案されたディープラーニング技法だ。作用素とは関数を関数へと対応付ける関数である(本文で詳しく説明する)。すなわち、ある関数uuに対して、作用素GGとは以下のようになる。

G:uG(u) G : u \mapsto G(u)

このとき、uuも関数であり、Gu=G(u)Gu = G(u)も関数だ。「DeepONetは作用素を学習する」というのが第一の重要な点であり、第二に「GuGuを級数として近似する」ということである。ある適切な関数空間XXがあり、その基底を{ϕk}\left\{ \phi_{k} \right\}としよう。このとき、GuXGu \in Xは次のように表現される。

Gu=k=1ckϕk Gu = \sum_{k=1}^{\infty} c_{k}\phi_{k}

DeepONetが学習するのはckc_{k}ϕk\phi_{k}であり、係数ckc_{k}を学習する部分をブランチネットワークbranch network、基底{ϕk}\left\{ \phi_{k} \right\}を学習する部分をトランクネットワークtrunk networkと呼ぶ。

実装

1 Introduction

普遍近似定理the universal approximation theoremはニューラルネットワークが任意の連続関数を近似できることを保証する。これは人工ニューラルネットワークとディープラーニング技法がうまく機能することの理論的基盤となり、これを基にさまざまな分野でディープラーニング技法が活躍している。しかし、これよりもさらに驚くべき結果は、人工ニューラルネットワークがすべての非線形汎関数functional及び(非線形)作用素operatorまで近似できるということだ。

数学に馴染みのない読者のために関数、汎関数、作用素について少し説明しよう。この3つは基本的には大きなくくりで言えば関数(定義域にある1つの元を共域にある正確に1つの元に対応させること)である。しかしあえて汎関数や作用素という言葉を使う文脈ではこれらは少し特別な意味を持つ。まず、特に説明がなければ関数は数(あるいはベクトル)を数(あるいはベクトル)に対応させることを指す。多項式、三角関数など一般的によく扱う関数がすべてこの文脈での関数である。

function:RnRm \text{function}: \mathbb{R}^{n} \to \mathbb{R}^{m}

関数を数(スカラー)に対応させる関数を特に汎関数と呼ぶ。具体的には定積分がある。I[a,b]I_{[a,b]}という汎関数をI[a,b](f)=abf(x)dx\displaystyle I_{[a,b]}(f) = \int_{a}^{b} f(x)dxと定義すると、これはffが与えられるたびに区間[a,b][a, b]でのffのグラフ下の面積を対応させる関数である。XXを適切な関数空間とすると、汎関数は次のようになる。

functional:XR \text{functional}: X \to \mathbb{R}

作用素とは、関数を関数に対応させる関数を指す。例としては不定積分、微分などがある。

operator:XX \text{operator}: X \to X 関数ffに対してDDという作用素をD(f)=dfdxD(f) = \dfrac{df}{dx}と定義すると、これは与えられた関数をその関数の導関数に対応させる微分作用素になる。IIという作用素をI(f)=f(x)dx\displaystyle I(f) = \int f(x) dxと定義すると、これは与えられた関数をその関数の不定積分に対応させる作用素になる。

ここでいう関数、汎関数、作用素は上述の説明と同じである。本格的な話に入る前に、論文全体で通用される表記法を紹介する。GGは変数が関数uuである作用素を指す。

G:uG(u) G : u \mapsto G(u)

GGが作用素なので、GGの関数値であるG(u)G(u)も1つの関数であり、その変数をyyと表記する。

G(u):yG(u)(y) G(u) : y \mapsto G(u)(y)

したがって、yyG(u)(y)G(u)(y)はどちらも実数である。

y,G(u)(y)R y, G(u)(y) \in \mathbb{R}

本論文では作用素を学習することが目標なので、以下のようにuuyyを入力として受け取り、G(u)(y)G(u)(y)を出力するニューラルネットワークを考慮する。

network:(u,y)G(u)(y) \text{network} : (u, y) \mapsto G(u)(y)

理論的には作用素GGuuという関数自体を変数として持つが、コンピュータシミュレーションのためには離散化が必要であり、uuの代わりに有限個の関数値u(x1)u(x_{1})u(x2)u(x_{2})\dotsu(xm)u(x_{m})をニューラルネットワークの入力として扱う。このとき、{x1,x2,,xm}\left\{ x_{1}, x_{2}, \dots, x_{m} \right\}を論文ではセンサーsensorsと呼ぶ。つまり提案するニューラルネットワークは以下のような構造を持つ(図1A)。

図1A

定理1(作用素に関する普遍近似定理) σ\sigma連続する非多項式関数non-polynomial functionとする。XXバナッハ空間K1XK_{1} \subset XK2XK_{2} \subset Xコンパクト集合とする。VC(K1)V \subset C(K_{1})をコンパクト集合、G:VC(K2)G : V \to C(K_{2})を非線形連続作用素とする。

すると、任意のϵ>0\epsilon > 0に対して、正の整数nnppmmと定数cikc_{i}^{k}ξijk\xi_{ij}^{k}θik\theta_{i}^{k}ζkR\zeta_{k} \in \mathbb{R}wkRdw_{k} \in \mathbb{R}^{d}xjK1x_{j} \in K_{1}i=1,,ni = 1,\dots,nk=1,,pk = 1,\dots,pj=1,,mj = 1,\dots,m)が存在し、次のことが成り立つ。

G(u)(y)k=1pi=1ncikσ(j=1mξijku(xj)+θik)branchσ(wky+ζk)trunk<ϵfor all uV,yK2(1) \left| G(u)(y) - \sum\limits_{k=1}^{p} \underbrace{\sum\limits_{i=1}^{n} c_{i}^{k}\sigma\left( \sum\limits_{j=1}^{m} \xi_{ij}^{k}u(x_{j}) + \theta_{i}^{k} \right)}_{branch} \underbrace{\sigma(w_{k} \cdot y + \zeta_{k})}_{trunk} \right| < \epsilon \quad \text{for all } u \in V, y \in K_{2} \tag{1}

本論文では、上記の定理の近似を大きく2つの部分に分けてブランチbranchトランクtrunkと呼ぶ。

上述の近似定理はニューラルネットワークが非線形作用素を学習できるだろうということを示唆するが、これを実際にどのように効果的に学習できるかについては示していない。実際に普遍近似定理によれば、任意の[MLP]が任意の連続関数を近似できるはずだが、画像に関連する作業ではCNNやその他のニューラルネットワーク構造がよりよく機能する。有用なネットワークは訓練しやすく、一般化性能generalization errorが良くなければならない。著者たちはこれが可能な新しい方法論を提案しようとしている。

提案する方法が非線形作用素を学習するのに適していることを示すために、データに対する制約constraintsを非常に緩やかに設定した。この条件は具体的には入力データのuiu_{i}が同じセンサーを持つべきであるということである。もちろん、センサーが均一な格子上にある必要はなく、変数yyに対する制約はない。この条件は次の図(図1B)によく示されている。

図1B

著者たちは提案する構造をDeepONet(DeepOperatorNetwork)と呼び、これは入力関数(u(x1),,u(xm)u(x_{1}), \dots, u(x_{m}))に対するブランチネットbranch netと出力関数の変数(yy)に対する関数トランクネットtrunk netで構成されている。これについては第2章で詳しく説明する。

論文では2種類の作用素、常微分方程式(ODE)で表現される動的システム偏微分方程式を考慮する。

2 Methodology

2.1 Deep operator networks (DeepONets)

著者たちは一般的な状況での作用素の学習に焦点を当て、これのための制約条件は唯一、入力関数(uu)が同じセンサーを持つべきであるということである。提案するニューラルネットワークの入力値は大きく2つの部分に分かれ、上記の図1Aに示すように、[u(x1),,u(xm)][u(x_{1}), \dots, u(x_{m})]yyである。ニューラルネットワークの構造には制約がなく、論文では性能の優秀さを自慢するために最も簡単なニューラルネットワークである[fully-connected neural networks](FNNs)を使用した。希望に応じて[CNN]、RNNなどの構造を適用でき、アテンションメカニズムを適用することもできると説明している。

まず、トランクネットワークはyyを入力として受け取り、[t1,t2,,tp]TRp[t_{1}, t_{2}, \dots, t_{p}]^{T} \in \mathbb{R}^{p}を出力する。pp個のブランチネットワークは[u(x1),,u(xm)][u(x_{1}), \dots, u(x_{m})]を入力として受け取り、それぞれがbkRb_{k} \in \mathbb{R}を出力する(k=1,2,,pk = 1,2,\dots,p)。これらを数式(1)(1)のように合わせると以下のようになる。

G(u)(y)k=1pbktk=k=1pbk([u(x1),u(x2),,u(xm)])tk(y) G(u)(y) \approx \sum_{k=1}^{p} b_{k}t_{k} = \sum_{k=1}^{p} b_{k}([u(x_{1}), u(x_{2}), \cdots, u(x_{m})]) t_{k}(y)

注目すべきは、トランクネットの最後のレイヤーにも活性化関数が適用されている点だ。上記の数式ではあまり表れていないが、このようなアプローチは「Gu=G(u)Gu = G(u)という関数を級数で近似すること」と解釈できる。適切な関数空間XXが与えられており、その基底{ϕk}\left\{ \phi_{k} \right\}とする。このとき、GuXGu \in Xに対して次のように表現できる。

Gu=k=1bkϕk Gu = \sum_{k=1}^{\infty} b_{k}\phi_{k}

言い換えればtk=ϕk(y)t_{k} = \phi_{k}(y)と考えると、級数のtkt_{k}は基底部分、bkb_{k}は級数の係数部分である。すなわち、DeepONetは「GuGuを直接近似するのではなく、級数に分解して近似する」ということだ。Theorem 1では必要のない部分だが、以下のようにバイアス(定数項)を追加することで一般化性能が向上する。

G(u)(y)k=1pbktk+b0 G(u)(y) \approx \sum_{k=1}^{p} b_{k}t_{k} + b_{0}

実際に実装する際にはppは最低でも10個以上であり、ppが増加するほど計算コストが増加する。そこで論文では、それぞれのbkb_{k}を学習するブランチネットワークを個別に持つ形式(図1C)であるStacked DeepONetと、1つのネットワークで全てのbkb_{k}を学習する形式(図1D)であるUnstacked DeepONetを紹介する。DeepONetに関するすべてのコードはhttps://github.com/lululxvi/deepxdeで確認できるが、著者の他の研究で提案されたすべてのコードが含まれており、希望する部分を見つけるのが少し難しい。

図1Cと図1D

2.2 Data generation

論文では2つの関数空間、ガウスランダム場Gaussian random field(GRF)と[直交多項式空間]を扱う。著者は平均が00であるGRFを使用した。

uG(0,kl(x1,x2)) u \sim \cal{G}(0, k_{l}(x_{1}, x_{2}))

ここでkl(x1,x2)=exp(x1x22/2l2)k_{l}(x_{1}, x_{2}) = \exp (- \| x_{1} - x_{2} \|^{2} / 2l^{2})は共分散カーネルcovariance kernelである。直交多項式空間にはチェビシェフ多項式を選んだ。M>0M > 0であり、TiT_{i}を第1種チェビシェフ多項式とすると、

Vpoly={i=0N1aiTi(x):aiM} V_{\text{poly}} = \left\{ \sum\limits_{i=0}^{N-1} a_{i} T_{i}(x): |a_{i}| \le M \right \}

データセットはai[M,M]a_{i} \in [-M, M]をランダムサンプリングして生成した。このように生成されたデータセットで、それぞれのuuについてルンゲ・クッタ法でODEシステムを解き、有限差分法で2次PDEを解いてリファレンスソリューションを求めた。

3 Number of sensors for identifying nonlinear dynamic systems

このセクションでは、DeepONetで非線形力学システムを解く際に任意の精度ε\varepsilonを達成するためにどのくらいの数のセンサーが必要かを議論する。

4 Simulation results

このセクションでは、まず最も簡単な線形問題ですらFNNよりDeepONetが優れた性能を示すことを確認し、3つの非線形ODEおよびPDE問題に対する結果を示す。すべての問題でオプティマイザは学習率が0.0010.001Adamを使用し、特に明記されていない限りネットワークのサイズは以下の表に示されているものと同じである。

表1と表2

4.1 A simple 1D dynamic system

一次元力学システムは次のように表される。

ds(x)dx=g(s(x),u(x),x),x[0,1]s(0)=0 \begin{align*} \dfrac{ds(x)}{dx} &= g(s(x), u(x), x), \qquad x\in[0, 1] \\ s(0) &= 0 \end{align*}

この問題で目標は任意のuuに対して、ソリューションs(x) on [0,1]s(x) \text{ on } [0,1]を見つけることである。

4.1.1 Linear case: g(s(x),u(x),x)=u(x)g(s(x), u(x), x) = u(x)

まず非常に簡単な場合を考えてみる。

ds(x)dx=u(x),x[0,1]s(0)=0 \begin{align*} \dfrac{ds(x)}{dx} &= u(x), \qquad x\in[0, 1] \\ s(0) &= 0 \end{align*}

この場合、作用素G:usG : u \mapsto sは次のような不定積分作用素である。

G:u(x)s(x)=0xu(τ)dτ G : u(x) \mapsto s(x) = \int_{0}^{x} u(\tau)d\tau

まず比較のために深度と幅を調整しながらFNNでGGを学習するようにした。深度は増やしても性能に大きな影響を与えず、幅が増えると訓練誤差が減少するが、依然として一般化性能(テスト誤差)が改善されることはない(図2)。

図2

一方でDeepONetは訓練誤差とテスト誤差の差がほとんどない(図3A)。バイアスb0b_{0}を追加すると性能が若干向上する。また、Unstacked DeepONetがStacked DeepONetに比べて訓練誤差は大きいが、より重要なテスト誤差は低い。Unstacked DeepONetはパラメーター数が少ないため、より少ないメモリを使用してより高速に学習することができる。

図3

4.1.2 Nonlinear case: g(s(x),u(x),x)=s2(x)+u(x)g(s(x), u(x), x) = −s^{2}(x) + u(x)

この場合では、Unstacked DeepONetとStacked DeepONetを比較することに焦点を当てた。訓練誤差とテスト誤差の相関を見ると、Unstacked DeepONetがより強いことがわかる(図4A)。さまざまな学習率や初期値に対してもUnstackedの方が強い相関を示した(図4B)。

図4

4.2 Gravity pendulum with an external force

このサブセクションでは次のような外力がある振り子運動を扱う。

ds1dt=s2ds2dt=ksins1+u(t)s1(0)=0,s2(0)=0 \begin{align*} \dfrac{ds_{1}}{dt} &= s_{2} \\ \dfrac{ds_{2}}{dt} &= -k \sin s_{1} + u(t) \\ s_{1}(0) &= 0, \quad s_{2}(0) = 0 \end{align*}

続く内容では、DeepONetがこの問題に対してうまく機能することを示し、センサーの数、誤差収束などについて扱う。

4.3 Diffusion-reaction system with a source term

次のような拡散-反応方程式を扱う。

st=D2sx+ks2+u(x),x[0,1],t[0,1] \dfrac{\partial s}{\partial t} = D \dfrac{\partial^{2} s}{\partial^{x}} + ks^{2} + u(x),\qquad x\in [0,1], t\in [0,1] with zero initial/boundary conditions \text{with zero initial/boundary conditions}

前の例と異なり、u(x)u(x)の変数は1次元だが、s(x,t)s(x, t)の変数は2次元である。この場合でもDeepONetがうまく機能することを示す。1つのuuに対するトレーニングデータは以下のような式である。

((u,(x1,t1)),s(x1,t1))((u,(x2,t2)),s(x2,t2))((u,(xp,tp)),s(xp,tp)) \begin{align*} \big( (u, (x_{1}, t_{1})), s(x_{1}, t_{1}) \big) \\ \big( (u, (x_{2}, t_{2})), s(x_{2}, t_{2}) \big) \\ \vdots \\ \big( (u, (x_{p}, t_{p})), s(x_{p}, t_{p}) \big) \end{align*}

(u,(xi,ti))(u, (x_{i}, t_{i}))はDeepONetの入力値であり、s(xi,ti)s(x_{i}, t_{i})は最終出力値である。具体的に、uuはブランチ、(xi,ti)(x_{i}, t_{i})はトランクの入力である。このように構成されたデータが異なるuuごとに生成され、学習に使用される。

5 Conclusion

本論文では非線形作用素を学習するためのDeepONetを提案した。DeepONetはブランチとトランクで構成されており、ブランチは係数を、トランクは基底を学習すると解釈できる。本論文には、テスト誤差に関するさまざまな要因(センサーの数、最大予測時間、入力関数空間の複雑さ、訓練データセットのサイズ、ネットワークのサイズ)の影響に関する分析が含まれている。また、f近似誤差がさまざまな要因にどのように影響を受けるかを理論的に導出し、結果が計算と一致することを示した。

しかし、DeepONetそのものに関する理論的な分析についてはまだ研究すべきことが多く残されている。また、論文ではFNNしか使用していないが、CNNやアテンションメカニズム、あるいはその他の異なるニューラルネットワーク構造/技法との連携についても研究の余地が残されている。