Kolmogorov–Arnold Networks (KAN) とは?──なぜニューラルネットにフーリエ級数が入るのか

ニューラルネットワークといえば、長らく MLP(多層パーセプトロン) が基本部品でした。入力に重みを掛けて足し、固定の活性化関数(ReLUなど)に通す——この繰り返しです。これに対し「重みを数ではなく関数にしたら?」という大胆な発想で提案されたのが Kolmogorov–Arnold Networks (KAN) です(Liu et al., ICLR 2025)。

KANを調べると、しばしば「フーリエ級数」や「B-spline」が出てきて戸惑います。「なぜニューラルネットの中にフーリエ級数が入るの?」——本記事はこの疑問にきちんと答えます。結論を先に言うと、KANの『重み』は1変数関数で、その1変数関数を“フーリエ級数の係数”として表現するからです。順を追って見ていきましょう。

本記事の内容

  • MLP と KAN の違い(重みがスカラーか、関数か)
  • 背景にある Kolmogorov–Arnold 表現定理
  • なぜフーリエ級数が入るのか(1変数関数を基底の係数で学ぶ)
  • B-spline と フーリエ、2つの基底の違い
  • PyTorchで「1本のKANエッジ」を学習する

前提・関連記事

画像なし
ニューラルネットワークの基礎
MLP・活性化関数・誤差逆伝播。KANと対比する土台。
画像なし
フーリエ級数とは
関数をsin/cosの和で表す。KANにフーリエが入る理由の土台。
KAN-AD:KANで滑らかな正常を学ぶ時系列異常検知
KANの応用例。フーリエ基底版KANの実例。

MLP と KAN の違い

まずMLPを思い出します。MLPは、辺(エッジ)に学習可能な重み(スカラー) を持ち、点(ノード)に固定の活性化関数を置きます。各層は「線形変換 → 固定の非線形関数」という形です。

$$ \begin{equation} \mathrm{MLP}(x) = (W_3 \circ \sigma_2 \circ W_2 \circ \sigma_1 \circ W_1)(x) \end{equation} $$

ここで $W_i$ は学習する重み行列(中身は数)、$\sigma_i$ は固定の活性化関数です。学習で動くのは「数(線形の重み)」だけで、非線形性 $\sigma$ は人間が決め打ちした固定の形です。

KANはこれを裏返します。辺に「学習可能な1変数関数」 を置き、点では単に足し算するだけです。

$$ \begin{equation} \mathrm{KAN}(x) = (\Phi_3 \circ \Phi_2 \circ \Phi_1)(x) \end{equation} $$

$\Phi_i$ は「1変数関数の集まり」で、非線形な部分そのものを学習します。線形の重み行列は一切ありません。

MLPとKANの違い(辺の重みがスカラーか関数か)

図のとおり、MLPの辺は1本につき「1つの数」ですが、KANの辺は1本につき「1つの曲線(関数)」です。論文の比較図がこの対比を端的に示しています。

MLP vs KAN(論文Fig.0.1)

出典: Z. Liu et al. “KAN: Kolmogorov–Arnold Networks”, ICLR 2025 (arXiv:2404.19756), Fig.0.1.

MLP(左)は「線形・学習可能」な重みと「非線形・固定」の活性化。KAN(右)は「非線形・学習可能」な関数を辺に置き、ノードは和だけ。なぜこんな形が正当化されるのか——その根拠が、名前の由来でもある定理です。

Kolmogorov–Arnold 表現定理

KANの理論的な土台は、1957年の Kolmogorov–Arnold 表現定理です。これは「どんな多変数の連続関数も、1変数関数の足し算だけで書ける」という驚くべき主張です。

$$ \begin{equation} f(x_1, \dots, x_n) = \sum_{q=1}^{2n+1} \Phi_q\!\left( \sum_{p=1}^{n} \phi_{q,p}(x_p) \right) \end{equation} $$

Kolmogorov-Arnold表現定理の直感

ここで $\phi_{q,p}$ と $\Phi_q$ はすべて1変数関数です。つまり、本質的に必要な多変数演算は「足し算」だけで、残りはすべて1変数関数で表せる、ということです。

これは機械学習にとって朗報に見えます——高次元の関数を学ぶ問題が、有限個の1変数関数を学ぶ問題に分解できるのですから。ただし定理が保証する1変数関数は、非常にギザギザで(フラクタル的で)実際には学習しにくい場合があります。そこでKANは、定理をそのまま使うのでなく、1変数関数を「滑らかで学習しやすい形」に表現し直し、層を深く広く積めるよう一般化しました。

拠り所が違う:普遍近似定理 vs 表現定理

MLPとKANは、「なぜ任意の関数を表せるのか」の拠り所が異なります。MLPの根拠は 普遍近似定理で、「隠れ層を十分広くすれば、$\sum_i a_i\,\sigma(w_i\cdot x + b_i)$ の形でどんな連続関数も近似できる」と言います。固定の活性化 $\sigma$ をたくさん並べることで表現力を得る、という発想です。

一方KANの根拠は Kolmogorov–Arnold表現定理で、「1変数関数そのものを賢く選べば、その和で多変数関数を厳密に書ける」と言います。MLPが「固定の部品を数で大量に組む」のに対し、KANは「部品(非線形性)自体を学習する」。だから、うまくいけば少ない部品(パラメータ)で済むのです。

ここで核心の問いに来ます。「1変数関数を学習可能な形で表す」とは、具体的にどうするのでしょうか。

なぜニューラルネットにフーリエ級数が入るのか

ここが本記事の山場です。MLPの重みは「1つの数」なので、勾配降下でそのまま学習できます。でもKANの重みは「関数」です。関数は無限の自由度を持つので、「関数そのもの」を直接勾配降下で動かすことはできません。

そこで使うのが 基底展開 という考え方です。1変数関数 $\phi(x)$ を、あらかじめ決めた固定の基底関数の重み付き和として表します。

$$ \begin{equation} \phi(x) = a_0 + \sum_{k=1}^{N} \big( a_k \cos(kx) + b_k \sin(kx) \big) \end{equation} $$

この右辺が、まさに フーリエ級数 です。フーリエの定理により、たいていの1変数関数は sin と cos の和で(任意の精度で)表せます。すると——

「1変数関数 $\phi$ を学ぶ」=「フーリエ係数 $a_k, b_k$ を学ぶ」

になります。係数は有限個の数なので、ふつうに勾配降下で学習できます。ニューラルネットに「フーリエが入る」のは何も神秘的なことではなく、関数という無限自由度の対象を、基底の有限個の係数(=学習パラメータ)に変換するための道具として使っているだけなのです。

1変数関数を学ぶ=フーリエ係数を学ぶ

左の図は、ある目標の1変数関数を、フーリエ項を1→3→8と増やしながら近似したものです。項数(係数の数)を増やすほど、目標の形に近づきます。右は基底関数 $\sin(kx)$ そのもの。固定の波(基底)を、係数で足し合わせて任意の形を作る——これが「関数を学ぶ」の正体です。

コードで見ると一行です。フーリエ基底を並べ、係数を最小二乗で求めれば(学習すれば)、目標の関数が再現できます。

import numpy as np
T = 200; x = np.linspace(0, 2*np.pi, T)
g = np.sign(np.sin(x))*0.8 + 0.3*np.sin(3*x)        # 学びたい1変数関数

def fit_fourier(g, x, N):
    cols = [np.ones_like(x)]                         # 固定の基底 [1, sin kx, cos kx]
    for k in range(1, N+1):
        cols += [np.sin(k*x), np.cos(k*x)]
    B = np.stack(cols, 1)
    coef, *_ = np.linalg.lstsq(B, g, rcond=None)     # ← 学ぶのは係数だけ
    return B @ coef, coef

approx, coef = fit_fourier(g, x, N=8)
print("学習パラメータ(係数)の数:", len(coef))          # 17 = 1 + 2*8

学んでいるのは17個の係数だけ。これがKANの「辺の重み」の中身です(フーリエ基底を使う場合)。

B-spline と フーリエ、2つの基底

「1変数関数 = 基底の係数」と分かれば、次の疑問は「どの基底を使うか」です。KANの原論文は B-spline(区分多項式)を使い、KAN-ADのように フーリエ級数を使う派生もあります。両者の性格は対照的です。

B-spline基底とフーリエ基底

  • B-spline:各基底が局所的な山で、特定の区間だけに効きます。細かい形を柔軟に表せる反面、局所のノイズにも食いつきやすい。グリッド(節点)の設計が必要です。
  • フーリエ:各基底が大域的な波で、全域に広がります。滑らかで周期的なパターンに強く、局所ノイズに頑健。グリッド設計が要りません。

どちらが良いかは対象次第です。たとえば時系列の異常検知に使うKAN-ADは、「正常は滑らか・異常は局所的」という性質を活かすため、あえて大域的なフーリエ基底を選んでいます。

PyTorchで「1本のKANエッジ」を学習する

最後に、KANの最小単位——1本の辺(学習可能な1変数関数)——を実際に学習させてみます。辺の関数をフーリエ係数でパラメータ化し、目標の形に勾配降下で合わせます。

import torch, numpy as np
x = torch.linspace(-np.pi, np.pi, 200)
target = torch.tanh(2*x) + 0.3*torch.sin(4*x)        # この活性化を学ばせたい
N = 6
a = torch.zeros(N+1, requires_grad=True)             # cos係数 + 定数
b = torch.zeros(N,   requires_grad=True)             # sin係数

def phi(x):                                          # 学習可能な1変数関数(フーリエ表現)
    out = a[0]*torch.ones_like(x)
    for k in range(1, N+1):
        out = out + a[k]*torch.cos(k*x) + b[k-1]*torch.sin(k*x)
    return out

opt = torch.optim.Adam([a, b], lr=0.05)
for _ in range(400):
    loss = ((phi(x) - target)**2).mean()
    opt.zero_grad(); loss.backward(); opt.step()
print("最終MSE:", round(float(((phi(x)-target)**2).mean()), 4))   # ≈ 0.036
print("パラメータ数:", a.numel() + b.numel())                      # 13 = (6+1)+6

1本のKANエッジをフーリエ係数で学習

学習前(係数ゼロ=平坦)から、わずか13個のフーリエ係数を勾配降下で動かすだけで、目標の活性化の形(MSE≈0.036)にぴたりと合いました。これがKANの辺1本がやっていることです。MLPの辺が「1つの数」だったのに対し、KANの辺は「数個の係数で表された1つの関数」を学んでいる——この違いがKANの表現力と解釈性の源です。

KANの特徴

最後にKANの性格を簡単にまとめます。

  • 解釈性:辺の関数を直接プロットして「何を学んだか」を目で見られる。記号回帰(数式の再発見)にも使える。
  • パラメータ効率:1変数関数を少数の係数で表すため、小さなKANが大きなMLPに匹敵することがある(とくに低次元の科学的関数)。
  • 得意・不得意:低次元の関数近似・科学計算で強み。大規模・高次元(画像・言語)ではMLPほど確立しておらず、研究途上です。

まとめ

Kolmogorov–Arnold Networks (KAN) を基礎から見てきました。

  • KANとは:辺の重みをスカラーから「学習可能な1変数関数」に置き換えたネットワーク。ノードは和だけ
  • 根拠:Kolmogorov–Arnold表現定理(多変数関数=1変数関数の和)
  • なぜフーリエ?:1変数関数を学ぶには、固定の基底の係数として表す必要がある。フーリエ級数(sin/cosの和)はその代表的な選択で、「関数を学ぶ=係数を学ぶ」に変換する道具
  • 基底の選択:B-spline(局所・細かい)か フーリエ(大域・滑らか)か

「重みを数から関数へ」という一手が、表現力・解釈性・効率の新しいトレードオフを開きました。フーリエ級数は、その『関数の重み』を学習可能にするための、ごく自然な部品なのです。

KAN-AD:KANで滑らかな正常を学ぶ時系列異常検知
フーリエ基底版KANの実応用。本記事の続きに。
画像なし
フーリエ級数とは
sin/cosの和で関数を表す基礎。KANの基底の土台。
画像なし
ニューラルネットワークの基礎
MLP・活性化・逆伝播。KANと対比する土台。

参考文献

  • Z. Liu, Y. Wang, S. Vaidya, F. Ruehle, J. Halverson, M. Soljačić, T. Y. Hou, M. Tegmark. “KAN: Kolmogorov–Arnold Networks.” ICLR 2025 (arXiv:2404.19756).
  • J. Zhou et al. “KAN-AD: Time Series Anomaly Detection with Kolmogorov–Arnold Networks.” ICML 2025 (arXiv:2411.00278).