KAN完全解説 - MLPを超える新アーキテクチャ【コルモゴロフ・アーノルド表現定理から実装まで】
この記事は何?
2024年4月に発表された KAN (Kolmogorov-Arnold Networks) は、ニューラルネットワークの根本的な構造を変える革新的なアーキテクチャです。
以前、TabPFN v2.5 完全解説 という記事を書きました。TabPFNは「学習プロセスの革新」でしたが、KANは「ニューラルネットワーク構造そのものの革新」です。
この記事では、KANの数学的基盤であるコルモゴロフ・アーノルド表現定理から、実際のKaggleでの使い方まで解説します。
第1章: なぜ今KANなのか
MLPの60年
1958年にパーセプトロンが発明されて以来、ニューラルネットワークの基本構造は変わっていません:
入力 → [線形変換 → 活性化関数] × N層 → 出力
MLP (Multi-Layer Perceptron) は:
- ノード(ニューロン)に固定の活性化関数(ReLU, sigmoid等)
- エッジ(重み)は学習可能な線形パラメータ
この構造は Universal Approximation Theorem(万能近似定理)に基づいており、「十分な幅と深さがあれば任意の関数を近似できる」ことが保証されています。
KANの発想転換
KANは、この60年の常識を逆転させました:
| 要素 | MLP | KAN |
|---|---|---|
| 活性化関数の場所 | ノード(固定) | エッジ(学習可能) |
| 線形重み | あり | なし |
| 理論的基盤 | 万能近似定理 | コルモゴロフ・アーノルド表現定理 |
# MLPの計算
output = activation(W @ input + b) # 活性化関数は固定
# KANの計算(概念)
output = sum([phi_i(input_i) for i in range(n)]) # 活性化関数が学習可能
第2章: コルモゴロフ・アーノルド表現定理
ヒルベルトの第13問題
1900年、数学者ダフィット・ヒルベルトはパリの国際数学者会議で23の未解決問題を提示しました。
その13番目は:
「7次以上の代数方程式の解は、加減乗除と累乗根の有限回の合成では表せないが、2変数関数の合成では表せるか?」
より一般的には:「多変数関数は、一変数関数の合成だけで表現できるか?」
定理の内容(1957年)
1956-1957年、アンドレイ・コルモゴロフとその学生ウラジーミル・アーノルドがこの問題を解決しました。
定理の意味
この定理は驚くべきことを示しています:
「真の多変数演算は『加算』だけ。それ以外はすべて一変数関数の合成で表現可能」
例えば、
f(x, y) = x × y
= Φ(φ₁(x) + φ₂(y)) # 一変数関数の合成
なぜ今まで使われなかったのか
この定理は1957年に証明されましたが、機械学習では長らく使われませんでした:
- 内部関数の病的な性質:
が非常に「荒い」関数になりうる\phi_{q,p} - 数値的不安定性: 直接の実装が困難
- 計算効率: 当時のコンピュータでは現実的でなかった
KANの論文は、これらの問題をスプライン関数と深層学習の最適化技術で解決しました。
第3章: KANのアーキテクチャ
MLP vs KAN の図解
MLP(従来型)
入力層 隠れ層 出力層
x₁ ───W₁₁──→ [σ] ───W'₁──→
╲ ╱ ╲
W₁₂ W₂₁ W'₂
╲ ╱ ╲
x₂ ───W₂₂──→ [σ] ───W'₃──→ out
[σ] = 固定の活性化関数(ReLU等)
W = 学習可能な線形重み
KAN(新型)
入力層 隠れ層 出力層
x₁ ───[φ₁₁]──→ Σ ───[Φ₁]──→
╲ ╱ ╲
[φ₁₂] [φ₂₁] [Φ₂]
╲ ╱ ╲
x₂ ───[φ₂₂]──→ Σ ───[Φ₃]──→ out
[φ] = 学習可能な活性化関数(スプライン)
Σ = 単純な加算
重要な違い:
- MLPは「固定の活性化 + 学習可能な重み」
- KANは「学習可能な活性化 + 固定の加算」
スプラインによるパラメータ化
KANの活性化関数は B-スプライン でパラメータ化されます:
ここで:
-
はB-スプライン基底関数(固定)B_i(x) -
はスプライン係数(学習可能)c_i
なぜスプラインか?
- 滑らかさ: 連続的で微分可能
- 局所性: 局所的な変更が全体に影響しない
- 効率性: 少ないパラメータで複雑な関数を表現
- 解釈性: 学習後に関数形状を可視化できる
# スプライン基底の例(概念コード)
import numpy as np
from scipy.interpolate import BSpline
# 3次Bスプライン
knots = np.linspace(0, 1, 10)
coefficients = np.random.randn(len(knots) + 3) # 学習対象
spline = BSpline(knots, coefficients, k=3)
# 任意の入力に対して滑らかな出力
x = np.linspace(0, 1, 100)
y = spline(x)
KANの利点
1. パラメータ効率
同じ精度を達成するのに、KANはMLPより少ないパラメータで済むことが多い:
| タスク | MLP | KAN |
|---|---|---|
| 関数近似 | ~300 params | ~30 params |
| 物理法則の発見 | ~10,000 params | ~100 params |
2. 解釈可能性
学習後、各エッジの活性化関数を可視化できる:
# KANの学習後
model.plot() # 各エッジの学習された関数をプロット
これにより:
- どの入力特徴が重要か
- どのような非線形変換が学習されたか
- 物理法則との対応
が人間に理解可能になります。
3. スケーリング則の改善
KANは「より小さいモデルで同等以上の性能」を実現:
KANs have faster neural scaling laws than MLPs.
— Liu et al., 2024
第4章: KANの実装方法
テーブルデータの課題
テーブルデータ(構造化データ)は、ディープラーニングが苦手とする領域です:
| データ型 | DL得意? | 理由 |
|---|---|---|
| 画像 | ◎ | 局所的なパターン、畳み込み |
| テキスト | ◎ | 系列構造、Attention |
| テーブル | △ | 特徴間の関係が多様 |
GBDTがテーブルデータで強い理由:
- 特徴量ごとの分割が得意
- 欠損値の自然な扱い
- ハイパーパラメータにロバスト
KANがテーブルに向いている理由
KANは以下の点でテーブルデータに適しています:
- 特徴ごとの変換: 各入力特徴に個別の一変数関数を学習
- 数値特徴量: 連続値の非線形パターンを効率的に捕捉
- 解釈性: 特徴量の重要度と変換方法が可視化可能
pykan - オリジナルKAN実装
pykan は、KAN論文の著者による公式実装です。
インストール
pip install pykan
基本的な使い方
from kan import KAN
import torch
# モデル定義
model = KAN(
width=[n_features, 32, n_classes], # 入力 → 隠れ層 → 出力
grid=5, # スプラインのグリッドサイズ
k=3, # スプライン次数
seed=42,
device="cuda"
)
# データセットの準備(pykan形式)
dataset = {
"train_input": X_train_tensor,
"train_label": y_train_tensor,
"test_input": X_test_tensor,
"test_label": y_test_tensor,
}
# 学習
model.fit(
dataset,
opt="Adam",
lr=0.01,
steps=100,
loss_fn=torch.nn.CrossEntropyLoss(),
)
# 予測
with torch.no_grad():
predictions = model(X_test_tensor).argmax(dim=1)
KANの可視化
pykanの強力な機能の一つは、学習された活性化関数の可視化です:
# 学習後に各エッジの関数をプロット
model.plot()
これにより、各特徴量がどのように変換されているかを視覚的に確認できます。
他のKAN実装
| ライブラリ | 特徴 |
|---|---|
| pykan | 公式実装、可視化機能 |
| efficient-kan | 高速化版 |
| TabKAN | テーブル特化、複数バリエーション |
第5章: ベンチマーク比較
実験設定
以下のモデルを比較します:
- KAN: pykan(オリジナル実装)
- TabPFN: 事前学習済みTransformer(詳細記事)
- GBDT系: LightGBM, XGBoost, CatBoost
- MLP: 従来のニューラルネットワーク
データセット:
- Breast Cancer (569 samples, 30 features)
- Iris (150 samples, 4 features)
- Wine (178 samples, 13 features)
- Digits (1,797 samples, 64 features)
結果サマリー
| データセット | KAN | TabPFN | LightGBM | CatBoost | MLP |
|---|---|---|---|---|---|
| breast_cancer | 97.4% 🏆 | 96.5% | 96.5% | 95.6% | 94.7% |
| iris | - | 96.7% 🏆 | 90.0% | 93.3% | 66.7% |
| wine | 91.7% | 94.4% | 100% 🏆 | 100% 🏆 | 77.8% |
| digits | - | 98.1% 🏆 | 96.4% | 97.8% | 95.8% |
※ KANは一部データセットでpykanライブラリの制限によりエラー
精度と実行時間のヒートマップ

左: 精度(緑が高精度)、右: 実行時間(赤が高速)
KANはbreast_cancerで最高精度を達成していますが、学習時間はGBDTより長くなります。TabPFNは学習不要で高速な推論が可能です。
モデル別の平均精度と勝利数

左: 全データセットの平均精度、右: 各データセットで1位を取った回数
- CatBoost: 平均精度トップ(96.7%)
- TabPFN: 最多勝利(2勝)- iris, digits
- KAN: breast_cancerで1位、平均94.5%
分析
注目ポイント
KANがbreast_cancerで1位!(97.4%)
- 全モデル中最高精度を達成
- GBDTやTabPFNを上回る結果
- 数値特徴量が多いデータセットで強さを発揮
KANが強いケース
- 小〜中規模データセット(< 1,000サンプル)
- 数値特徴量が支配的(カテゴリ少なめ)
- 解釈性が重要な場面
- 特徴量間の非線形関係が複雑
TabPFNが強いケース
- 小規模データセット(< 3,000サンプル)
- チューニング時間がない
- 素早いベースラインが必要
- iris、digitsで最高精度を達成
GBDTが強いケース
- 中〜大規模データセット(> 5,000サンプル)
- カテゴリ特徴量が多い
- 本番環境でのデプロイ
- wineで100%精度(LightGBM、CatBoost)
第6章: いつ何を使うべきか
意思決定フローチャート
データサイズは?
│
├─ < 1,000 サンプル
│ │
│ └─ 解釈性が重要?
│ ├─ Yes → KAN
│ └─ No → TabPFN
│
├─ 1,000 〜 5,000 サンプル
│ │
│ └─ チューニング時間は?
│ ├─ なし → TabPFN
│ └─ あり → KAN or GBDT
│
└─ > 5,000 サンプル
│
└─ GBDT (LightGBM / XGBoost / CatBoost)
比較表
| 観点 | KAN | TabPFN | GBDT |
|---|---|---|---|
| 最適データサイズ | < 3,000 | < 3,000 | 任意 |
| 学習時間 | 中 | なし | 中〜長 |
| 解釈性 | ◎ | × | △ |
| カテゴリ特徴量 | △ | ○ | ◎ |
| 本番デプロイ | △ | ○ | ◎ |
| チューニング必要性 | 中 | なし | 高 |
私の推奨
- まずTabPFNでベースラインを作る(30秒)
- KANで解釈性を探る(特徴量の重要度、非線形パターン)
- GBDTで最終モデルを構築(特に大規模データ)
第7章: まとめ
KANの革新性
- 理論的基盤: 1957年のコルモゴロフ・アーノルド表現定理を現代の深層学習で実現
- アーキテクチャの逆転: 「ノードの活性化」から「エッジの活性化」へ
- パラメータ効率: 少ないパラメータで同等の性能
- 解釈可能性: 学習された関数を可視化できる
2025年のテーブルMLランドスケープ
解釈性
│
KAN │
* │
│
小規模データ ─────────┼───────── 大規模データ
│
TabPFN * │ * GBDT
│
速度/スケーラビリティ
次のステップ
- Kaggleノートブック: KAN vs TabPFN vs GBDT Tabular Benchmark
- TabPFN詳細: TabPFN v2.5 完全解説
- pykan公式ドキュメント: kindxiaoming.github.io/pykan
参考文献
[1] Liu, Z., et al. (2024). KAN: Kolmogorov-Arnold Networks. ICLR 2025. arXiv:2404.19756
[2] Eslamian, A., et al. (2025). TabKAN: Advancing Tabular Data Analysis using Kolmogorov-Arnold Network. arXiv:2504.06559
[3] Chen, J., et al. (2024). TabKANet: Tabular Data Modeling with KAN and Transformer. arXiv:2409.08806
[4] Kolmogorov, A. N. (1957). On the representation of continuous functions of many variables by superposition of continuous functions of one variable and addition.
[5] Arnold, V. I. (1957). On functions of three variables. Dokl. Akad. Nauk SSSR 114.
[6] Hollmann, N., et al. (2023). TabPFN: A Transformer That Solves Small Tabular Classification Problems in a Second. ICLR 2023.
Discussion