seismic-descent

Seismic Descent

Algoritmo de optimización basado en descenso de gradiente sobre un paisaje dinámico perturbado con ruido correlacionado espacialmente.

Seismic Descent

La idea

En lugar de dar saltos aleatorios para escapar de mínimos locales (como Simulated Annealing), se le da un terremoto al suelo. La pelota sigue haciendo lo único que sabe: rodar cuesta abajo. Pero como el suelo tiembla de forma coherente y multiescala, los mínimos locales se convierten temporalmente en cuestas y la pelota escapa sola.

f_total(x, t) = f_original(x) + A(t) * noise(x, t)

La clave frente a SA: el ruido es correlacionado espacialmente — dos puntos cercanos tienen perturbaciones similares. La pelota se desliza hacia otro valle, no se teletransporta. Las octavas del ruido dan exploración gruesa y refinamiento fino en un solo mecanismo.

Ruido en N dimensiones: Random Fourier Features

En 2D se usa Perlin noise directamente. En ND se aproxima un Gaussian Random Field via Random Fourier Features (Rahimi & Recht, 2007):

noise(x) ≈ sqrt(2/R) * A * Σ_r cos(ω_r · x + t*drift_r + φ_r)

donde ω_r ~ N(0, 1/l²·I) son vectores en R^D. Al ser vectores N-dimensionales crean interferencia entre dimensiones y correlación espacial real en ND.

Resultados — Rastrigin (presupuesto de evaluaciones igualado)

Dimensión Seismic media SA media CMA-ES media Seismic vs SA
2D (5k pasos) 0.139 0.410 1.498 ✅ gana
5D 10.3 10.0 6.7 empate
10D 45.3 54.2 16.3 ✅ gana
20D 134 171 32.5 ✅ gana

Resultados — Ackley y Schwefel

Función Seismic vs SA Diagnóstico
Ackley ❌ SA gana Meseta exterior con gradiente ~0 paraliza el descenso
Schwefel empate Dominio enorme, todos los algoritmos fallan por igual

Perfil del algoritmo

Funciona bien cuando:

Falla cuando:

Optimizaciones Recientes (v7 - v14)

El desarrollo del algoritmo ha evolucionado superando importantes cuellos de botella:

Propiedad Clave: Ergodicidad Sísmica

Un descubrimiento fundamental en el desarrollo del algoritmo (consolidado en la v19) es que la exploración generada por el ruido correlacionado debe ser ergódica.

En lugar de sacudir ciegamente a la partícula con “ruido blanco” de alta frecuencia, Seismic Descent genera paisajes topológicos completos y coherentes de baja y alta frecuencia (mediante octavas de RFF), y realiza un morphing (interpolación suave) de un paisaje a otro con el tiempo.

Esta mutación continua garantiza matemáticamente que una partícula, guiada puramente por el gradiente de este “suelo mutante”, acabará explorando y visitando la totalidad del espacio de búsqueda sin quedarse atascada en ciclos infinitos o mesetas. La ergodicidad es lo que permite que el enjambre fluya por el terreno como un líquido, garantizando el escape de los mínimos locales más profundos.

Instalación

pip install numpy noise matplotlib cma

Uso

# Benchmark 2D original
python perlin_opt.py

# Benchmark N-dimensional con RFF (mejor versión)
python perlin_opt_nd_grf.py

# Benchmarks en otras funciones
python benchmark_ackley.py
python benchmark_schwefel.py

Integración con PyTorch

El algoritmo Seismic Descent ahora está disponible como un optimizador estándar de PyTorch. Esto permite entrenar redes neuronales con “temblores” correlacionados espacialmente para escapar de mínimos locales.

from seismic_optimizer import SeismicOptimizer

model = MyModel()
optimizer = SeismicOptimizer(
    model.parameters(), 
    lr=0.01, 
    noise_amplitude=0.5, 
    n_cycles=10
)

Consulta benchmark_mnist.py para un ejemplo completo y docs/pytorch_optimizer.es.md para detalles técnicos.

Último Benchmark (MNIST - 20 Épocas)

Optimizador Precisión Margen
SGD 98.28% Base
Adaptive Floored Seismic 97.90% ✅ Supera a Adam
Adam 97.79% -

Estructura

docs/
  findings_v1.md           — hallazgos sesión 2D, evolución del schedule A(t)
  findings_v2_nd.md        — extensión ND, diagnóstico del ruido
  findings_v3_fairbench.md — benchmark con presupuesto igualado
  findings_v4_rff.md       — Random Fourier Features, resultados Rastrigin ND
  findings_v5_ackley.md    — benchmark Ackley, limitación en mesetas
  findings_v6_schwefel.md  — benchmark Schwefel, perfil completo del algoritmo
  findings_v7_rastrigin_analytic.md  — Benchmark Rastrigin con gradientes analíticos O(1)
  findings_v8_no_abs.md              — Efecto contundente de permitir amplitud negativa
  findings_v9_no_abs_ackley_schwefel.md — Validación en mesetas y en hiper-espacios de Schwefel
  findings_v10_lengthscale.md        — Diagnóstico sobre la compresión de lengthscales
  findings_v11_adam.md               — Demostrando porqué Adam Optimizer asfixia el "terremoto"
  findings_v12_swarm.md              — Seismic Swarm: paralelización del muestreo sobre RFF analítico
  findings_v13_swarm_d.md            — Enjambre estricto N=D y descubrimiento de trade-off de presupuesto
  findings_v14_cycles.md             — Parametrización estricta de la oscilación sísmica a 10 ciclos
  findings_v15_reactive.md           — Terremotos desencadenados por estancamiento (Bang-Bang Control)
  findings_v16_momentum.md           — Momentum Crudo (Heavy-Ball) causando efecto honda y pérdida de octavas
  findings_v17_temporal_octaves.md   — Sismos Fractales: aplicación de Series de Fourier a las octavas de amplitud temporales
  findings_budgets_scale.md          — Evaluación masiva a gran escala (LOW, MEDIUM, HIGH) cruzando CMA-ES
  summary_of_experiments.md          — Historia completa del origen y métricas tras 24h de hackathon
  chat_arena*.md           — conversación original con la idea
  chat_opus4.6.md          — prototipo inicial
perlin_opt.py              — implementación 2D original (Perlin noise)
perlin_opt_nd.py           — extensión ND con value noise
perlin_opt_nd_fairbench.py — benchmark fair (presupuesto igualado)
perlin_opt_nd_grf.py       — Seismic Descent con RFF (versión ND definitiva base)
perlin_opt_nd_grf_analytic*.py — Repositorio incremental de las versiones Analíticas y de Enjambre (v7 a v17)
benchmark_ackley.py        — benchmark genérico, función Ackley
benchmark_schwefel.py      — benchmark función Schwefel
benchmark_budgets.py       — Herramienta CLI de simulación paramétrica Multi-Presupuesto (Scale Up)

Próximos experimentos / Futuro del Proyecto