KAN Backbone
ForeBlocks ships a Kolmogorov–Arnold Network (KAN) backbone for time-series forecasting in foreblocks.kan. Instead of fixed activation functions on neurons, KAN places learnable, basis-expanded functions on the edges of the network. This implementation patches the input series, expands each patch through one or more orthogonal polynomial families, and optionally routes between families with a token-level mixture-of-experts (MoKAN) router.
The KAN backbone is a specialist subsystem: it is not part of the top-level foreblocks public API. Import it directly from foreblocks.kan.
When to use it
- You want a non-Transformer, non-recurrent backbone with strong inductive bias for smooth/periodic structure.
- You want to mix several basis families (e.g. Chebyshev + Fourier + wavelet) and let a router pick per token.
- You are comparing alternative function approximators against the standard forecasting stack.
If your baseline ForecastingModel run is not working yet, start there first — see Getting Started.
Minimal example
KANModel consumes a [B, T, C] series and returns a [B, H, C] forecast, where T = context_window, H = target_window, and C = c_in.
import torch
from foreblocks.kan import KANModel
model = KANModel(
c_in=4, # number of input channels (features)
context_window=48, # input length T
target_window=24, # forecast horizon H
patch_len=16, # patch size
stride=8, # patch stride
d_model=64,
depth=2, # number of KAN blocks
revin=True, # reversible instance norm on inputs
)
x = torch.randn(8, 48, 4) # [B, T, C]
y = model(x) # [B, 24, 4] -> [B, H, C]Pass a subset via the families argument; per-family hyperparameters are exposed as keyword arguments (for example jacobi_alpha, jacobi_beta, wavelet_num, fourier_base_freq). Fine-grained layer behaviour can be configured with PolyLayerConfig.
Mixture of families (MoKAN routing)
When multiple families are active, a token-level router (TokenRouter, configured with RouterConfig) selects the top-k families per token. The relevant KANModel knobs are:
top_k— number of families selected per token (default2)router_temperature,router_hidden— router softmax temperature and widthload_balance_coef— auxiliary load-balancing loss weight
Key constructor arguments
| Argument | Purpose |
|---|---|
c_in, context_window, target_window | input channels, input length, forecast horizon |
patch_len, stride, padding_patch | patching of the input series |
d_model, depth | hidden width and number of KAN blocks |
families | sequence of PolyFamily instances to expand through |
revin, affine, subtract_last | reversible instance normalization options |
top_k, router_*, load_balance_coef | MoKAN routing controls |
head_*, block_*, final_norm | forecast head and block regularization |
Related pages
- Transformer Guide — the standard backbone and attention variants
- Hybrid Mamba Guide — the SSM-based backbone
- Getting Started