はじめに
今年4月、Kolmogorov-Arnold Networks(KAN)という新しい機械学習手法が発表されました。この記事では、KANがどんなものか、これまでの深層学習とどう違うかを説明したいと思います。
一般的な深層学習
現在深層学習と呼ばれている手法は多層パーセプトロン(MLP)という手法が用いられています。$L$層の隠れ層と入力層($l = 0$)を含むある層($l = \lbrace 0, 1, 2, ..., l \rbrace$)に$J_l$個のニューロンを持つMLPにおいて,第$l$層$j_l$番目のニューロンの状態$h_{l, j_l}$から第$l + 1$層$j_{j + 1}$番目のニューロンの状態$h_{l + 1, j_{l + 1}}$への計算は重み$w_{j_l, j_{l + 1}}$と層全体のバイアス$b_l$、各層$l$について固定された活性化関数$\phi_l$を用いて以下のように表されます。
h_{l + 1, j_{l + 1}} = \phi \left( \sum_{j_l = 1}^{J_l} w_{j_l, j_{l + 1}} h_{l, j_l} + b_l \right)
簡単に言うと、MLPは線形関数($y = ax + b$)をたくさん配置し複雑な関数をフィッティングしようという考え方です。線形関数だけでは複雑な関数をフィッティングできませんが、活性化関数を非線形にすることで複雑な関数もフィッテングすることができます。
KANの概要
KANはKolmogorov-Arnold表現定理という理論が基になっています。これは「特定の条件を満たす多変量関数は、1変量関数だけで表現することができる」というものです。まず、$J_0$個の入力$\boldsymbol{x} = (x_1, x2, ..., x_{J_0})$を取る滑らかな多変数連続関数$f$があるとします。この関数$f$の基礎的な構造は次式のようになります。
f(\boldsymbol{x}) = \sum_{q = 1}^{2 J_0 + 1} \Phi_q \left(\sum_{p = 1}^{J_0} \phi_{q, p} (x_p) \right)
つまり、内部関数$\phi_{q, p}$と外部関数$\Phi_q$の合成関数で$f$が表現できるということで$p$および$q$は元の入力変数の数$J_0$に依存して上限が決定されます。
KANは上記の理論をベースにMLPを発展させた手法と言えます。
KANのアーキテクチャは上図1のようになっています。先程の数式では内部関数と外部関数は元の入力変数の数$J_0$に依存すると言いましたが、MLPがパーセプトロンを多層化させたように、Kolmogorov-Arnold表現定理のネットワークを多層化させたことがKANの大きな特徴です。
MLPとの違いを説明すると、MLPは非線形の活性化関数を用いて線形関数の重みを学習しますが、KANでは活性化関数そのもの学習します。なお、活性化関数の学習にはB-splineを用います。
KANでSymbolic regressionしてみた
Symbolic regressionは関数同定、すなわちデータから数式を推定することです。今回はKANのライブラリであるpykanのExampleに習ってscikit-learnのmake_moonsを用いました。
結果は以下の通りです。
-0.9652x_2 + 0.4782 \sin(3.0488x_1 + 1.5835) + 0.7081 \quad sample = 1000, noise = 0.0
-0.8437x_2 + 0.3822 \sin(3.1058x_1 + 1.6229) + 0.7081 \quad sample = 1000, noise = 0.1
-0.8437x_2 − 0.6781x_1 + 0.5915 \quad sample = 1000, noise = 0.2
-0.9627x_2 - 0.5081 \sin(3.0488x_1 + 7.8304) + 0.7081 \quad sample = 100, noise = 0.0
ノイズとデータ数を変えていくつか計算してみました。特にノイズが大きくなると数式がガラッと変わってしまいます。データ整理の大切さはKANに対しても変わらないのでしょう。
ひとまず、KANを用いて関数同定ができることを確認しました。今後は自然現象のデータを用いて関数同定を行ってみたいと思います。
-
新美潤一郎:Kolmogorov–Arnold Networkのマーケティング解析への応用可能性の検討、10.51094/jxiv.893、2024. ↩