HELLO CYBERNETICS

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

クープマン作用素と非線形状態空間モデルの線形化

 

 

follow us in feedly

はじめに

クープマン作用素は動的システムの研究分野で大きな関心を集めています。クープマン作用素は、非線形システムを線形システムに変換するための強力なツールとして注目されており、機械学習やモデル予測制御などの分野での応用が期待されています。本記事では、クープマン作用素を用いた非線形状態空間モデルの線形近似に焦点を当て、その理論的背景や応用例を紹介します。

概要として本記事におけるクープマン作用素と非線形状態空間モデルの定性的な説明を載せておきます。 まず、クープマン作用素は、非線形な動的システムを適切な関数空間において線形化するために用いられる数学的な概念として登場します。クープマン作用素は、無限次元の線形作用素として表現され、その作用素が適切な関数空間に作用することで、元の非線形システムを線形システムに変換します。例えば非線形な物理的なシステムおよび時間コストの高いシミュレータから得られるデータから、軽量な線形システムを導くことができれば、解析や制御において有用であろうというモチベーションになります。

状態空間モデルは動的システムを表現する方法の一つで、状態変数がダイナミクスを持ち時間発展しており、その状態変数を何らかの方法で逐次観測しているというモデルになります。時系列データからモデルを構築する際に一般性が(ARモデルなどに比べ)比較的高く、柔軟に扱えるモデルとなります。数理的な面では線形状態空間モデルに対する解析が行われている一方で、現実のダイナミクスは非線形であることが多いです。

クープマン作用素を用いることで、非線形状態空間モデルを線形状態空間モデルに近似することができます。この事により、線形システムに対して得られている解析結果や制御手法を適用することができるようになるというメリットがあります。 今回は応用の立場から見たクープマン作用素の基礎的な解説と、具体的な応用例を紹介します。

クープマン作用素と動的システム

動的システムの概要

動的システムは、時間に依存するシステムの振る舞いを記述するために用いられる数学的な概念です。動的システムは状態空間モデルによって表現することができる場合が多々あり、状態空間モデルは非常に広い適用範囲を持ちます。具体的には次のような形式で表現される微分方程式によって定義されます。

$$ \frac{dx(t)}{dt} = f(x(t), u(t)) $$

ここで $x(t)$は時間に依存した状態変数であり、$u(t)$はシステムに対して与えられる外部からの入力です。これを特に状態方程式と呼ぶ場合があります。これに加えて、下記の式

$$ y(t) = h(x(t), u(t)) $$

を観測方程式と呼びます。こちらは時刻$t$において状態変数 $x(t) \in \mathbb R ^ n$ を $ y(t) \in \mathbb R ^ m$ として観測する際の関係式を表しています。入力 $u(t)$ に依存する場合もあるため、このように表記していますが、$y(t) = h(x(t))$ となっている場合もあります。これら2つを合わせて状態空間モデルとされることが多いです。観測が $y(t) = x(t)$ と直接的に可能な場合は状態方程式のみが提示される場合もあるでしょう。一般に $f$ と $h$ はそれぞれ非線形である場合が多いですが、線形である場合には行列で表現され、

$$ \begin {align} \frac{dx(t)}{dt} &= Ax(t) + Bu(t) \\ y(t) &= Cx(t) + Du(t) \end {align} $$

などと表現されます。本記事では、動的システムといった場合にはこれらのように状態空間モデルで表されるものを想定します。また $y(t) = x(t) $ となっている(すなわち各時刻の状態は特に変換されず直接観測される)前提で話を進めていきます。したがって以降は状態変数 $x(t)$ に関するダイナミクスをどう取り扱うか、という問題だけに焦点を当てます。

クープマン作用素

クープマン作用素は、無限次元の線形作用素であり、適切な関数空間に作用することで、元の非線形システムを線形システムに変換します。クープマン作用素 $K$ は、次のように定義されます。

$$ K: \mathbb F → \mathbb F $$

ここで、$F$ は適切な関数空間です。クープマン作用素は、次のような性質を持ちます。

$$ K\varphi (x(t)) = \varphi (f(x(t), u(t))) $$

ここで、$\varphi: \mathbb R ^ n → \mathbb R$ は適切な基底関数です。この性質は、クープマン作用素が状態遷移関数 $f$ によって引き起こされる状態空間の時間発展を捉えることができることを示しています。

クープマン作用素による線形化

コンピュータでの応用を考える上では、状態方程式が離散化されているものを考えていくことにしましょう。上記の式だけでは少し分かりづらいですが、離散化された式で見ていくことで少しクリアになると思われます。状態方程式を

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

という式で書くことにして、再度クープマン作用素の性質を見てみましょう。

$$ K\varphi (x _ t) = \varphi (f(x _ t, u _ t)) $$

$f$ の意味は状態 $x _ t$ が $x _ {t + 1} $ と時を進める演算になっていることに注意してください。今、もとの状態方程式の両辺に適当な $\varphi$ を被せてやることを考えると

$$ \varphi (x _ {t+1}) = \varphi (f(x _ t, u _ t)) $$

となります。これとクープマン作用素の性質の式を見比べると、左辺に関して

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

となっています。これが、クープマン作用素が状態の時間発展を捉えていると表現した理由になります。ただし、何らかの基底関数 $\varphi$を介していることに注意しましょう。これがどのように選定されるべきかは後述します。いまこの表現を獲得したことに関する重要な成果は、見かけ上、非線形関数 $f$ がひとまず消えており、勝手に選んだ $z _ t = \varphi (x _ t) $ を新たな状態変数のようなものだと考えたときに、関数空間で状態方程式

$$ z _ {t+1} = K (z _ t) $$

が出来上がっているということになります。ここで、クープマン作用素 $K$ は線形作用素です。

$$ K(\alpha \varphi + \beta \psi ) = \alpha K \varphi + \beta K \psi $$

となっているということです。

まとめ

まとめると、クープマン作用素 $K$ を用いて、有限次元の非線形状態空間モデル $x _ {t+1} = f(x _ t, u _ t)$ が関数空間(無限次元)の線形状態空間モデル $ \varphi (x _ {t+1}) = K (\varphi (x _ t)) $ にすり替えることができた。ということになります。ただし、こんなことが可能なのは、 $\varphi$ によって $f$ が何らかの方法で表現されているからにほかなりません。 実際、状態空間モデルをすり替えていく過程で、$ \varphi (x _ {t+1}) = \varphi (f(x _ t, u _ t)) = K (\varphi (x _ t)) $ と $\varphi$ が一枚噛んでいます。こちらをどのように構成すべきかを次から見ていきます。

クープマン作用素の固有関数

クープマン作用素の基底関数を選ぶ例

一般に、基底関数をどのように選ぶかでクープマン作用素によって作られる新しい状態空間モデルの表現は変わると考えられます。この基底関数の選び方はどのようにすればよいのでしょうか。 簡単な例として、まず線形状態空間モデルを考えます。

$$ x _ {t+1} = A x _ t $$

ここで基底関数 $\varphi (x) = u ^ T x$ と選びます。ここで $u$ は $A$ の固有ベクトルとしてしまいます。すなわち、状態変数 $x$ に対して行列$A$ の固有ベクトルで内積を取った値を新たな状態変数として扱うという例です。クープマン作用素を用いると

$$ K \varphi (x _ t) = \varphi (Ax _ t) = u ^ T A x _ t = \lambda u ^ T x _ t $$

と、行列 $A$ の固有値 $\lambda$ を用いて表現ができます。最後の式に $u ^ T x _ t$ が出現したため、これに対して選んだ基底関数 $\varphi(x) = u ^ T x $ を戻してやると

$$ K \varphi (x _ t) = \lambda \varphi(x _ t) $$

となっていることに注目しましょう。今、勝手に基底関数として状態空間モデルの時間発展を支配する $A$ の固有ベクトルを用いました。そうすることで、上記の式は、クープマン作用素 $K$ の固有値が $\lambda$ で $\varphi$ はその固有関数であるように見ることができたのです。基底関数の選び方には任意性があるはずですが、ここでは、最初から$\varphi$ としてクープマン作用素の固有関数を選択することにし、状態空間表現を獲得する方法を見ていきます。

クープマン作用素の固有関数

まず、離散時間のクープマン作用素による状態空間モデルは下記のようになっていました。

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

ここでクープマン作用素の固有関数を取り扱うことにします。作用素 $F$ の固有関数$\psi$とは $F\psi = \lambda \psi$ が成り立つようなものを指します。ここで $\lambda$ は複素数です。言葉で表現すると$F$ を関数 $\psi$ に作用させたときに、偶然、適当な定数倍 $\lambda \psi$ になってくれてしまうような、$F$ から見て振る舞いのキレイな関数のことを指します。

ここで、勝手にクープマン作用素の固有関数こそが $\varphi$ であるということにすると、$K \varphi = \lambda \varphi$ と書かれているはずであり、これは状態空間モデルが

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

と表現されると仮定していることになります。こうすることで、状態空間モデルからクープマン作用素 $K$ が見かけ上消えて、ついに基底関数 $\varphi$ なるものを設計することがだけが残りました。線形状態空間モデルの例で見たような、元のダイナミクスに関する話はここではしていません。なので、今のところ元の状態空間モデルのダイナミクス $f$ がどのように反映されるのかは明らかではありません。無論、クープマン作用素を介して元の状態空間モデルの時間発展 $f$ とクープマン作用素の固有関数であるという仮定によって固有値 $\lambda$ とともに $\varphi$ にすべての情報が集約されたことによって、新しい状態空間モデルが表現されていることになります。これらのことを考慮した上でこのクープマン作用素の固有関数 $\varphi$ について考えていきましょう。

元の状態空間モデルと固有関数の関係

基底関数をクープマン作用素の固有関数で選ぶということにした場合、

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

という式が得られました。これは連続時間の状態方程式

$$ \frac{dx(t)}{dt} = f(x(t)) $$

で同様のことを考えた際、下記の式が得られることとなります。

$$\frac{d}{dt} \varphi (x(t)) = K (\varphi (x (t)) = \lambda \varphi (x(t))$$

この式の左辺の微分を定義どおりに計算すると元の状態方程式と合わせて $$ \nabla \varphi (x (t)) \cdot \frac{d}{dt} x(t) = \nabla \varphi (x) \cdot f(x) $$ と書くことができます。結果として固有関数 $\varphi$ と元の状態方程式 $f$ との関係式として下記の微分方程式を得ることができます。

$$ \nabla \varphi (x) \cdot f(x) = \lambda \varphi (x) $$

すなわち、非線形の状態方程式をクープマン作用素の固有関数を介して無限次元線形の状態方程式に焼き直した場合、上記の関係式によって元の非線形状態空間モデルの情報を固有関数に持たせて取り扱っていることになるということです。

まとめ

  • 非線形状態空間モデルは適当な基底関数とクープマン作用素によって線形化される
  • 基底関数としてクープマン作用素の固有関数を選ぶことができる
  • 固有関数によって元の非線形状態空間モデルとの関係性が維持され、固有関数によって得られる値を新たな状態変数として線形システム解析の結果を応用できる

最後に

今までは、基底関数を $\varphi$ を一つだけ選ぶように書いていましたが、実際には基底関数を複数選ぶことができます。例えば $(\varphi _ 1(x), \varphi _ 2(x), ..., \varphi _ d(x)) ^ T$ と選ぶことで、$d$ 次元の新たな状態変数を扱うこととなります。簡単な例に戻ると、線形システムの時間発展が行列 $A$ で表現されるならば、その固有ベクトルは最大で行列の次元の数だけ独立なものが得られる可能性があり。そういった場合は、固有関数を $(u _ 1 ^ T x, u _ 2 ^ T x, ..., u _ d ^ T x) ^ T$ と作れるという具合です。

基底関数をクープマン作用素の固有関数と設定してしまう場合はどうでしょう。固有関数は無限個存在存在するはずで、そのすべてを扱うことはコンピュータ上では不可能となってしまいます。こういった場合、特にダイナミクスを表現することに効いている固有関数を有限個取り出したいというモチベーションが生まれてきます。次回以降は、その具体的な方法等について解説してみたいと思います。

続編に下記の記事があります。

www.hellocybernetics.tech

余談ですが、ChatGPTに、今回の記事のアウトラインを書いてもらうことを試みました。結果として、「はじめに」の一部は採用しつつそれ以外はすべて書き直すこととなりました。んー、流石に全部任せるのは無理ですよね。