← Volver a Aprende con CDIA

Fundamentos del aprendizaje estadísticoDescenso de gradiente

IntermedioAprendizaje estadístico8 min de lectura

Descenso de gradiente

El algoritmo que entrena casi todos los modelos: ajustar los parámetros paso a paso, siempre en la dirección que más reduce el error. Bajar la montaña con niebla.

El descenso de gradiente es el algoritmo que entrena a casi todos los modelos modernos, desde una regresión hasta una red neuronal gigante. La idea es simple: ajustar los parámetros paso a paso, siempre en la dirección que más reduce el error.

La intuición: bajar la montaña

Imagina que estás en una montaña con niebla y quieres llegar al valle. No ves el fondo, pero sí puedes sentir la pendiente bajo tus pies. La estrategia obvia: dar un paso hacia donde más baja, y repetir.

En aprendizaje automático, la "montaña" es la función de costo (por ejemplo el MSE), la "posición" son los parámetros del modelo, y la "pendiente" es el gradiente: la derivada que indica hacia dónde crece el error. Como queremos bajarlo, damos pasos en la dirección opuesta al gradiente.

mínimo parámetro θ → costo 𝓛 →
El algoritmo parte arriba y baja hacia el fondo del valle; a medida que se acerca al mínimo, el gradiente se aplana y los pasos se hacen más pequeños.

La regla de actualización

Cada parámetro se corrige restándole el gradiente del costo, escalado por un factor :

  • Si la pendiente es positiva (el error crece al aumentar ), lo bajamos.
  • Si es negativa, lo subimos.
  • Cuando el gradiente llega a cero, estamos en un mínimo y el algoritmo se detiene.

La tasa de aprendizaje

El factor (learning rate) es el tamaño de cada paso, y es el hiperparámetro más delicado:

  • muy pequeña: avanza lentísimo, tarda demasiado en converger.
  • muy grande: da saltos que se pasan del valle y el error puede rebotar o incluso diverger.
  • justa: baja rápido y estable hacia el mínimo.

En código

Minimizar una función sencilla deja ver el bucle completo. Busquemos el mínimo de , que está en :

import numpy as np

def f(w):    return (w - 3) ** 2   # función de costo
def grad(w): return 2 * (w - 3)    # su gradiente (derivada)

w = 0.0        # punto de partida
eta = 0.1      # tasa de aprendizaje
for _ in range(50):
    w -= eta * grad(w)  # un paso en contra del gradiente

print(round(w, 3))  # ≈ 3.0 → encontró el mínimo

Cambiar eta a un valor grande (por ejemplo 1.1) hace que w se dispare en vez de converger: así se ve, en vivo, por qué la tasa de aprendizaje importa tanto.

Variantes según cuántos datos usa cada paso

  • Batch: usa todos los datos para calcular cada gradiente. Preciso pero lento con muchos datos.
  • Estocástico (SGD): usa un solo ejemplo por paso. Rápido y ruidoso; ese ruido incluso ayuda a escapar de malos mínimos.
  • Mini-batch: usa un grupo pequeño (32, 64, 128...). El equilibrio que usan casi todas las redes neuronales.

Cuidados

  • Escalado: si las variables tienen escalas muy distintas, el descenso zigzaguea. Conviene estandarizarlas primero.
  • Mínimos locales: en funciones no convexas (como las redes neuronales) el algoritmo puede detenerse en un valle que no es el más profundo. En la práctica, suele bastar con uno "suficientemente bueno".

Para llevar

El descenso de gradiente ajusta los parámetros dando pasos en contra del gradiente del costo, con un tamaño fijado por la tasa de aprendizaje. Es el motor que entrena desde una regresión logística hasta un LLM: la misma idea de "bajar la montaña", repetida millones de veces.