Quantum-inspired Kolmogorov Arnold Networks
Project description
QKAN: Quantum-inspired Kolmogorov-Arnold Network
This is the official repository for the paper: "Quantum Variational Activation Functions Empower Kolmogorov-Arnold Networks"
📖 Documentation: https://qkan.jimq.cc/
We provide a PyTorch implementation of QKAN with:
- Pre- and post-activation processing support
- Grouped QVAFs for efficient training
- Plot the nodes and pruning unnecessary nodes
- Layer extension for more complex features
- and more ...
A basic PennyLane version of the quantum circuit is also included for demonstration, but not optimized for performance.
Installation
You can install QKAN using pip:
pip install qkan
If you want to install the latest development version, you can use:
pip install git+https://github.com/Jim137/qkan.git
To install QKAN from source, you can use the following command:
git clone https://github.com/Jim137/qkan.git && cd qkan
pip install -e .
It is recommended to use a virtual environment to avoid conflicts with other packages.
python -m venv qkan-env
source qkan-env/bin/activate # On Windows: qkan-env\Scripts\activate
pip install qkan
Quick Start
Here's a minimal working example for function fitting using QKAN:
import torch
from qkan import QKAN, create_dataset
device = "cuda" if torch.cuda.is_available() else "cpu"
f = lambda x: torch.sin(20*x)/x/20 # J_0(20x)
dataset = create_dataset(f, n_var=1, ranges=[0,1], device=device, train_num=1000, test_num=1000, seed=0)
qkan = QKAN(
[1, 1],
reps=3,
device=device,
seed=0,
preact_trainable=True,
postact_weight_trainable=True,
postact_bias_trainable=True,
ba_trainable=True,
save_act=True, # enable to plot from saved activation
)
optimizer = torch.optim.LBFGS(qkan.parameters(), lr=5e-2)
qkan.train_(
dataset,
steps=100,
optimizer=optimizer,
reg_metric="edge_forward_dr_n",
)
qkan.plot(from_acts=True, metric=None)
You can find more examples in the examples for different tasks, such as function fitting, classification, and generative modeling.
Contributing
We are very welcome to all kinds of contributions, including but not limited to bug reports, documentation improvements, and code contributions.
To start contributing, please fork the repository and create a new branch for your feature or bug fix. Then, submit a pull request with a clear description of your changes.
In your environment, you can install the development dependencies with:
pip install .[dev] # install development dependencies
pip install .[doc] # install documentation dependencies
pip install .[all] # install all optional dependencies
Citation
@article{jiang2025qkan,
title={Quantum Variational Activation Functions Empower Kolmogorov-Arnold Networks},
author={Jiang, Jiun-Cheng and Huang, Morris Yu-Chao and Chen, Tianlong and Goan, Hsi-Sheng},
journal={arXiv preprint arXiv:2509.14026},
year={2025},
url={https://arxiv.org/abs/2509.14026}
}
@misc{jiang2025qkan_software,
title={QKAN: Quantum-inspired Kolmogorov-Arnold Network},
author={Jiang, Jiun-Cheng},
year={2025},
publisher={Zenodo},
doi={10.5281/zenodo.17437425},
url={https://doi.org/10.5281/zenodo.17437425}
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qkan-0.1.5.tar.gz.
File metadata
- Download URL: qkan-0.1.5.tar.gz
- Upload date:
- Size: 47.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e77d15d1292f08a43f7cd631a2a20a65ed4f931220ec8a1a4875c3dc14f2e5e9
|
|
| MD5 |
4b89fd220da8174278376ac78be7b226
|
|
| BLAKE2b-256 |
0f16fa309197136a9f9e52cb505020e5c3159c6135e6462aa3f0dc8b150e8826
|
Provenance
The following attestation bundles were made for qkan-0.1.5.tar.gz:
Publisher:
publish.yml on Jim137/qkan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qkan-0.1.5.tar.gz -
Subject digest:
e77d15d1292f08a43f7cd631a2a20a65ed4f931220ec8a1a4875c3dc14f2e5e9 - Sigstore transparency entry: 972915399
- Sigstore integration time:
-
Permalink:
Jim137/qkan@400b523268b9ca2b58955ef0f146919e6802d56d -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/Jim137
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@400b523268b9ca2b58955ef0f146919e6802d56d -
Trigger Event:
release
-
Statement type:
File details
Details for the file qkan-0.1.5-py3-none-any.whl.
File metadata
- Download URL: qkan-0.1.5-py3-none-any.whl
- Upload date:
- Size: 50.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5083a689c4de934e091aea921f532d753356c8c148fc501a9847096cc6b16550
|
|
| MD5 |
18744807cf578171efa718ac9871f1b9
|
|
| BLAKE2b-256 |
dda41889661968f4dc40c8ebce553efcebb5c0e9dcb75a4237aa5eb0e8947a9d
|
Provenance
The following attestation bundles were made for qkan-0.1.5-py3-none-any.whl:
Publisher:
publish.yml on Jim137/qkan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qkan-0.1.5-py3-none-any.whl -
Subject digest:
5083a689c4de934e091aea921f532d753356c8c148fc501a9847096cc6b16550 - Sigstore transparency entry: 972915410
- Sigstore integration time:
-
Permalink:
Jim137/qkan@400b523268b9ca2b58955ef0f146919e6802d56d -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/Jim137
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@400b523268b9ca2b58955ef0f146919e6802d56d -
Trigger Event:
release
-
Statement type: