1. Introducción
El descenso por gradiente es el motor que impulsa el aprendizaje de casi todas las redes neuronales modernas. La idea es elegantemente simple: dado un “paisaje” definido por una función de pérdida, queremos encontrar el punto más bajo — el mínimo. En cada paso, calculamos la dirección de máxima subida (el gradiente) y nos movemos en la dirección opuesta.
Esta simulación te permite visualizar ese proceso en superficies 2D. Puedes colocar múltiples partículas (hasta 8) en diferentes posiciones del paisaje y observar cómo cada una desciende siguiendo el gradiente. Puedes alternar entre cuatro optimizadores distintos y cinco funciones de pérdida, viendo en tiempo real cómo las decisiones algorítmicas afectan la trayectoria de convergencia.
El descenso por gradiente en 2D es conceptualmente idéntico al entrenamiento de una red neuronal con millones de parámetros — solo que en dimensiones que podemos ver.
2. Conceptos Fundamentales
2.1 La función de pérdida
Una función de pérdida L(\boldsymbol{\theta}) mide qué tan lejos está un modelo de la solución ideal. Los parámetros del modelo \boldsymbol{\theta} = (\theta_1, \theta_2) definen un punto en el “paisaje”. El objetivo del entrenamiento es encontrar los valores de \boldsymbol{\theta} que minimizan L.
2.2 El gradiente
El gradiente \nabla L(\boldsymbol{\theta}) es un vector que apunta en la dirección de máximo crecimiento de L:
\nabla L(\boldsymbol{\theta}) = \left(\frac{\partial L}{\partial \theta_1}, \frac{\partial L}{\partial \theta_2}\right)
Su magnitud \|\nabla L\| indica cuán empinada es la superficie en ese punto. En un mínimo, el gradiente es cero (o muy cercano a cero).
2.3 La regla de actualización
La regla fundamental del descenso por gradiente es:
\boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta \nabla L(\boldsymbol{\theta}_t)
donde \eta es el learning rate. El signo negativo invierte la dirección: nos movemos cuesta abajo.
2.4 Mínimos locales vs. globales
Un mínimo local es un punto donde L es menor que en todos los puntos cercanos, pero no necesariamente el más bajo de toda la superficie. El mínimo global es el punto más bajo absoluto. Las superficies no convexas (como Rastrigin) tienen muchos mínimos locales que pueden “atrapar” al optimizador.
3. La Interfaz
3.1 Estructura general
| Área | Ubicación | Función |
|---|---|---|
| Canvas principal | Izquierda | Mapa de contornos 2D o superficie 3D isométrica |
| Botones de vista | Esquina sup-izq del canvas | Alternar entre Contour 2D y Surface 3D |
| Tooltip | Sigue al mouse | Muestra coordenadas, loss y gradiente bajo el cursor |
| Badge de convergencia | Centro inferior del canvas | Aparece cuando todas las partículas han convergido |
| Panel de controles | Derecha (360px) | Ecuación, controles, estadísticas, explicaciones |
3.2 Vista Contour 2D
El mapa de contornos muestra la superficie de pérdida vista desde arriba. Los colores representan la altura (loss):
- Azul oscuro/teal: regiones de loss bajo (valles, mínimos)
- Ámbar/rojo: regiones de loss alto (cimas, mesetas)
- Líneas blancas: iso-curvas de nivel constante (18 niveles)
- Cruceta verde: posición del mínimo global conocido
- Flechas blancas (opcional): campo vectorial del gradiente negativo
3.3 Vista Surface 3D
Proyección isométrica de la superficie con iluminación Phong. Las partículas se muestran sobre la superficie con sus trazas. Útil para apreciar la geometría de valles y puntos de silla.
3.4 Las partículas
Cada partícula es un “optimizador independiente” que desciende por la superficie:
- Punto coloreado: posición actual (roja, azul, verde, ámbar, violeta, cyan, rosa, lima)
- Estela: trayectoria recorrida (últimos 200 pasos), con transparencia progresiva
- Flecha: dirección del gradiente negativo (dirección de descenso)
- Anillo verde: indica convergencia (\|\nabla L\| < 0.005)
4. Controles Interactivos
4.1 Función de pérdida
Menú desplegable con cinco superficies:
| Función | Ecuación | Mínimo | Dificultad |
|---|---|---|---|
| Quadratic Bowl | L = \theta_1^2 + \theta_2^2 | (0, 0) | Fácil — convexo |
| Rosenbrock | L = (1-\theta_1)^2 + 100(\theta_2-\theta_1^2)^2 | (1, 1) | Difícil — valle curvado |
| Rastrigin | L = 20 + \sum(\theta_i^2 - 10\cos(2\pi\theta_i)) | (0, 0) | Muy difícil — multi-modal |
| Saddle Point | L = \theta_1^2 - \theta_2^2 | No hay | Punto de silla en origen |
| Beale | (1.5-\theta_1+\theta_1\theta_2)^2 + \ldots | (3, 0.5) | Difícil — asimétrica |
Checkbox “Mostrar campo vectorial”: superpone flechas que muestran la dirección del gradiente negativo en una cuadrícula de 20 \times 20 puntos.
4.2 Optimizador
| Optimizador | Parámetros | Descripción |
|---|---|---|
| SGD | \eta | Descenso puro por gradiente |
| SGD + Momentum | \eta, \beta | Acumula velocidad como inercia física |
| RMSProp | \eta | Learning rate adaptativo por dimensión |
| Adam | \eta, \beta_1 | Combina momentum + learning rate adaptativo |
4.3 Parámetros
| Control | Rango | Default | Escala |
|---|---|---|---|
| Learning rate (\eta) | 10^{-4} – 10^{0} | 0.01 | Logarítmica |
| Momentum (\beta) | 0.00 – 0.99 | 0.90 | Lineal |
El slider de learning rate usa escala logarítmica: cada posición del slider corresponde a una potencia de 10, cubriendo cuatro órdenes de magnitud.
4.4 Control de ejecución
| Botón | Acción |
|---|---|
| Iniciar/Pausar | Activa/pausa la optimización continua |
| 1 Paso | Ejecuta una sola actualización para todas las partículas |
| 10 Pasos | Ejecuta 10 actualizaciones |
| Reset | Elimina todas las partículas y reinicia el estado |
Velocidad: 1 a 100 steps por segundo.
Interacción con el canvas: click para colocar una nueva partícula en esa posición. En vista 3D, la partícula se coloca en una posición aleatoria.
4.5 Panel de estadísticas
Muestra para la primera partícula (P1): número de partículas, step global, mejor loss alcanzado, loss actual, coordenadas (\theta_1, \theta_2), magnitud del gradiente |\nabla L|, y gráfica del historial de loss (escala logarítmica).
4.6 Panel de partículas
Lista de todas las partículas activas con su color, nombre, loss actual y número de pasos. Un checkmark indica convergencia.
5. Las Matemáticas
5.1 SGD (Stochastic Gradient Descent)
La actualización más simple:
\boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta \nabla L(\boldsymbol{\theta}_t)
Es eficiente pero puede ser lento en valles estrechos (oscila de lado a lado) y no tiene mecanismo para escapar mínimos locales poco profundos.
5.2 SGD con Momentum
Introduce una “velocidad” \mathbf{v} que acumula gradientes pasados:
\mathbf{v}_t = \beta \mathbf{v}_{t-1} - \eta \nabla L(\boldsymbol{\theta}_t) \boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t + \mathbf{v}_t
El parámetro \beta \in [0, 1) controla cuánta “inercia” acumula la partícula. Con \beta = 0.9, la partícula mantiene el 90% de su velocidad anterior — como una bola rodando cuesta abajo que gana impulso.
5.3 RMSProp
Adapta el learning rate por cada dimensión dividiendo por la raíz cuadrada de la media exponencial de gradientes al cuadrado:
s_t = \beta_2 s_{t-1} + (1 - \beta_2)(\nabla L)^2 \boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \frac{\eta}{\sqrt{s_t} + \epsilon} \nabla L(\boldsymbol{\theta}_t)
En dimensiones donde el gradiente es consistentemente grande, s crece y el paso efectivo se reduce. En dimensiones con gradiente pequeño, el paso se amplifica. Esto equilibra la velocidad de descenso en todas las direcciones.
5.4 Adam (Adaptive Moment Estimation)
Combina las ideas de Momentum y RMSProp con corrección de sesgo:
m_t = \beta_1 m_{t-1} + (1 - \beta_1)\nabla L v_t = \beta_2 v_{t-1} + (1 - \beta_2)(\nabla L)^2 \hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 - \beta_2^t} \boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \frac{\eta \hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}
Los términos \hat{m}_t y \hat{v}_t corrigen el sesgo hacia cero que tienen las medias exponenciales en los primeros pasos (cuando \beta^t es grande).
5.5 Propiedades de las superficies
Convexidad: una función L es convexa si L(\alpha \mathbf{x} + (1-\alpha)\mathbf{y}) \leq \alpha L(\mathbf{x}) + (1-\alpha)L(\mathbf{y}) para todo \alpha \in [0,1]. Las funciones convexas tienen un único mínimo global. Solo Quadratic Bowl es convexa en esta simulación.
Número de condición: para la función cuadrática L = a\theta_1^2 + b\theta_2^2, el número de condición es \kappa = \max(a,b)/\min(a,b). Cuanto mayor es \kappa, más “alargados” son los contornos y más oscila SGD. La Rosenbrock tiene \kappa efectivo muy alto en el valle.
Punto de silla: un punto donde \nabla L = 0 pero no es un mínimo ni un máximo. La matriz Hessiana tiene eigenvalores de signos opuestos. En dimensiones altas, los puntos de silla son mucho más comunes que los mínimos locales.
6. Sonificación
6.1 Sonido del descenso
Durante la optimización, cada paso produce un sonido cuya frecuencia depende del valor de loss:
f = 180 + \min(\log(L+1) \cdot 80, \, 600) \text{ Hz}
- Loss alto: frecuencia alta (~780 Hz), más agudo
- Loss bajo: frecuencia baja (~180 Hz), más grave
- Volumen: proporcional a la magnitud del gradiente (más empinado = más fuerte)
Los sonidos se throttlean a un máximo de 10 por segundo para evitar saturación.
6.2 Acorde de convergencia
Cuando una partícula converge (\|\nabla L\| < 0.005), se reproduce un acorde de Do mayor ascendente: C_4–E_4–G_4–C_5 (261–330–392–523 Hz), cada nota separada por 60ms.
6.3 Formas de onda disponibles
- Sine: suave, indica descenso estable
- Triangle: ligeramente más brillante, útil para distinguir frecuencias
- Sawtooth: timbre buzzy, hace más evidentes los cambios de frecuencia
7. Guía Paso a Paso
Experimento 1: El cuenco cuadrático
- Selecciona Quadratic Bowl y optimizador SGD
- Haz click en una esquina del canvas para colocar una partícula lejos del centro
- Click en Iniciar — observa cómo desciende en línea recta hacia (0,0)
- Prueba con \eta = 0.5: la partícula converge rápido
- Ahora \eta = 0.001: convergencia mucho más lenta
- Coloca una segunda partícula en otra esquina. Ambas convergen al mismo punto
- Activa el campo vectorial para ver las flechas apuntando al centro
Experimento 2: El valle de Rosenbrock
- Cambia a Rosenbrock y coloca una partícula en (-1.5, -1.5)
- Con SGD, observa cómo baja rápidamente al valle pero luego avanza muy lentamente a lo largo de él
- Cambia a SGD + Momentum (\beta = 0.9): la partícula gana impulso y recorre el valle más rápido
- Prueba Adam: convergencia más directa, menos oscilaciones
- Coloca varias partículas para comparar trayectorias desde diferentes puntos de inicio
Experimento 3: Mínimos locales en Rastrigin
- Selecciona Rastrigin — nota los múltiples “pozos” en el mapa de contornos
- Coloca 5-6 partículas en diferentes posiciones con SGD
- Observa cómo la mayoría quedan atrapadas en mínimos locales, no en el global (0,0)
- Repite con Momentum y \eta más alto: algunas partículas logran saltar entre mínimos
- Esto demuestra por qué encontrar el mínimo global es un problema difícil
Experimento 4: El punto de silla
- Selecciona Saddle Point (L = \theta_1^2 - \theta_2^2)
- Coloca una partícula exactamente en el centro — se queda atrapada (gradiente cercano a cero)
- Coloca una ligeramente desplazada: se aleja del punto de silla
- Con Momentum, las partículas cruzan más rápidamente la región de silla
- Observa la vista 3D para ver la geometría de “silla de montar”
Experimento 5: Comparación de optimizadores
- Elige Rosenbrock
- Coloca una partícula roja con SGD. Anota cuántos pasos hasta loss < 0.01
- Reset. Coloca una con Momentum. Compara
- Reset. Prueba RMSProp
- Reset. Prueba Adam
- ¿Cuál converge más rápido? ¿Cuál tiene la trayectoria más suave?
8. Conceptos Avanzados
8.1 Learning rate scheduling
En la práctica, el learning rate no se mantiene constante. Estrategias comunes:
- Step decay: reducir \eta por un factor cada N epochs
- Cosine annealing: \eta_t = \eta_{\min} + \frac{1}{2}(\eta_{\max} - \eta_{\min})(1 + \cos(\pi t/T))
- Warmup: empezar con \eta muy bajo y aumentar linealmente durante los primeros pasos
8.2 Gradient clipping
La simulación implementa gradient clipping: si \|\nabla L\| > 100, el gradiente se recorta a magnitud 100. Esto previene la “explosión de gradientes” que ocurre en superficies con pendientes extremas (como Beale lejos del mínimo). También limita el tamaño del paso a 1 unidad.
8.3 Paisajes de pérdida reales
Las superficies de esta simulación tienen 2 parámetros. Las redes neuronales reales tienen millones. En dimensiones altas:
- Los mínimos locales son raros; los puntos de silla son ubicuos
- La mayoría de los mínimos locales tienen loss muy similar al global (el paisaje es “benigno”)
- Las direcciones de alta curvatura son pocas; la mayoría son “planas” — el descenso ocurre en un subespacio de baja dimensión
8.4 Convergencia y tasa de convergencia
Para funciones convexas con constante de Lipschitz \ell del gradiente, SGD con \eta \leq 1/\ell garantiza:
L(\boldsymbol{\theta}_T) - L(\boldsymbol{\theta}^*) \leq \frac{\|\boldsymbol{\theta}_0 - \boldsymbol{\theta}^*\|^2}{2\eta T}
Es decir, convergencia O(1/T). Con funciones fuertemente convexas (como Quadratic Bowl), la tasa mejora a convergencia lineal O(\kappa^T) donde \kappa < 1.
8.5 Visualización logarítmica
La simulación aplica \log(L+1) para la visualización de contornos y colores. Esto comprime el rango dinámico de funciones como Rosenbrock (donde L varía de 0 a >10^4) y hace visibles los detalles cerca del mínimo.
9. Ejercicios
Ejercicio 1: Learning rate óptimo
Para la función Quadratic Bowl, encuentra el learning rate más alto que permita convergencia estable con SGD. ¿Qué ocurre cuando \eta > 1? ¿Y cuando \eta = 1 exactamente? Relaciona tu observación con el hecho de que el gradiente de L = \theta^2 es 2\theta.
Ejercicio 2: Momentum y oscilaciones
Usa la función Quadratic Bowl con un learning rate deliberadamente alto (\eta = 0.3). Primero, observa las oscilaciones con SGD puro. Luego activa Momentum con \beta = 0.9. ¿Mejora o empeora la situación? Prueba \beta = 0.5. ¿Por qué valores altos de momentum pueden amplificar las oscilaciones?
Ejercicio 3: Adam vs. SGD en Rosenbrock
Coloca una partícula en (-1.5, 1.5) en la función Rosenbrock. Ejecuta 500 pasos con SGD (\eta = 0.001) y anota el loss final. Repite con Adam (\eta = 0.001). ¿Cuál está más cerca del mínimo (1,1)? ¿Qué papel juega la adaptación del learning rate por dimensión?
Ejercicio 4: Escape de mínimos locales
En Rastrigin, ¿puedes encontrar una combinación de optimizador, learning rate y momentum que permita a una partícula escapar de un mínimo local y llegar al global? Experimenta con al menos 3 configuraciones y documenta los resultados.
Ejercicio 5: Geometría del punto de silla
En la función Saddle Point, activa el campo vectorial. Observa las flechas alrededor del origen. ¿En qué direcciones apuntan las flechas hacia el origen? ¿En cuáles se alejan? Relaciona esto con los eigenvalores de la Hessiana H = \begin{pmatrix} 2 & 0 \\ 0 & -2 \end{pmatrix}.
Ejercicio 6: Trayectorias de Beale
En la función Beale, coloca 4 partículas en las cuatro esquinas del espacio con Adam (\eta = 0.01). ¿Cuántas llegan al mínimo en (3, 0.5)? ¿Cuántas divergen o se quedan atrapadas? ¿Cambia el resultado con \eta = 0.001?
10. Glosario
| Término | Definición |
|---|---|
| Función de pérdida (L) | Función que mide el error del modelo; el objetivo es minimizarla |
| Gradiente (\nabla L) | Vector de derivadas parciales que apunta en la dirección de máximo crecimiento |
| Learning rate (\eta) | Tamaño del paso en la dirección del gradiente negativo; controla velocidad vs. estabilidad |
| SGD | Stochastic Gradient Descent — actualización directa \theta \leftarrow \theta - \eta\nabla L |
| Momentum (\beta) | Acumulación de velocidad usando gradientes pasados; ayuda a cruzar valles |
| RMSProp | Optimizador que adapta \eta por dimensión usando media de gradientes al cuadrado |
| Adam | Optimizador que combina momentum y learning rate adaptativo con corrección de sesgo |
| Mínimo local | Punto donde L es menor que en su entorno, pero no necesariamente el más bajo globalmente |
| Mínimo global | Punto con el valor más bajo de L en todo el dominio |
| Punto de silla | Punto con \nabla L = 0 donde la Hessiana tiene eigenvalores positivos y negativos |
| Convergencia | Estado donde \|\nabla L\| es suficientemente pequeño (< 0.005 en esta simulación) |
| Mapa de contornos | Visualización 2D de una superficie donde líneas conectan puntos de igual valor |
| Campo vectorial | Representación visual del gradiente negativo en cada punto del espacio |
| Gradient clipping | Técnica que recorta el gradiente si su magnitud supera un umbral, previniendo explosiones |
| Convexidad | Propiedad de una función que garantiza un único mínimo global |
| Número de condición (\kappa) | Ratio entre curvatura máxima y mínima; valores altos indican optimización difícil |
| Corrección de sesgo | Ajuste en Adam que compensa la inicialización en cero de las medias exponenciales |
| Hessiana | Matriz de segundas derivadas; sus eigenvalores indican la curvatura de la superficie |
11. Referencias
Cauchy, A. (1847). “Méthode générale pour la résolution des systèmes d’équations simultanées.” Comptes Rendus de l’Académie des Sciences, 25, 536–538.
Robbins, H. & Monro, S. (1951). “A Stochastic Approximation Method.” The Annals of Mathematical Statistics, 22(3), 400–407.
Polyak, B. T. (1964). “Some methods of speeding up the convergence of iteration methods.” USSR Computational Mathematics and Mathematical Physics, 4(5), 1–17.
Hinton, G. E. (2012). “Neural Networks for Machine Learning — Lecture 6a: Overview of mini-batch gradient descent.” Coursera.
Kingma, D. P. & Ba, J. (2015). “Adam: A Method for Stochastic Optimization.” Proceedings of ICLR 2015. arXiv:1412.6980.
Rosenbrock, H. H. (1960). “An Automatic Method for Finding the Greatest or Least Value of a Function.” The Computer Journal, 3(3), 175–184.
Goodfellow, I., Bengio, Y. & Courville, A. (2016). Deep Learning, Chapter 8: Optimization for Training Deep Models. MIT Press.
Ruder, S. (2016). “An Overview of Gradient Descent Optimization Algorithms.” arXiv:1609.04747.