live

KAN: Redes de Kolmogorov-Arnold y el Fin de los Pesos Fijos

KAN reemplaza los pesos fijos de un MLP por funciones de activacion aprendibles en cada arista (B-splines), logrando mayor precision con menos parametros y ecuaciones interpretables en problemas cientificos.

El problema

Un MLP clasico tiene la forma: capa lineal fija (pesos W) seguida de una activacion no lineal fija (ReLU, GELU). Los pesos se aprenden; la funcion de activacion no. Esta asimetria limita la capacidad expresiva por parametro y hace que la red sea una caja negra: no hay forma de extraer una ecuacion simbolica del modelo entrenado. En tareas cientificas — donde el objetivo final es entender, no solo predecir — esto es un problema fundamental.

KAN (Kolmogorov-Arnold Networks) invierte la logica: elimina los pesos de las capas lineales y pone funciones de activacion aprendibles en cada arista de la red. El resultado es un modelo que puede converger a ecuaciones simbolicas exactas como sin(πx), x², o log(1+e^x) con un numero de parametros ordenes de magnitud menor que un MLP equivalente.

MLP x₁ x₂ x₃ σ(Wx) σ(Wx) y W fijo, σ fija KAN x₁ x₂ x₃ Σ Σ y sin(x) log(x) tanh φᵢⱼ(x) aprendible por arista (B-spline)

Arquitectura y metodo

El teorema de Kolmogorov-Arnold (1957) dice que cualquier funcion continua multivariable f(x₁,...,xₙ) puede escribirse como suma finita de composiciones de funciones univariables continuas. KAN implementa esto como una red de capas donde cada arista (i,j) tiene su propia funcion aprendible φᵢⱼ: ℝ→ℝ.

La salida de un nodo en KAN es simplemente la suma de todas las funciones de arista entrantes:

nodo_j = Σᵢ φᵢⱼ(xᵢ)

Cada φᵢⱼ se parametriza como una B-spline de orden k con G intervalos (knots). Esto da G+k parametros por arista. La eleeccion tipica es k=3 (cubica) y G=5, dando 8 parametros por arista — comparable al coste de una neurona en un MLP estrecho.

Para evitar que la B-spline tenga problemas fuera del dominio de entrenamiento, se anade una activacion base SiLU escalada: φ(x) = w_b * silu(x) + w_s * spline(x), donde w_b y w_s son escalares aprendibles. Esto da estabilidad en extrapolacion.

Simplificacion simbolica: una vez entrenada la red, cada B-spline puede aproximarse con la libreria symbolic del propio paquete KAN — hace regresion simbolica sobre los valores de la spline para encontrar si es sin, exp, x^n u otra funcion elementas. Si el ajuste es bueno (R² > 0.99), se reemplaza la spline por la funcion simbolica exacta.

Contribuciones clave

  1. Activaciones en aristas, no en nodos: Inversion del paradigma MLP que lleva 40 anos sin cambiar.
  2. Interpretabilidad post-hoc real: La simplificacion simbolica funciona — los autores recuperan la ecuacion de Feynman I.15.10 (relatividad especial) con precision exacta desde datos.
  3. Escalado favorable para problemas de baja dimension: En problemas con d<20 variables, KAN escala como O(d) en lugar del O(d²) de un MLP con la misma precision.

Metricas y resultados

En el dataset de ecuaciones de fisica de Feynman (100 ecuaciones exactas):

Modelo Parametros MSE tipico Ecuacion recuperada
MLP 4 capas 41,000 1e-5 No
KAN [2,5,1] 200 1e-7 Si (simbolica exacta)

KAN con 200 parametros supera a un MLP con 41K en precision Y da la ecuacion simbolica. Para datos de ciencia de materiales (prediccion de superconductores), KAN-3 logra R²=0.98 vs R²=0.94 del MLP equivalente.

Pero: en tareas de lenguaje o vision con miles de features, KAN escala peor que un Transformer. No es un reemplazo universal — es una herramienta para el nicho cientifico de baja dimension donde la interpretabilidad importa.

Retos de implementacion

  • pykan vs efficient-kan: La implementacion original de MIT (pip install pykan) es didactica pero lenta — usa bucles Python sobre las aristas. efficient-kan vectoriza las operaciones de spline en CUDA y es 10-100x mas rapido. Para cualquier uso serio usar pip install efficient-kan.
  • Grid de knots fijo: Durante el entrenamiento el grid de la B-spline es fijo. Si los datos cambian de escala, hay que hacer grid extension manualmente — el paquete pykan tiene model.refine(G_nuevo) para esto.
  • Inicializacion de pesos: Si los pesos iniciales de la spline son muy grandes, el gradiente en las capas profundas desaparece. Usar grid_eps=0.02 y normalizar los inputs a [-1,1].
  • Batch size pequeno funciona mejor: Por la naturaleza de las B-splines, la estimacion de los knots mejora con muestras diversas en cada batch. Batch de 512-2048 es mas estable que 64.

Como lo integraria en Zeropithos o Dibro

El caso de uso mas obvio es el modulo de razonamiento sincronistico de Zeropithos. Actualmente las reglas SPARQL son logica simbolica pura y los embeddings son caja negra. KAN podria ser la capa intermedia: tomar como input un vector de features del grafo (centralidad, distancia semantica, activacion de conceptos) y aprender la funcion de resonancia — cuanto dos conceptos se sincronizan — de forma que la propia funcion aprendida sea interpretable como ecuacion. Si KAN aprende que resonancia(a,b) ≈ cos(angle(a,b)) * log(1 + co_occurrencias), eso es una hipotesis teorica automaticamente generada, no solo una prediccion.

Tambien tiene aplicacion directa en el modulo de clasificacion de modulaciones del RF Engine: con 8-12 features de una señal IQ (kurtosis, varianza de fase, etc.), un KAN pequeño podria clasificar con menos parametros que una CNN y dar la ecuacion discriminante — util para explicar por que una señal es FSK y no OOK.

Conclusion

KAN es un recordatorio de que la arquitectura MLP no es inevitable — es solo la primera opcion razonable que encontro el deep learning en los 80. Para problemas cientificos de baja dimension donde la interpretabilidad es requisito, KAN ofrece precision superior con ordenes de magnitud menos parametros y la posibilidad real de obtener la ecuacion simbolica subyacente. No reemplaza los Transformers para lenguaje, pero abre un nicho enorme en ciencia computacional que hasta ahora estaba cubierto solo por regresion simbolica clasica (GPLEARN, PySR).

aqui cualquier cosa mientras cuadramos el logo