seismic-descent

Seismic Optimizer para PyTorch

Este documento explica la implementación del algoritmo Seismic Descent como un optimizador estándar de PyTorch.

Descripción General

Los optimizadores tradicionales como SGD o Adam utilizan la estocasticidad en cada paso (muestreo de mini-lotes o ruido de pesos). SeismicOptimizer introduce un campo de ruido dinámico y correlacionado espacialmente sobre todo el espacio de parámetros del modelo.

En cada paso, el optimizador suma el gradiente analítico de este campo de ruido al gradiente de la pérdida. El campo de ruido vibra con una frecuencia y un esquema de amplitud específicos (“temblores”), lo que ayuda a que los parámetros del modelo se “deslicen” fuera de los mínimos locales agudos hacia valles más amplios y estables.

Fundamentación Matemática

El campo de ruido $\eta(w, t)$ se aproxima utilizando Random Fourier Features (RFF):

\[\eta(w, t) = \sqrt{\frac{2}{R}} \cdot A(t) \cdot \sum_{r=1}^R \cos(\omega_r \cdot w + t \cdot \text{drift}_r + \phi_r)\]

Donde:

La regla de actualización es: \(w_{t+1} = w_t - \gamma \cdot (\nabla_w L + \nabla_w \eta)\)

El gradiente $\nabla_w \eta$ se calcula analíticamente: \(\nabla_w \eta = -\sqrt{\frac{2}{R}} \cdot A(t) \cdot \sum_{r=1}^R \sin(\omega_r \cdot w + \text{offset}) \cdot \omega_r\)

Parámetros de Configuración

Configuraciones Recomendadas (Best Practices - MNIST)

Nuestros benchmarks sugieren que, a diferencia del SGD estándar, Seismic Descent se beneficia de una Tasa de Aprendizaje (LR) más alta combinada con una Amplitud de Ruido más baja:

Parámetro Valor Recomendado
lr 0.1
noise_amplitude 0.1
noise_decay 0.999
n_cycles 10+

Observación: Una noise_amplitude alta (>1.0) combinada con una lr alta (>0.01) puede causar explosión del gradiente en redes neuronales. Mantén la amplitud sutil para modelos de deep learning.

Escalabilidad y Memoria

La implementación actual utiliza un Campo de Características Global. Concatena todos los parámetros del modelo en un solo vector y aplica una única proyección RFF.

Implementación

El optimizador está definido en seismic_optimizer.py.

Ejemplo de uso:

from seismic_optimizer import SeismicOptimizer

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