KAN-AD:Kolmogorov–Arnold Networksで「滑らかな正常」を学ぶ時系列異常検知

時系列の異常検知でよくある失敗は、モデルが細かい揺れまで丁寧に学びすぎることです。予測ベースのモデルは、訓練データに紛れたノイズや局所的なスパイクまで「正常」として覚えてしまい、いざテストで似た形が来たときに異常を見逃します。

KAN-AD(Zhou et al., ICML 2025)の発想は逆転の発想です。

正常な時系列は「滑らか」で、異常は「局所的な山や谷」として現れる。だから、あえて滑らかな関数だけで正常を近似すれば、異常は近似しきれず残差に残る。

この「滑らかさ」を表現する道具として、いま注目の Kolmogorov–Arnold Networks(KAN) を使います。ただしKANの素の実装(B-spline)は局所的すぎて異常まで拾ってしまうので、KAN-ADは打ち切りフーリエ級数に置き換えます。結果、わずか数千パラメータ(MSLで4,491個)で、大型モデルを上回る精度(平均Best-F1 0.9076)を、しかも高速に達成します。

本記事では、KAN-ADの骨子——なぜ滑らかさが効くのか、KANをどう作り替えたか、3段階のパイプライン——を、論文の図とコードで分かりやすく追います。

本記事の内容

  • なぜ「滑らかな正常」を学ぶと頑健なのか
  • KAN と KAN-AD の違い(B-spline → フーリエ級数)
  • 3段階パイプライン(mapping → reducing → projection)
  • PyTorch/NumPyでの最小実装と、項数と頑健性の関係

前提・関連記事

時系列異常検知の深掘りサーベイ
手法分類と評価。KAN-ADの位置づけが分かる。
Anomaly Transformer:関連乖離のアーキテクチャ
KAN-ADが比較対象にした代表手法(4.8Mパラメータ)。

なぜ「滑らかな正常」を学ぶのか

KAN-ADの土台にある観察はシンプルです。正常な系列は滑らかで、異常は局所的な逸脱(山・谷)として現れる。だから、正常を「滑らかな関数」で近似すれば、異常はその近似からはみ出します。

これを実際に見てみましょう。スパイク(局所異常)とノイズを含む窓に対し、(1) 少数のフーリエ項で滑らかに近似した場合と、(2) 多数の項で細かく近似した場合を比べます。

滑らかなフーリエ近似が局所異常を残差に残す

左(少数項=KAN-AD流)は、滑らかな曲線がスパイクを無視して正常の大局だけを捉えます。すると、スパイクの位置で観測と近似の差(残差)が大きく開き、異常がくっきり浮かびます。右(多数項)は、近似がスパイクに張り付いてしまい、残差が小さくなって異常を見逃します。「あえて滑らかにする」ことが、局所ノイズへの頑健性を生む——これがKAN-ADの核心です。

この「滑らかな関数で近似する」を、学習可能な形で実現するのが Kolmogorov–Arnold Networks です。

KAN と KAN-AD の違い

通常の多層パーセプトロン(MLP)は、ノード(頂点)に固定の活性化関数を置き、エッジ(辺)に学習可能な重みを持ちます。KAN(Kolmogorov–Arnold Networks) はこれを裏返し、エッジに学習可能な「1変数関数」を置きます(Kolmogorov–Arnoldの表現定理に基づき、複雑な関数を1変数関数の組み合わせに分解する発想)。

素のKANは、この1変数関数を B-spline で実装します。B-splineは局所的な近似が得意ですが、それが裏目に出ます。異常は局所的な特徴なので、B-splineは異常にもフィットしてしまい、検出精度を下げるのです。

そこでKAN-ADは、KANを3点で作り替えます。

KAN-ADのアーキテクチャ(論文Fig.3)

出典: J. Zhou et al. “KAN-AD: Time Series Anomaly Detection with Kolmogorov–Arnold Networks”, ICML 2025 (arXiv:2411.00278), Fig.3.

  1. B-spline → 打ち切りフーリエ級数:フーリエ級数は局所より大域的・周期的で、滑らかなパターンの表現に向きます。無限項は重いので最初の $N$ 項だけ使います(truncated)。
  2. 周期強化(Periodic-Enhanced):最初の $N$ 項では $1/N$ より細かい周期を表せないため、$\cos(2\pi n i/T)$, $\sin(2\pi n i/T)$ のようなインデックスベースの追加関数で細かい周期を補います。
  3. 差分(differencing):窓ごとの平均値 $A_0$ が変動すると係数推定がぶれるので、定数項除去で $A_0$ を消し、モデルがフーリエ係数 $A_{1:N}, B_{1:N}$ の推定に集中できるようにします。

図の左が示すように、KANは「エッジ上の学習可能な1変数関数」を学びますが、KAN-ADは1変数関数をフーリエ基底に固定し、その係数だけを学習します。これが圧倒的なパラメータ効率の理由です。

KAN と KAN-AD の差分まとめ

両者の違いを一覧にすると、KAN-ADが「汎用KANを時系列異常検知に特化させた」ことがはっきりします。

KANとKAN-ADの差分表

観点 KAN(原論文) KAN-AD
辺の1変数関数 B-spline(学習可能・局所的 フーリエ級数(固定・大域的
学習するもの 関数の形そのもの フーリエ係数だけ
学習の仕組み KAN層を積む汎用構造 1次元畳み込みで係数を学習
全体構造 深く広く積める汎用ネット 3段(mapping→reducing→projection)に固定
目的 汎用の関数近似・科学計算 時系列異常検知(予測ベース)
異常スコア なし(ただの近似器) 正常パターンとの残差
局所への態度 局所に過適合しうる あえて局所を無視→残差に異常

ひとことで言えば、KANは「関数を学ぶ」、KAN-ADは「基底(フーリエ)を固定して係数だけ学ぶ」。この割り切りが、数千パラメータという軽さと、局所ノイズへの頑健性を同時に生んでいます。KAN自体の仕組み(なぜ辺に関数が乗るのか、なぜフーリエが入るのか)は、次の記事で基礎から解説しています。

Kolmogorov–Arnold Networks (KAN) とは?──なぜニューラルネットにフーリエ級数が入るのか
KANの基礎。辺に学習可能な関数を置く発想と、フーリエが入る理由を図解。

3段階パイプライン

図の右が、KAN-ADの処理の流れです。長さ $T$ のスライディング窓 $x_{0:i}$ を、Mapping → Reducing → Projection の3段階で「滑らかな正常パターン」に変換し、次の値を予測します。順に、式を追いながら見ていきます。

Mapping(写像):窓を1変数関数の束に展開する

まず、生の窓 $x_{0:i}$ を複数の1変数関数の値に写します。KAN-ADが実際に積み上げる関数は3種類です(論文 式(5))。

$$ \begin{aligned} X &= x_{0:i} \quad \text{(生の窓そのもの)}\\ S_n &= \{\sin(n\,x_{0:i}),\ \cos(n\,x_{0:i})\} \quad \text{(フーリエ級数)}\\ P_n &= \Big\{\sin\!\big(\tfrac{2\pi n i}{T}\big),\ \cos\!\big(\tfrac{2\pi n i}{T}\big)\Big\} \quad \text{(周期強化:窓インデックス } i \text{ ベース)} \end{aligned} $$

これらを $n=1,\dots,N$ まで積み重ねて、1変数関数行列 $H^{(0)}$ を作ります(式(6))。

$$ \begin{equation} H^{(0)} = \mathrm{Stack}\big(X,\ S_1,\ P_1,\ \dots,\ S_N,\ P_N\big) \end{equation} $$

ここで $S_n$ がフーリエ級数本体(大域的・滑らかな形を担う)、$P_n$ が周期強化(Periodic-Enhanced)です。打ち切り $N$ 項のフーリエ級数だけでは $1/N$ より細かい周期を表せないので、窓のインデックス $i$ に依存する三角関数 $P_n$ を足して、より細かい周期パターンを補います。チャネル数は $2N$(あるいは $X$ を含め $2N+1$)に増えます。

なお、定数項 $A_0$(窓ごとの平均オフセット)は差分(differencing)で除去します。$A_0$ は窓ごとに頻繁に変動するため、これを学習対象から外すことで、モデルはフーリエ係数 $A_{1:N},\,B_{1:N}$ の推定に集中できます(差分後の正常パターンは $x’_{0:i} \sim \Theta(x_{0:i})\times H$ と表せます)。

Reducing(縮約):1次元畳み込みで係数を学ぶ

次に、$H^{(0)}$ の各チャネル(=各1変数関数)にどれだけの重みを置くか——すなわちフーリエ係数——を、積み重ねた1次元畳み込み(1D CNN)で学習します。これがKAN-ADの「関数分解(Function Deconstruction)」機構の中核で、細かい特徴を多数のパラメータで覚える代わりに、少数の1変数関数の係数だけを推定するので圧倒的に軽くなります。

畳み込みはカーネル幅3で、各チャネル $H_c$ に重み $W_c$ を掛けて時間方向に畳み込みます(式(8)(9))。

$$ \begin{aligned} \mathrm{Conv}(H) &= \sum_{c=1}^{2N}\sum_{m=0}^{2} W_c[m]\cdot H_c[i+m-1]\\ \mathrm{CNN}(H) &= \mathrm{GELU}\big(\mathrm{BN}(\mathrm{Conv}(H))\big)\\ H^{(l)} &= \mathrm{CNN}\big(\mathrm{CNN}(H^{(l-1)})\big),\quad l=1,\dots,L \end{aligned} $$

各畳み込み層の後にバッチ正規化(BN)を挟み、活性化にGELUを使って学習を安定させます。最後に、入力 $H^{(0)}$ との残差接続(式(10))で数値安定性を保ち、幅1の畳み込みで次元を $2N$ チャネルから1本に縮約して、現在窓の正常パターン近似 $x’_{0:i}$ を得ます(式(11))。

$$ \begin{aligned} H^{(L)\prime} &= H^{(L)} + H^{(0)}\\ x’_{0:i} &= \mathrm{GELU}\Big(\mathrm{BN}\big(\mathrm{DownConv}(H^{(L)\prime})\big)\Big),\quad \mathrm{DownConv}(H)=\sum_{c=1}^{2N} W_c\cdot H_c[i] \end{aligned} $$

ポイントは、フーリエ基底($\sin,\cos$)は固定で、学習するのは畳み込みの重み=係数だけだということです。基底を学習しないので、$N$ や窓長 $T$ を変えてもパラメータ数はほとんど増えず、数百〜数千個に収まります。

Projection(射影):未来の正常パターンを線形予測

最後に、得た正常パターン近似 $x’_{0:i}$ から、次の時刻の値を1枚の線形層で予測します(式(12))。

$$ \begin{equation} x_{i+1} = W\cdot x’_{0:i} + b \end{equation} $$

推論時は、この予測した滑らかな正常パターンと実際の観測を比べ、そのずれ(残差)を異常スコアにします。正常な区間では予測と観測がほぼ一致してスコアが小さく、局所的な山・谷(異常)は滑らかな基底で再現できないので、残差が大きく跳ね上がります。

骨子をコードで確かめましょう。Reducingの係数学習は、窓ごとにフーリエ基底を最小二乗で当てはめる操作に相当します(畳み込みが学ぶ係数=この最小二乗解に対応します)。

import numpy as np

def fourier_basis(T, N):                       # 打ち切りフーリエ基底 [1, sin k, cos k]
    t = np.arange(T); cols = [np.ones(T)]
    for k in range(1, N+1):
        cols.append(np.sin(2*np.pi*k*t/T))
        cols.append(np.cos(2*np.pi*k*t/T))
    return np.stack(cols, 1)                    # (T, 1+2N)

def fourier_fit(x, N):                          # 窓xに滑らかな正常パターンを当てはめ
    B = fourier_basis(len(x), N)
    coef, *_ = np.linalg.lstsq(B, x, rcond=None)  # 係数(=Reducingが学ぶもの)
    return B @ coef                             # 滑らかな正常パターン

def anomaly_score(x, N, W=100):                 # |観測 − 滑らかな近似| を点ごとに
    n = (len(x)//W)*W; sc = np.zeros(n)
    for i in range(0, n, W):
        w = x[i:i+W]; sc[i:i+W] = np.abs(w - fourier_fit(w, N))
    return sc

少数項 $N$ で当てはめれば滑らかな正常パターンが得られ、異常(局所の山・谷)は残差に残ります。実際のKAN-ADは、この係数を1次元畳み込みで学習し、未来へ射影します。

項数 N と頑健性

ここで自然な疑問が湧きます——フーリエ項数 $N$ は多いほど良いのでしょうか? 合成系列(スパイク+区間異常+ノイズ)で、$N$ を変えながら検出のROC-AUCを測ります。

フーリエ項数とAUCの関係

結果は明確です。$N$ が多すぎると性能が劣化します(項数50でAUCが大きく低下)。項が増えるほど近似が異常にも張り付き、残差が消えてしまうからです。一方、項が少なすぎても正常の形を表現できず誤検出が増えます。適度に滑らか(少数〜中程度の項)が最も頑健——KAN-ADが「滑らかさ」を重視する理由が、ここに表れています。最良の $N$ での異常スコアを時系列で見ると、異常区間でしっかり立ち上がります。

KAN-AD流の異常スコア時系列

スパイク異常も区間異常も、滑らかな正常パターンからの残差として検出できています。

ノイズ混じりの訓練データに強い

KAN-ADの頑健性が際立つのは、訓練データにノイズや異常が紛れている現実的な状況です。論文のFig.2が、その違いを一目で見せてくれます。

KAN-ADは訓練ノイズに頑健(論文Fig.2)

出典: J. Zhou et al. “KAN-AD: Time Series Anomaly Detection with Kolmogorov–Arnold Networks”, ICML 2025 (arXiv:2411.00278), Fig.2.

上段(クリーンな訓練サンプル)では、TimesNet・素のKAN・KAN-ADのどれも、テスト系列の異常区間(ピンク)で異常スコアを立ち上げられています。ところが下段(ノイズ混じりの訓練サンプル)を見ると、TimesNet と素のKAN(B-spline) は正常区間でもスコアが乱高下し、異常を見分けられなくなっています(×印)。これらの手法は局所的な揺れまで「正常」として学んでしまうため、テスト時に似た局所パターン(実は異常)を見逃すのです。一方、KAN-AD だけはノイズ訓練でも異常区間でのみスコアが立ち上がり、正常区間は静かなまま(✓印)です。

なぜKAN-ADだけ崩れないのか。KAN-ADは滑らかなフーリエ基底でしか正常を表現しないので、訓練データに局所ノイズが混じっても、それを正常パターンに取り込めません。基底が大域的・周期的なので、ノイズの細部はそもそも近似対象から漏れ、結果として「ノイズに無関心」になります。論文のTODSデータセット(訓練データに異常が多く含まれる)では、この性質によりKAN-ADがEvent-F1でSOTAを27%上回りました。実務では「完全にクリーンな正常データだけを集める」のは難しいので、この性質は大きな利点です。

多変量時系列では、各チャネルを独立した1本の時系列として扱う(channel independence; Nie et al., 2023)戦略を採り、すべてのチャネルに同じKAN-ADを適用してから結果を統合します。変量が増えてもモデル本体は大きくならず、軽量さを保ったまま多変量に対応できます。

パラメータ効率

KAN-ADのもう一つの強みが、圧倒的な軽さです。フーリエ基底は固定で、学ぶのは係数だけ。論文の多変量実験(Table 6)では、5つの標準ベンチマーク(SMD・MSL・SMAP・SWaT・PSM、各チャネルをchannel independenceで処理)で評価しています。

多変量ベンチでのBest-F1とパラメータ数(論文Table 6)

出典: J. Zhou et al. “KAN-AD”, ICML 2025 (arXiv:2411.00278), Table 6.

論文のTable 6を読むと、KAN-ADはわずか4,491パラメータ(MSL時)で平均Best-F1 0.9076 を達成し、Informer(504,174)・Anomaly Transformer(4,863,055)・FEDformer(1,119,982)・TimesNet(75,223)・UniTS(8,066,376)をすべて上回っています。とくにSMAPでは0.9450と、次点UniTS(0.8380)を大きく引き離します。パラメータ数は競合より2〜3桁小さいのに精度はトップという、効率と性能の両立が際立ちます。

下は同じ事実をパラメータ数(対数軸)と平均Best-F1で並べた自作の図です。

パラメータ効率と精度

桁違いに少ないパラメータで最高のF1に届いていることが視覚的に分かります。さらに、別の単変量ベンチ(UCR)での効率比較(論文Table 3)では、KAN-ADは274パラメータ・GPU 42秒で動き、推論は素のKANより50%高速でした。基底を固定して係数だけを学ぶ設計が、「小さく・速く・高精度」を同時に実現しています。

まとめ

KAN-ADの骨子を、できるだけ分かりやすく追いました。

  • 発想:正常は滑らか・異常は局所的。あえて滑らかな関数で正常を近似し、はみ出し(残差)を異常とする
  • KAN→KAN-AD:エッジの1変数関数を B-spline → 打ち切りフーリエ級数 に置換(局所過適合を回避)。基底は固定、係数だけ学習
  • 3段階:mapping(フーリエ基底に展開)→ reducing(1次元畳み込みで係数を学習し正常パターン化)→ projection(未来の正常パターンを予測)
  • 効率:数千パラメータで平均Best-F1 0.9076、大型モデル超え・50%高速

「複雑なモデルで全部を学ぶ」のではなく「滑らかな基底で正常だけを学ぶ」という引き算の発想が、KAN-ADの頑健さと軽さの源です。コードは github.com/issaccv/KAN-AD で公開されています。

時系列異常検知の深掘りサーベイ
手法分類と評価の落とし穴。
DCdetector:2つの見方の食い違いで異常を見つける
同じく軽量・引き算の発想の対照学習ベース手法。

参考文献

  • J. Zhou et al. “KAN-AD: Time Series Anomaly Detection with Kolmogorov–Arnold Networks.” ICML 2025 (arXiv:2411.00278). コード: github.com/issaccv/KAN-AD
  • Z. Liu et al. “KAN: Kolmogorov–Arnold Networks.” ICLR 2025(KANの原典)