HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

クープマンモード分解とデータドリブン手法の紹介

 

 

follow us in feedly

はじめに

本記事では下記の内容を前提に話します。

www.hellocybernetics.tech

クープマン作用素は非線形状態空間モデルを無限次元の線形状態空間モデルとして表現できる重要なツールでした。 具体的には

$$ x _ {t+1} = f(x _ t) $$

という形式を適当な基底関数 $\varphi (x)$ を用いて

$$ \varphi (x _ {t+1}) = K \varphi(x _ t) $$

と表現でき、基底関数をクープマン作用素の固有関数であるということにすると、

$$ \varphi (x _ {t+1}) = K \varphi(x _ t) = \lambda \varphi(x _ t) $$

と表現できるのでした。ここで $\nabla \varphi (x) \cdot f(x) = \lambda \varphi (x)$ という関係性で、固有関数と固有値、および元のダイナミクス $f$ の情報が結ばれることになります。

さて、本来は $\varphi(x)$ は適切に選ばれるべき基底関数なのですが、仮に固有関数で表現できれば、非常に簡潔な形にできるというのがこれまでの話です。特に基底関数の選び方次第では直接的にクープマン作用素の固有関数 と固有値によって線形状態空間表現を得られる例を、元のダイナミクスが線形の場合で確認しました。一般の非線形状態空間モデルに対して、ピタッとクープマン作用素の固有関数との関係を利用することは難しいです。そこで今回は適当に選ばれた基底関数をこのクープマン作用素の固有関数によって表現する方法を紹介していきます。

クープマンモード分解

準備

これ以降は、多次元ベクトルはボールド体で $\mathbf x$ などと表記し、スカラーはこれまで通り表記します。クープマンモード分解では、まず固有関数の1つを $\varphi _ i (\mathbf x)$ と表現しておきます。非線形状態空間モデルは $\mathbf x _ {t+1} = f (\mathbf x _ t)$ であるとします。今、適当な基底関数 $g(\mathbf x)$ を並べて作った新しい多次元の状態変数

$$ {\mathbf g} ({\mathbf x}) = (g _ 1 ({\mathbf x}), g _ 2 ({\mathbf x}), ..., g _ d ({\mathbf x})) ^ T $$

に対してクープマン作用素の固有関数と固有値で表現する方法を得るのがクープマンモード分解になります。

クープマンモード分解

クープマンモード分解では、ある基底関数 $g _ i (\mathbf x)$ に対して

$$ g _ i (\mathbf x) = \sum _ {j=1} ^ \infty v _ {ij} \varphi _ j (\mathbf x) $$

と表現することを目指します。ここで $\varphi _ j$ はクープマン作用素の固有関数のうちの1つです。もしも、このように表現することが叶えば時間発展は

$$ \begin {align} g _ i ({\mathbf x} _ {t+1}) &= \sum _ {j=1} ^ \infty v _ {ij} \varphi _ j ({\mathbf x} _ {t+1}) \\ &= \sum _ {j=1} ^ \infty v _ {ij} K \varphi _ j ({\mathbf x} _ {t}) \\ &= \sum _ {j=1} ^ \infty v _ {ij} \lambda _ j \varphi _ j ({\mathbf x} _ {t}) \\ &= \sum _ {j=1} ^ \infty v _ {ij} \lambda _ j ^ t \varphi _ j ({\mathbf x} _ {1}) \\ \end {align} $$

と表されることになります。ここで関数空間を二乗可積分関数の空間であるということに絞ると、クープマン作用素の固有関数は互いに直交するようになります。この場合は(フーリエ変換のような形式で)、$\mathbf v _ j$ の各成分を下記のように表現できます。

$$ v _ {i,j} = \int _ {\mathbf x} g _ i (\mathbf x) \varphi (\mathbf x) d \mathbf x $$

と表されることとなり、クープマン作用素の固有関数を結合するための係数 $v _ {i,j}$が求められるようになりました。

ここで、すべての基底関数を一気に取り扱うために

$$ \mathbf g (\mathbf x) = \sum _ {j=1} ^ \infty \mathbf v _ {j} \varphi _ j (\mathbf x) $$

と表記されることもあります。ここで $\mathbf v _ j = (v _ {1, j}, ..., v _ {d, j}) ^ T$ です。 $d$ は作った基底関数の数になります。この形式では時間発展は下記のように書かれます。

$$ \begin {align} \mathbf g ({\mathbf x} _ {t+1}) &= \sum _ {j=1} ^ \infty \mathbf v _ {j} \varphi _ j ({\mathbf x} _ {t+1}) \\ &= \sum _ {j=1} ^ \infty \mathbf v _ {j} \lambda _ j ^ t \varphi _ j ({\mathbf x} _ {1}) \\ \end {align} $$

行列 $\mathbf v _ j $は基底関数 $g _ j$ に対するクープマンモードと呼ばれます。

まとめ

クープマンモード分解によって基底関数は、クープマン作用素の固有値と固有関数、およびクープマンモードによって表現されるようになりました。また、これにより時間発展はクープマン作用素の固有値を繰り返し掛けるという操作に置き換わっています。一方でまだ具体的にクープマンモードや固有関数および固有値を求める方法は定かではありません。 ここまでのまとめとしては、

  • 非線形状態空間モデルが基底関数とクープマン作用素によって無限次元線形状態空間モデルに変換できる。
  • クープマン作用素を用いて、基底関数にクープマン作用素の固有関数を選ぶと時間発展を $$ \varphi(\mathbf x _ {t+1}) = K \varphi(\mathbf x _ t)$ = \lambda \varphi(\mathbf x _ t )$$ と単純な形式で表現できる
  • 任意に選んだ基底関数はクープマン作用素の固有関数と固有値によって展開することが可能。すなわち、基底関数を上記の結果で展開して、単純な形式の線形結合で $$ g _ i ({\mathbf x} _ {t+1}) = \sum _ {j=1} ^ \infty v _ {ij} \lambda _ j \varphi _ j ({\mathbf x} _ {t})$$ によって表現できる。
  • 基底関数を複数選び新たな特徴ベクトルとすると$\mathbf v _ j = (v _ {1, j}, ..., v _ {d, j}) ^ T$ をクープマンモードと呼び $$ \mathbf g ({\mathbf x} _ {t+1}) = \sum _ {j=1} ^ \infty \mathbf v _ {j} \lambda _ j ^ t \varphi _ j ({\mathbf x} _ {1}) $$ と時間発展を記述できる。
  • このときのクープマンモードに関しては、クープマン作用素の固有関数と選んだ基底関数の内積によって求めることができ $$ v _ {i,j} = \int _ {\mathbf x} g _ i (\mathbf x) \varphi (\mathbf x) d \mathbf x $$ と表される。

非線形性の困難を、クープマン作用素の固有関数や固有値を求めるという問題に変換して、これを解決しさえすればダイナミクスが初期値を与えて求められるというところまで来ました。

最後に

データドリブン手法へ

さて、適当な基底関数 $g _ i$ を複数選択したとき、それをクープマン作用素によって固有関数で展開できることまで確認しました。実際に、この固有関数を求める方法は複数存在します。例えば固有値を既知とした場合にクープマンモードを求める方法としてはFFTを介する手法があります。固有値が未知の場合がほとんどであることを考えると、元の状態空間モデルと思わしきシステムから時系列データを獲得して、固有値と固有関数、およびクープマンモードを推定する必要が出てきます。その際にはアーノルディ型アルゴリズムと呼ばれる手段を用いることができます。他にもDynamic Mode Decomposition (DMD) やベクトルプローニ解析などがあります。DMDは特に、データからの推定問題を回帰問題として記述するため、機械学習分野では馴染みのある方法に感じることでしょう。

また、固有関数は定義上は無限個存在しますが、スペクトル分解を行った場合、(フーリエ級数展開でもそうであるように)重要なスペクトルはスパースである場合が多いです(フーリエ級数展開の場合、全く予測不能なホワイトノイズの場合はスペクトルが一様になるが、意味のある信号であればスペクトルはどこかに局在している)。そのことを考えると、コンピュータ上の都合で無限個の基底が扱えないのはさほど問題ではありません。実用上、有限個の基底で打ち切ってしまっても有用でしょう。

また、データにはノイズが含まれていることも考えられるため、最初から正則化を掛ける前提の手法も存在します。特にスパース回帰を用いた手法としてはSparse Identification Nonlinear Dynamics (SINDy) と呼ばれる方法があります。

ニューラルネットワークによる表現

また、具体的にクープマン作用素を用いて非線形状態空間モデルを線形状態空間モデルに変換するかはさておき、「上手に基底関数を選びクープマン作用素を用いることができれば線形化が可能である」という事実は、ある手法の妥当性を担保することにも使えます。例えば、とある非線形動的システムからサンプリングされるデータを使い、予測モデルを構築したいと考えたとき、明示的に

$$ \mathbf g ({\mathbf x} _ {t+1}) = \sum _ {j=1} ^ \infty \mathbf v _ {j} \lambda _ j ^ t \varphi _ j ({\mathbf x} _ {1}) $$

と表現を獲得することを目指さなくとも、モデルの表現力としては複素数 $\lambda _ j $ と何らかの非線形関数 $\varphi_ j $ および行列 $\mathbf v _ {j}$ によって十分にデータから表現が可能であることを示唆しています。

例えば、$\varphi _ j$ はMLPを用いてデータから獲得させることにしておいたら、その後は行列計算と複素数でのスカラー倍で表現ができるはずです。構造としては、MLP+複素RNNで十分にクープマン作用素を用いた無限次元線形状態空間モデルを表現できることが期待できます。このとき、MLPは十分ワイドにしておくことで、無限個の基底を十分な数の有限個の基底で済ませることになります。DMDやSINDyなどと異なり、固有関数を表現する仮定で固有値相当の値が獲得できないため、あとから何個の基底で打ち切るかを決めることはできず、NNの設計段階で決め打ちが必要かもしれませんが、近年のNNであれば、必要以上の基底を想定したとしても適切な正則化によって十分に学習可能でしょう。特にこのことに着目したと思われるニューラルネットワークの手法として、ごく最近、Linear Recurrent Unit という層がDeepmindより提案されました。

https://arxiv.org/abs/2303.06349

次回以降は、DMDやSINDyおよびLRUを、適当な動的システムに対して実際に動かしてみるということをしてみたいと思います。