Inicio › Temas › Optimización
🎯 Optimización nivel medio
Descenso del gradiente
Bajar la colina siguiendo la dirección de máxima pendiente: el motor del aprendizaje automático.
🕹️ Ábrelo en el curso interactivo (simulador y código ejecutable)
La idea
Para minimizar una función diferenciable f(x, y) no siempre se pueden resolver las ecuaciones ∇f = 0. El descenso del gradiente propone un método iterativo elemental: el gradiente ∇f apunta en la dirección de máximo crecimiento, así que para bajar hay que caminar en la dirección contraria. La regla de actualización es xₖ₊₁ = xₖ − α ∇f(xₖ), donde α > 0 es la tasa de aprendizaje o longitud de paso.
Todo depende de α. Si es demasiado pequeña, el algoritmo avanza a paso de tortuga y necesita miles de iteraciones; si es demasiado grande, salta por encima del mínimo y oscila o diverge. Para una función cuadrática con curvatura máxima L (el mayor valor propio del hessiano), la condición de convergencia es α < 2/L, y la velocidad depende del número de condición L/μ: cuando las curvas de nivel son elipses muy alargadas, la trayectoria zigzaguea en vez de dirigirse al centro. De ahí nacen las mejoras clásicas: momento, que acumula inercia, y los métodos adaptativos como RMSProp o Adam, que ajustan un paso distinto por coordenada.
Si f es convexa, cualquier punto con gradiente nulo es un mínimo global y el método converge al óptimo. Si no lo es, el descenso solo garantiza llegar a un mínimo local o a un punto de silla, y el resultado depende del punto inicial. En aprendizaje profundo se usa la versión estocástica: en cada paso se estima el gradiente con un pequeño lote de datos, lo que abarata enormemente cada iteración y, como efecto colateral, el ruido ayuda a escapar de mínimos poco profundos.
Fórmulas clave
- Actualizaciónxₖ₊₁ = xₖ − α ∇f(xₖ)
- Gradiente∇f = (∂f/∂x, ∂f/∂y)
- Condición de parada‖∇f(xₖ)‖ < ε o |f(xₖ₊₁) − f(xₖ)| < ε
- Paso admisible (cuadrática)0 < α < 2/L, L = mayor valor propio del hessiano
- Número de condiciónκ = L/μ → más grande, más zigzag
- Descenso con momentovₖ₊₁ = β vₖ − α ∇f(xₖ), xₖ₊₁ = xₖ + vₖ₊₁
Dónde se aplica
Entrenar una red neuronal es minimizar una función de pérdida con millones de parámetros: el gradiente se calcula con retropropagación y se aplica exactamente esta regla, en su variante estocástica con momento. En estadística, la regresión logística se ajusta por descenso del gradiente porque sus ecuaciones normales no tienen solución cerrada. En ingeniería, el diseño de formas aerodinámicas usa gradientes obtenidos de simulaciones, y en tomografía la reconstrucción de imágenes minimiza iterativamente la diferencia entre las proyecciones medidas y las simuladas.
Con programación (Python)
# Descenso del gradiente sobre f(x,y) = (x-3)^2 + 5(y+1)^2
def f(x, y):
return (x - 3) ** 2 + 5 * (y + 1) ** 2
def grad(x, y):
return (2 * (x - 3), 10 * (y + 1))
def descenso(alfa, pasos=30):
x, y = -2.0, 2.0
for k in range(pasos):
gx, gy = grad(x, y)
x = x - alfa * gx
y = y - alfa * gy
if (k + 1) % 10 == 0:
print(" iter %2d (%9.4f, %9.4f) f = %12.6f" % (k + 1, x, y, f(x, y)))
return x, y
# La curvatura maxima es L = 10, luego hace falta alfa < 2/L = 0.2
for alfa in (0.02, 0.15, 0.25):
print("tasa alfa =", alfa)
descenso(alfa)
print("Minimo exacto: (3, -1) con f = 0")La versión en JavaScript, editable y ejecutable en el navegador, está en la página interactiva del tema.
Temas relacionados
Derivadas parciales y gradiente · La derivada como límite · Convexidad · Mínimos cuadrados