16 人が閲覧(直近 30 日) AI

KANとは?AIの新しいニューラルネットワークの仕組みとMLPとの違い・pykan実装

KANとは?AIの新しいニューラルネットワークの仕組みとMLPとの違い・pykan実装

KAN(Kolmogorov-Arnold Network)とは、MLPがノードに固定で持っていた活性化関数をエッジへ移し、その関数自体を学習させるAIモデル(ニューラルネットワーク)です。2024年4月に原論文が公開され、公式実装pykanのGitHubスターは16,000を超えました(2026年11月時点)。一方で、条件を揃えた検証論文やTransformerへの組み込み研究が出そろい、得意な領域と苦手な領域の線引きもはっきりしてきました。構造の定義、理論的な根拠、pykanでの実装手順、学習速度の弱点、そして採用判断までを、論文と実装の一次情報から整理します。

まとめ

  • KANはコルモゴロフ・アーノルド表現定理を発想の出発点にしたモデルで、原論文の定義では線形重みを持たず、すべての重みパラメータがスプラインで表された一変数関数に置き換わります。
  • MLPとの違いは活性化関数の配置です。MLPは「ノードに固定の活性化関数」、KANは「エッジに学習可能な活性化関数」を持ちます。
  • 原論文はarXiv:2404.19756として2024年4月30日に公開され、ICLR 2025に採択されました。
  • 最大の弱点は学習速度です。原論文自身が、同じパラメータ数ならMLPより通常10倍遅いと認めています。
  • パラメータ数またはFLOPsを揃えた比較(arXiv:2407.16674)では、シンボリック式表現を除くタスクで概ねMLPが上回りました。継続学習の忘却も、検証論文の設定ではMLPより深刻でした。
  • KAT論文の実験では、ViTのMLP層をB-splineのKAN層へ単純に置き換えると、精度低下や学習失敗が生じました。B-splineを有理関数に替えたKAT(ICLR 2025)は、同じパラメータ数のDeiTをImageNetで上回りました。
  • 公式実装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')を持ちます。学習されるのはスプライン基底の係数(coef)だけでなく、2つの項それぞれに掛かるスケール係数(scale_baseとscale_sp)も含まれます(kan/KANLayer.py)。「線形重みなし」は原論文の設計思想を表す言い方であって、実装に一切のスカラー係数が無いという意味ではありません。

MLPとの対応関係

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

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

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

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

表現定理による多変数関数の分解

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

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

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

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

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

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

インストールと動作要件

公式実装はKindXiaoming氏のpykan(MITライセンス)です。READMEが示す前提はPython 3.9.7以上で、PyTorchベースで動作します。注意したいのは、pykan 0.2.8のsetup.pyに依存パッケージの指定(install_requires)が無い点です。pip install pykanだけではimport kanに必要なパッケージが入らないため、まとめて導入します。

python -m pip install pykan==0.2.8 torch==2.2.2 numpy==1.26.4 sympy matplotlib pandas pyyaml scikit-learn tqdm

リポジトリのrequirements.txtはtorch 2.2.2やnumpy 1.24.4などに版を固定しています。PyPIの最新版は0.2.8、公開日は2024年11月14日(UTC)です。パッケージ名はpykanですが、Pythonからのインポート名はkanである点に注意してください。

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

pykanの典型的な流れは、データ作成、モデル定義、学習、剪定、数式化の5段階です。以下は公式のクイックスタート(hellokan.ipynb)と同じ2変数関数を学習させる最小構成です。この2本は、Python 3.11.15、torch 2.2.2、numpy 1.26.4、sympy 1.14.0のCPU環境(Intel Mac)で順に実行し、最後まで動くことを確認しました(2026年11月1日)。

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_lossとtest_lossにはRMSEが入ります。2024年6月公開のAnalytics Vidhyaの解説など初期の記事にはmodel.train()で学習させる例が残っていますが、現行のpykanではfit()を使います。

初回に戸惑いやすい挙動もあります。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か、後述のefficient-kanのようにエッジ上のスプラインを実装したライブラリを使ってください。

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

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

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

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

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

評価されたタスクでは、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側が並ぶか上回ります。「KANはMLPより少ないパラメータで高精度」という主張は一般化できず、対象タスクと比較条件を併記する必要があります。たとえば同論文の文章分類(CoLA)では、パラメータ数を揃えるとKANが優位に見えたものの、FLOPsを揃えるとMLPが上回り、どちらが良いか一貫した答えは出ませんでした。

継続学習で原論文と検証論文の結果が割れる点

忘却への強さは、評価が正反対に割れている論点です。原論文は、5つのガウス型のピークを持つ1次元回帰のデータを順番に与える実験で、KANが壊滅的忘却を完全に避け、MLPは深刻に忘れると報告しました。スプラインの基底が局所的なので、新しいサンプルは近くの係数しか動かさないという説明です。ただし原論文自身が、極めて単純な例での予備的な結果であり、局所性の定義が曖昧な高次元の設定に一般化できるかは不明だと断っています。

前述のarXiv:2407.16674は、標準的なclass-incrementalな継続学習の設定で、KANの忘却がMLPより深刻だったと報告しました。1次元のおもちゃ問題では成り立った性質が、クラスが増えていく現実的な設定では逆転したわけです。逐次的にクラスやデータ分布が増える運用を想定するなら、「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・機械学習・深層学習の関係もあわせて確認してください。

学習速度の弱点と高速化・派生モデル

原論文が認める「MLPの約10倍遅い」学習

原論文は結論部の「Should I use KANs or MLPs?」で、KANの最大のボトルネックは学習の遅さであり、同じパラメータ数ならMLPより通常10倍遅いと書いています。著者らは効率化に力を入れていないとして、これを根本的な限界ではなく今後の工学的な課題と位置づけました。そのうえで「速く学習させたいならMLPを使うべきだ」とも明言しています。

遅さの原因は構造にあります。MLPは層ごとに行列積1回で済みますが、KANはエッジごとに別の関数を評価します。efficient-kanのREADMEによれば、pykanは入力を(batch_size, out_features, in_features)の形に展開してから活性化関数を当てるため、メモリと計算が膨らみます。

efficient-kanとFastKANの高速化の方法

高速化の実装は、この展開を避ける方向で進みました。Blealtan氏のefficient-kanは、どのエッジの活性化関数も共通のB-spline基底の線形結合である点に着目し、計算を行列積へ書き換えています。代償として、原論文が提案する入力サンプルへのL1正則化はこの方式と両立しないため、重みへのL1正則化に置き換えたとREADMEが明記しています。解釈性の要となるスパース化の挙動が原論文と同じではない、ということです。

ZiyaoLi氏のFastKANは、3次のB-spline基底をガウス型の放射基底関数(RBF)で近似し、efficient-kanに比べて順伝播を3.33倍速くしたと報告しています(V100で742マイクロ秒から223マイクロ秒)。ただし最終コミットはefficient-kanが2024年7月3日、FastKANが2024年6月20日で、どちらもpykanと同じく更新は止まっています(2026年11月1日時点、GitHub APIで確認)。

Transformerに組み込んだKAT(ICLR 2025)

大規模なモデルにKANを持ち込んだ研究としては、シンガポール国立大学のXingyi Yang氏らによるKolmogorov-Arnold Transformer(KAT)があります。ICLR 2025に採択された論文で、Transformerの中のMLP層をKAN層へ置き換えています。

同論文のImageNet-1Kの表は、KANを素朴に入れると崩れることをはっきり示しています。

モデル チャネル混合 パラメータ Top-1精度
DeiT-T MLP 5.7M 72.2%
ViT-T + KAN KAN(B-spline) 12.8M 64.9%
KAT-T KAN(有理関数) 5.7M 74.6%
DeiT-B MLP 86.6M 81.8%
ViT-B + KAN KAN(B-spline) 199.8M NaN(学習失敗)
KAT-B KAN(有理関数) 86.6M 82.3%

B-splineのKANをそのまま入れたモデルは、パラメータが2倍以上に増えたうえで精度が下がり、Baseサイズでは学習が発散しました。KATが上回れたのは、論文が挙げる3つの手当てによるものです。B-splineをGPUで計算しやすい有理関数に替え、活性化関数の重みをニューロンのグループで共有し、層をまたいで分散を保つ初期化を入れています。

ここから読み取れるのは、大規模化で効いたのが「エッジごとに独立したスプライン」という原型から離れる変更だったことです。グループ共有は、エッジごとに別の関数を持つという原論文の定義を意図的に緩めています。「KANがTransformerで勝った」と紹介するときは、それがKATという改変版の話であることを区別してください。

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

pykanのリリース・master更新履歴

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

項目 内容
PyPI最新版 0.2.8(2024-11-14公開)
その前のリリース 0.2.7(2024-10-15公開)
masterの最終コミット 2025-01-19
スター数 16,340
アーカイブ されていない
ライセンス MIT

最終リリースから2年近く、最終コミットからも約1年9か月が経過しました。2026年8月に確認した時点(スター16,328)からも、コードは1行も変わっていません。MITライセンスは利用や改変を認めていますが、ソフトウェアの複製または重要部分には著作権表示と許諾表示を含める必要があります。一方で、PyTorchの新しいバージョンへの追随やバグ修正を待てる状況ではありません。原論文はICLR 2025に採択され、arXiv版もv5(2025年2月9日)まで更新された一方で、実装側の開発は止まった形です。

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

原論文の著者自身の推奨は、解釈性と精度の両方またはどちらかを重視し、学習の遅さが大きな問題にならないなら、少なくとも小規模なAI+Scienceの問題ではKANを試す価値がある、というものです。ここまでの検証結果を重ねると、線引きはさらに絞れます。

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

見送るべきなのは、画像分類・自然言語処理・大規模なテーブルデータの予測など、精度と推論コストで評価される一般的な予測タスクです。MLPが優位だった比較結果と原論文の学習時間の報告を踏まえ、本記事では一般的な予測タスクの第一候補をMLPとします。KANは、対象データで精度や解釈性の改善が追加コストを上回る場合に検討します。Transformerで精度を上げたいならKATという選択肢はありますが、それは独自のCUDAカーネルを持つ改変版を採用するという判断であって、pykanの延長ではありません。著者自身もREADMEで「KANとMLPは互いを置き換えるものではなく、それぞれ得意な設定と限界がある」と書いています。

本番の推論基盤へ組み込むなら、更新の止まったpykanを自前で保守する前提に立つ必要があります。研究や検証の道具として使い、業務システムの予測にはMLPや勾配ブースティングを据える、という分担が現実的です。どちらのモデルが自社のデータに合うかを比較検証から進めたい場合は、機械学習モデル開発の支援もご相談いただけます。

よくある質問

KANとは何の略ですか?

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

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

いいえ。パラメータ数またはFLOPsを揃えた比較(arXiv:2407.16674)では、シンボリック式表現を除くタスクで概ねMLPが上回りました。KANの優位が目立つのはシンボリック式表現で、それ以外にもデータセットや比較条件によってKANが上回る例はありますが、一貫はしていません。同論文は、class-incrementalな継続学習でKANの忘却がMLPより深刻であることも報告しています。学習も同じパラメータ数で通常10倍遅いと原論文が認めています。

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

Python 3.9.7以上の環境で、pykan本体とPyTorch・numpy・sympy・matplotlibなどの依存パッケージをまとめてインストールします。pykan 0.2.8は依存パッケージを自動では入れないため、pip install pykanだけではimport kanで止まります。パッケージ名はpykanですが、インポート名はkanです。PyPI版の最新は0.2.8(2024年11月14日公開、UTC)で、学習はmodel.fit()で行います。古い解説にあるmodel.train()は現行版の書き方ではありません。初回実行時はカレントディレクトリにチェックポイント用のディレクトリが自動生成されます。

KANはTransformerや大規模モデルにも使えますか?

KAT論文の実験条件では、ViTのMLP層をB-splineのKAN層へ単純に置き換えると、精度低下や学習失敗が生じました。ViT-TのMLPをKANに替えたモデルはImageNet-1KのTop-1で64.9%(DeiT-Tは72.2%)、Baseサイズでは学習が発散しました。有理関数の基底とグループでの重み共有を入れたKAT-Tは74.6%、KAT-Bは82.3%(DeiT-Bは81.8%)とMLP版を上回っています。この結果を踏まえると、大規模用途ではKATのように計算効率と学習安定性を改善した実装を優先して検討するのが妥当です。

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

2026年11月1日時点で、PyPIの最新版は0.2.8(2024年11月14日公開)、GitHubのmasterの最終コミットは2025年1月19日です。リポジトリはアーカイブされていません。MITライセンスの表示条件を守れば利用や改変は可能ですが、PyTorchの新バージョンへの追随やバグ修正は期待しにくい状況です。高速化版のefficient-kanやFastKANも2024年夏以降は更新されていません。本番に組み込むなら自前で保守する前提で判断してください。

関連記事

お気に入りに入れた記事の一覧

一創の公式 SNS

X では毎朝の新着記事と IT ニュースの速報を、YouTube・TikTok・Instagram・LinkedIn・Facebook では記事の解説動画を配信しています。

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.29 テックブログ ソニー生命の不正アクセス:38.5万件の対象確認と窓口、停止中の手続き
  2. 2026.10.31 テックブログ 松屋の不正アクセス:237万件の対象確認と窓口、漏れたパスワードの守り方
  3. 2026.10.31 テックブログ 無印良品の情報漏洩:MUJIアプリ最大2,726万件の対象確認となりすましメール対策
  4. 2026.10.27 テックブログ Joshin(ジョーシン)不正アクセス:最大600万件の対象とサブスク初期パスワードの対処
  5. 2026.10.28 テックブログ リンツ不正アクセス:314万件の対象確認とパスワード強制リセット後の対処

RELATED POSTS 関連記事

目次