AI

KANとは?MLPとの違いとpykan実装・得意な領域を解説

KAN(Kolmogorov-Arnold Network)とは、機械学習モデルの一種で、MLPがノードに固定で持っていた活性化関数をエッジへ移し、その関数自体を学習させるニューラルネットワークです。2024年4月の論文公開から2年余りでGitHubのスターは16,000を超えました(2026年8月時点)。その後に条件を揃えた検証論文が複数出たため、得意領域と不得意領域の線引きも進みました。ここでは構造の定義、理論的な根拠、pykanでの実装手順、そして2026年8月時点で分かっている実力を、論文と実装の一次情報から整理します。

まとめ

  • KANはコルモゴロフ・アーノルド表現定理を発想の出発点にしたモデルで、原論文の定義では線形重みを持たず、すべての重みパラメータがスプラインで表された一変数関数に置き換わります。
  • MLPとの違いは活性化関数の配置にあります。MLPは「ノードに固定の活性化関数」、KANは「エッジに学習可能な活性化関数」を持ちます。
  • 原論文はarXiv:2404.19756として2024年4月30日に公開され、ICLR 2025に採択されました。
  • パラメータ数とFLOPsを揃えた比較(arXiv:2407.16674)では、シンボリック式表現を除くタスクで概ねMLPが上回りました。継続学習では忘却がMLPより深刻という結果も出ています。
  • 公式実装pykanはPyPI版0.2.8(2024年11月14日公開)が最新で、GitHubのmasterも2025年1月19日を最後に更新が止まっています。
  • 採用判断としては、シンボリック回帰や科学的な数式発見のように「学習結果を数式として取り出したい」用途に絞るのが妥当でしょう。

以下、それぞれの根拠を構造・理論・実装・実測評価の順に見ていきます。

KAN(Kolmogorov-Arnold Network)の基本構造

エッジ上に置かれた学習可能な活性化関数

原論文「KAN: Kolmogorov-Arnold Networks」(arXiv:2404.19756、Ziming Liu氏ら、2024年4月30日公開)は、KANの設計をひとことで説明しています。MLPはノード(ニューロン)に固定の活性化関数を持つのに対し、KANはエッジ(重み)に学習可能な活性化関数を持つ、という対比です。

ここで効いてくるのが、KANには線形重みが一切存在しないという原論文の主張です。従来なら1つのスカラー値だった重みパラメータが、すべてスプラインでパラメータ化された一変数関数に置き換わります。学習で更新されるのは「掛ける数」ではなく「曲線の形」だと考えてください。この設計により、ネットワークが学習した内容を関数の形として直接見ることができ、後段で数式に変換する道が開けます。

ただし実装レベルでは但し書きが付きます。pykanの各エッジは、スプラインに加えて既定でSiLUの残差項(base_fun='silu')を持ち、両者の混合比だけはスカラーの学習可能パラメータとして残ります(kan/KANLayer.pyのforward処理)。「線形重みなし」は原論文の設計思想を表す言い方であって、実装に一切のスカラー係数が無いという意味ではありません。

なお同じ略称でも、GitHubで見かけるefficient-kan(Blealtan氏、既定ブランチの最終コミットは2024年7月3日)などは高速化を狙った別実装です。エッジ上の学習可能なスプライン活性化という骨格は原論文どおりですが、READMEは原論文からの差分も明記しています。原論文が提案する入力サンプルへのL1正則化は高速化した計算方式と両立しないため、重みへのL1正則化へ置き換えたとのことです。呼称としてはKAN、KAN network、Kolmogorov-Arnold Networkのいずれも同じモデルを指します。

MLPとの対応関係

MLPとKANは、数学的な後ろ盾から構造まできれいな対応関係にあります。MLPを含むニューラルネットワークの基本構造と並べると差分が把握しやすくなるはずです。

観点 MLP KAN
理論的根拠 普遍近似定理 コルモゴロフ・アーノルド表現定理
活性化関数の位置 ノード エッジ
活性化関数 固定(ReLU、SiLUなど) 学習可能
重み 線形重み(スカラー) スプライン関数(原論文の定義)
学習結果の可読性 重み行列 曲線の形・数式化が可能

学習の枠組み自体は共通で、KANも誤差逆伝播法による勾配計算で最適化されます。新しいのは学習アルゴリズムではありません。何をパラメータとして持つのか、という表現の設計だけが変わっています。

コルモゴロフ・アーノルド表現定理がKANの理論的根拠になる理由

定理が主張する内容

コルモゴロフ・アーノルド表現定理は、有界領域上の任意の多変数連続関数が、有限個の一変数連続関数の和と合成だけで書けることを主張します。系譜としては、アンドレイ・コルモゴロフによる1957年の重ね合わせ定理と、同年のウラジーミル・アーノルドによる結果が組み合わさったもので、いずれもヒルベルトの第13問題をめぐる純粋数学の成果でした。

この定理が意味するのは、多変数の複雑さを一変数関数の組み合わせへ分解できるということです。KANはこの分解の形をネットワーク構造としてそのまま採用し、一変数関数を学習する層を積み重ねる設計に落とし込んでいます。

定理が長く実装に結びつかなかった経緯

定理自体は60年以上前から知られていました。にもかかわらずニューラルネットワークの主流にならなかったのは、定理が保証する一変数関数が必ずしも滑らかとは限らず、病的に複雑な形になり得るためです。存在が保証されても、勾配法で学習できる形とは限りません。

原論文の貢献は、定理の元の形(2層・固定幅)に縛られず任意の幅と深さへ一般化したうえで、一変数関数をスプラインで表現して学習可能にした点にあります。定理はあくまで発想の出発点で、KANは定理そのものの実装ではありません。ここを取り違えると「定理どおりなら必ず精度が出るはず」という誤った期待につながります。

pykanによるKANの最小実装手順

インストールと動作要件

公式実装はKindXiaoming氏のpykan(MITライセンス)です。READMEが示す前提はPython 3.9.7以上で、PyTorchベースで動作します。PyPIからの導入は1行で済みます。

pip install pykan

PyPIの最新版は0.2.8、公開日は2024年11月14日(UTC)です。パッケージ名はpykanですが、Pythonからのインポート名はkanである点に注意してください。

学習・剪定・数式抽出の5ステップ

pykanの典型的な流れは、データ作成、モデル定義、学習、剪定、数式化の5段階です。以下は公式のクイックスタート(hellokan.ipynb)と同じ2変数関数を学習させる最小構成になります。

import torch
from kan import KAN
from kan.utils import create_dataset

# 公式notebookに合わせて倍精度に設定する
torch.set_default_dtype(torch.float64)

# 学習対象の関数
f = lambda x: torch.exp(torch.sin(torch.pi * x[:, [0]]) + x[:, [1]] ** 2)
dataset = create_dataset(f, n_var=2, train_num=1000, test_num=1000, device='cpu')

# width は各層の幅、grid はスプラインの区間数、k はスプラインの次数
model = KAN(width=[2, 5, 1], grid=3, k=3, seed=42, device='cpu')

# lamb で正則化を効かせるとエッジがスパースになり、後段の剪定が効きやすくなる
results = model.fit(dataset, opt="LBFGS", steps=50, lamb=0.001)
print(results['train_loss'][-1], results['test_loss'][-1])

fit()は学習曲線を含むdictを返し、train_losstest_lossにはRMSEが入ります。ここまではMLPの学習と同じ感覚で書けるはずです。

ひとつ、初回に戸惑いやすい挙動があります。KAN()は既定でauto_save=Trueのため、カレントディレクトリにチェックポイント用のディレクトリを自動生成し、checkpoint directory created: ./modelと出力します。モデルの状態が変わるたびに保存されるので、不要であればauto_save=Falseを渡してください。

KANらしさが出るのはこの後です。寄与の小さいエッジを落としてから、残った一変数関数を既知の初等関数に当てはめ、ネットワーク全体を数式として取り出します。

from kan.utils import ex_round

# 寄与の小さいノード・エッジを剪定した新しいモデルが返る
model = model.prune()
model.fit(dataset, opt="LBFGS", steps=50)

# 残ったエッジを候補ライブラリの初等関数に当てはめる
model.auto_symbolic(lib=['x', 'x^2', 'exp', 'sin'])
model.fit(dataset, opt="LBFGS", steps=50)

# symbolic_formula() は (出力式のリスト, 入力変数) を返す
print(ex_round(model.symbolic_formula()[0][0], 4))

剪定の後と記号化の後にそれぞれ再学習を挟むのが、公式notebookの手順です。とくにauto_symbolic()の後のfit()は、当てはめた初等関数のアフィン係数を追い込む工程にあたります。ここを省くと、最後に得られる数式の係数精度が落ちます。

この出力がKANの中核的な価値です。学習済みモデルが重み行列ではなく、係数まで丸めた数式として得られます。なお自前の学習ループを書き、記号回帰の機能を使わない場合は、READMEが学習前のmodel.speed()呼び出しを推奨しています。記号計算の分岐が有効なままだと並列化されず極端に遅くなるためです。

Kerasのactivation指定でKANにならない理由

KANを試すときに最も多い誤りが、KerasのDense層のactivation引数に独自の名前や関数を渡してKANだと考えてしまうパターンです。これは動作としても設計としても成立しません。

まずlayers.Dense(64, activation='kolmogorov_arnold_activation')のように未登録の文字列を渡すと、Kerasは活性化関数を解決できずValueErrorを送出します。次に、lambda x: tf.sin(x) + tf.cos(x**2)のような自作関数を渡した場合はエラーになりません。しかし、できあがるのは「珍しい固定活性化関数を持つMLP」です。関数の形は学習されず、線形重みも残ったままで、活性化関数はノード側にあります。KANの定義要件をひとつも満たしていません。

この誤解が厄介なのは、Kerasの学習自体は正常に完了してしまう点にあります。KANを試したつもりで別のモデルを評価することになるため、比較検証をするならpykanか同等の実装を使ってください。

機械学習タスク別に見たKANの実力

シンボリック回帰と科学的発見での強み

KANが明確に強いのは、データの背後にある数式を復元するシンボリック回帰です。前述のauto_symbolic()symbolic_formula()の流れが示すとおり、KANは学習結果を人が読める式に落とすところまでを設計に含んでいます。

著者らはこの方向を「KAN 2.0: Kolmogorov-Arnold Networks Meet Science」(arXiv:2408.10205、2024年8月19日公開)で拡張しました。同論文がpykanへ追加した機能は3つで、乗算ノードを扱うMultKAN、数式をKANへコンパイルするkanpiler、KANや任意のニューラルネットワークを木構造グラフへ変換するtree converterです。掲げられた用途も、関連する特徴量の特定、モジュール構造の発見、記号的な数式の発見という科学研究寄りの3点でした。KANの主戦場を汎用の予測モデルではなく科学的発見に置く、という著者自身の位置づけが読み取れます。

条件を揃えた比較でのMLP優位

一方、汎用モデルとしての期待は実測に否定されています。シンガポール国立大学のRunpeng Yu氏らによる「KAN or MLP: A Fairer Comparison」(arXiv:2407.16674、2024年7月23日公開、v2は同年8月17日)は、パラメータ数とFLOPsを揃えたうえで、機械学習・コンピュータビジョン・音声処理・自然言語処理・シンボリック式表現の各タスクでKANとMLPを比較しました。

結論は明快です。シンボリック式表現を除くすべての領域で、概ねMLPがKANを上回りました。さらにアブレーション実験により、シンボリック式表現でのKANの優位はB-spline活性化関数に由来することが示されています。同じB-splineをMLPへ適用すると、MLP側が並ぶか上回るという結果でした。

同論文はもう一点、見落とせない結果を報告しています。標準的なclass-incrementalな継続学習の設定では、KANの忘却がMLPよりも深刻でした。これはKAN原論文が報告した内容と食い違う知見です。逐次的にクラスが増える運用を想定するなら、KANの継続学習性能は自分の設定で確かめる必要があります。

つまり「KANはMLPより少ないパラメータで高精度」という言い方は、条件を揃えない比較でのみ成り立つ主張です。KANを検討するなら、この論文の存在を前提に置いて判断してください。

テーブルデータでの精度と計算コスト

実データでの挙動は、Eleonora Poeta氏らの「A Benchmarking Study of Kolmogorov-Arnold Networks on Tabular Data」(arXiv:2406.14529、2024年6月20日公開)が扱っています。複数のテーブルデータセットでKANとMLPを比較したところ、精度とF1スコアはMLPと同等以上で、とくにインスタンス数の多いデータセットで優位が出ました。

ただし同論文は、この性能改善が同規模のMLPと比べて高い計算コストを伴うことも明記しています。精度が同等以上でも学習時間で割に合うかは別問題です。テーブルデータで実運用を考えるなら、この計算コストが判断材料になります。機械学習と深層学習の位置づけを整理したい場合は、AI・機械学習・深層学習の関係もあわせて確認してください。

pykanの保守状況から見た採用判断

公式実装の更新が止まっている現状

技術選定では論文の内容と同じくらい、実装が生きているかどうかが効いてきます。pykanの現在地は次のとおりです(2026年8月2日時点、PyPIとGitHubのAPIで確認)。

項目 内容
PyPI最新版 0.2.8(2024-11-14公開)
その前のリリース 0.2.7(2024-10-15公開)
リポジトリ作成日 2024-04-27
masterの最終コミット 2025-01-19
スター数 16,328
ライセンス MIT

最終リリースから約1年9か月、最終コミットからも約1年半が経過しています。リポジトリはアーカイブされておらず、MITライセンスなので利用や改変に制約はありません。ただしPyTorchの新しいバージョンへの追随やバグ修正を待てる状況ではないでしょう。原論文がICLR 2025に採択され、arXiv版もv5(2025年2月9日)まで更新された一方で、実装側の開発は落ち着いた形です。

採用可否を分ける判断基準

ここまでの一次情報を踏まえると、KANの採用可否は用途で切り分けるのが合理的でしょう。

採用する価値があるのは、入力変数が少数で、背後にある関係を数式として説明する必要がある場面です。規模感については著者自身がREADMEで助言しており、5入力1出力のタスクならKAN(width=[5,1,1], grid=3, k=3)のような小さな構成から始め、うまくいかなければ幅、次に深さを増やす手順を勧めています。MLPの常識どおりに幅を大きく取るところから始めない、という点が肝心です。物理・化学の実験データから支配方程式の候補を得たい、業務ルールの根拠を関数の形で提示したい、といった要求では、学習済みモデルから式が出てくること自体が成果物になります。MLPは学習結果を数式として出せないため、この用途での選択肢はKANか、PySRのような記号回帰専用ツールに絞られます。

逆に見送るべきなのは、画像分類・自然言語処理・大規模なテーブルデータの予測など、精度と推論コストで評価される一般的な予測タスクです。条件を揃えた比較でMLPが上回っている以上、KANを選ぶ積極的な理由がありません。著者自身もREADMEで「KANは箱から出してすぐ使えるプラグインではまだない」「KANとMLPは互いを置き換えるものではなく、それぞれ得意な設定と限界がある」と書いています。売り込む側がこう明言している技術を、汎用の置き換えとして本番へ入れる理由は乏しいでしょう。加えて公式実装の更新が止まっている点は、長期運用するシステムでは無視できないリスクになります。研究や検証の道具として使い、本番の推論基盤へ組み込むなら実装を自前で保守する覚悟を持つ、という線引きが現実的です。

よくある質問

KANとは何の略ですか

Kolmogorov-Arnold Networkの略で、日本語ではコルモゴロフ・アーノルド・ネットワークと表記されます。名称は、モデルの発想の出発点となったコルモゴロフ・アーノルド表現定理に由来します。MLPがノードに固定の活性化関数を持つのに対し、KANはエッジに学習可能な活性化関数を持つ点が定義上の違いです。KAN、KAN network、Kolmogorov-Arnold Networkはいずれも同じモデルを指します。原論文はarXiv:2404.19756として2024年4月30日に公開され、ICLR 2025に採択されました。

KANはMLPより常に高精度ですか

いいえ。パラメータ数とFLOPsを揃えた比較(arXiv:2407.16674)では、シンボリック式表現を除くタスクで概ねMLPが上回りました。「少ないパラメータで高精度」という説明は、条件を揃えない比較を前提にした主張です。同論文はさらに、標準的なclass-incrementalな継続学習の設定でKANの忘却がMLPより深刻であることも報告しており、これはKAN原論文の報告と食い違います。KANが優位に立つのは、B-spline活性化関数が効くシンボリック式表現の領域に限られると考えてください。

KANをPythonで試すには何が必要ですか

Python 3.9.7以上とPyTorchの環境を用意し、pip install pykanでインストールします。パッケージ名はpykanですが、インポート名はkanである点に注意してください。PyPI版の最新は0.2.8(2024年11月14日公開、UTC)です。公式のクイックスタートはhellokan.ipynbで、torch.set_default_dtype(torch.float64)を先に設定してから学習に入る構成です。初回実行時はカレントディレクトリにチェックポイント用のディレクトリが自動生成されます。

コルモゴロフ・アーノルド表現定理をそのまま実装したものがKANですか

違います。定理が保証する一変数関数は滑らかとは限らず、病的に複雑な形になり得るため、そのままでは勾配法で学習できません。KANは定理の元の形(2層・固定幅)に縛られず任意の幅と深さへ一般化し、一変数関数をスプラインで表現することで学習可能にしたモデルです。定理は発想の出発点にあたり、KANは定理の直接の実装ではありません。この区別を取り違えると、定理が成り立つのだから必ず精度が出るはず、という誤った期待につながります。

pykanの開発は続いていますか

2026年8月2日時点で、PyPIの最新版は0.2.8(2024年11月14日公開)、GitHubのmasterの最終コミットは2025年1月19日です。最終リリースから約1年9か月、最終コミットから約1年半が経過しています。リポジトリはアーカイブされておらずMITライセンスのため利用や改変に制約はありませんが、PyTorchの新バージョンへの追随やバグ修正は期待しにくい状況です。本番システムへ組み込む場合は、自前で保守する前提に立つか、最新の状況を公式リポジトリで確認してから判断してください。

関連記事

資料請求

RELATED POSTS 関連記事