ML Atlas

Machine learning desde cero · Lección 1.6 · 7 de 33 lecciones listas · 10 min

Descenso de gradiente: aprender a pequeños pasos

En pocas palabras

El descenso de gradiente busca buenos parámetros bajando paso a paso por el error. La tasa de aprendizaje decide entre avanzar y estallar.

Calentamiento Dos preguntas de lecciones anteriores. Un minuto, y no bloquea la lección.
De la lección 1.5: Regresión lineal: ajustar una recta Con la pendiente fija en cero, ¿qué ordenada en el origen da el MSE más bajo?

Ver la respuesta

Respuesta correcta: La media de los valores objetivo

Para una recta plana, el error cuadrático es mínimo en el promedio, y por eso la media es la línea base natural en regresión.

De la lección 1.4: Vecinos más cercanos: el modelo más simple ¿Por qué suelen estandarizarse las medidas antes de kNN?

Ver la respuesta

Respuesta correcta: Porque una medida en unidades grandes, como gramos, tapa a las demás

La distancia suma las diferencias de las medidas. La masa en miles de gramos tapa el pico en milímetros: con cuatro medidas, 76,7 % sin escalar y 96,1 % tras estandarizar.

En la lección anterior, una fórmula nos dio la mejor recta de una sola vez. Pero una red neuronal con millones de pesos no tiene una fórmula así. ¿Cómo puede una computadora encontrar buenos valores para millones de botones de ajuste si nadie puede decirle dónde está el mejor ajuste? La respuesta es casi vergonzosamente sencilla: nota hacia dónde baja el terreno y da un pequeño paso. Luego lo vuelve a hacer. Pruébalo tú mismo antes de leer la explicación.

Predice y comprueba Puedes elegir entre cuatro tasas de aprendizaje (longitudes de paso): 0,01; 0,1; 0,8 y 1,1. ¿Cuál da la pérdida más baja (el número que dice cuánto se equivoca el modelo) tras 5 pasos?
¿Qué tan seguro estás?

Experimento interactivo

Este experimento interactivo funciona en un navegador con JavaScript activado. El texto que lo rodea describe lo que muestra.

Ver la respuesta

Respuesta correcta: 0,8

Tras 5 pasos la pérdida es 24468 (η = 0,01), 6595 (0,1), 4043 (0,8) y 159823 (1,1); el mínimo es 3890. Con 0,8 el paso es grande, pero todavía no se salta el valle. Con 1,1 cada paso se lo salta con tanta fuerza que la pérdida crece.

Prueba esto

  • Elige una tasa de aprendizaje pequeña y pulsa Paso unas cuantas veces. Mira cómo la recta se mueve un poco en cada paso y la curva de pérdida baja despacio.
  • Pulsa Ejecutar y déjalo correr. ¿La recta acaba cerca de la recta de mínimos cuadrados de la lección anterior?
  • Empieza de nuevo con la tasa de aprendizaje más grande y vuelve a pulsar Paso. Observa la curva de pérdida: en vez de bajar, sube, y la recta oscila sin control. Eso es la divergencia.
  • Prueba las tasas intermedias y encuentra la más grande con la que la pérdida todavía baja de forma constante.

La idea en pocas palabras

Imagina que estás en la ladera de una montaña con una niebla espesa. Quieres llegar al valle, pero solo ves un metro a tu alrededor. Una estrategia sensata: tantear el suelo con los pies, encontrar la dirección en la que baja con más pendiente, dar un paso hacia allí y repetir. Nunca ves el paisaje completo y, sin embargo, paso a paso vas bajando.

En el aprendizaje automático, el «paisaje» es el error del modelo. Cada par posible de pendiente y ordenada en el origen es una posición en el mapa, y la altura en esa posición es el error cuadrático medio de la lección 3. El fondo del valle es la mejor recta. El descenso de gradiente es ese paseo entre la niebla: empezar en algún sitio, medir hacia dónde disminuye el error, mover un poco los parámetros en esa dirección y repetir hasta que el error deje de bajar.

Por qué funciona

La dirección de máximo ascenso de una función la da su gradiente: una lista de derivadas, una por parámetro, que dice cuánto crecería el error si ese parámetro subiera un poquito. Ve en sentido contrario y el error baja. Para cada parámetro w, un paso es:

w ← w − η · ∂L/∂w

Aquí L es la pérdida (el error que minimizamos), ∂L/∂w indica con cuánta fuerza reacciona la pérdida a w, y η (la letra griega eta) es la tasa de aprendizaje, que fija el tamaño del paso. Donde la pendiente es fuerte, los pasos son grandes; cerca del fondo la pendiente se suaviza y los pasos se acortan solos.

Todo depende de la tasa de aprendizaje. Si es demasiado pequeña, cada paso es minúsculo y el paseo dura una eternidad. Si es la adecuada, el error baja rápido y se asienta cerca del mínimo. Si es demasiado grande, cada paso se pasa del valle y aterriza más arriba en la ladera opuesta; el siguiente se pasa todavía más, y el error crece sin límite. Esto se llama divergencia, y es la causa más común de que un entrenamiento «explote».

La belleza del método es que solo necesita una cosa: poder calcular el gradiente en la posición actual. No necesita una fórmula para la respuesta, y funciona igual con dos parámetros que con dos mil millones. Por eso es el motor de casi todas las redes neuronales, incluidos los modelos de lenguaje de la lección 12. En la práctica, el gradiente suele estimarse con un pequeño lote aleatorio de ejemplos en lugar de con todos, lo que hace cada paso más barato y más ruidoso, pero funciona notablemente bien.

Error frecuente

Cuando la pérdida se dispara de repente o se convierte en «NaN» (not a number, «no es un número»), quien empieza suele sospechar de un fallo en su código. Mucho más a menudo, la tasa de aprendizaje es simplemente demasiado grande. La solución es bajarla, no reescribir el modelo. El error opuesto se ve menos: una tasa tan pequeña que la pérdida sigue bajando cuando se detiene el entrenamiento, así que el modelo parece peor de lo que podría ser. Una trampa relacionada son las características en escalas muy distintas —por ejemplo, la edad en años junto a los ingresos en euros—, que convierten el valle en un cañón largo y estrecho donde ninguna tasa de aprendizaje sirve para todas las direcciones. Escalar antes las características facilita mucho el paseo.

Ya tenemos las dos mitades de la receta del aprendizaje: una puntuación y una forma de mejorarla. En la próxima lección las usamos para un nuevo tipo de pregunta: no «¿cuánto?», sino «¿cuál?».

Test

Tres preguntas para comprobar lo aprendido. Elige una respuesta o despliega la solución bajo cada pregunta. Con el teclado: las flechas eligen, Enter o Espacio confirma.

1. ¿Qué le dice el gradiente al algoritmo en cada paso?
Ver la respuesta

Respuesta correcta: En qué dirección y con cuánta pendiente aumenta la pérdida donde estás ahora

El gradiente apunta cuesta arriba, así que dar un paso en contra baja la pérdida, pero solo describe el entorno del punto actual.

2. La pérdida sube más con cada paso. ¿Cuál es la causa más probable?
Ver la respuesta

Respuesta correcta: La tasa de aprendizaje es demasiado grande y cada paso se pasa del mínimo

Con un paso demasiado grande, los parámetros saltan por encima del valle a un punto cada vez más alto, y el error crece.

3. ¿Por qué se usa el descenso de gradiente en las redes neuronales en lugar de una fórmula exacta?
Ver la respuesta

Respuesta correcta: Porque casi nunca hay fórmula para los mejores parámetros, pero el gradiente sí se calcula

El descenso de gradiente solo necesita la pendiente de la pérdida en el punto actual, y esa se puede obtener incluso en modelos con miles de millones de parámetros.

Ideas clave

  • El descenso de gradiente mejora los parámetros dando pasos repetidos en contra del gradiente de la pérdida.
  • La tasa de aprendizaje fija el tamaño del paso: demasiado pequeña es lenta, demasiado grande diverge.
  • Una pérdida que explota suele significar una tasa de aprendizaje demasiado alta, no un código roto.
  • El método solo necesita el gradiente, así que escala de dos parámetros a miles de millones.

Más a fondo: fórmula, código, práctica

Las matemáticas

Toma la recta ŷ = b + w·z, con la pérdida L(w, b) = (1/n) · Σ (yᵢ − b − w·zᵢ)². Su gradiente es ∂L/∂w = −2 · mean(r · z) y ∂L/∂b = −2 · mean(r), donde r = y − ŷ son los residuos. Un paso es w ← w − η·∂L/∂w y b ← b − η·∂L/∂b.

Cuando la variable está estandarizada (mean(z) = 0, mean(z²) = 1), las dos direcciones no interfieren. Cada paso reduce entonces la distancia a los mejores w y b en el factor 1 − 2η.

  • 0 < η < 1: la distancia se reduce y la pérdida baja hasta el mínimo. Cuanto más cerca está η de 0,5, más rápido.
  • η > 1: el factor 1 − 2η es menor que −1, así que su tamaño es mayor que 1, cada paso se pasa más lejos y la pérdida crece sin límite.
  • Sin estandarizar, el rango seguro de η depende de la escala de la variable, así que un solo valor ya no sirve para todas las direcciones.
En código (Python)

La pérdida del lab tras 5 pasos desde w = b = 0, para cuatro tasas de aprendizaje, con el IMC estandarizado (datos de diabetes):

import numpy as np
from sklearn.datasets import load_diabetes

X, y = load_diabetes(return_X_y=True, as_frame=True, scaled=False)
bmi = X["bmi"].to_numpy()
z = (bmi - bmi.mean()) / bmi.std()  # IMC estandarizado, como en el lab
mse = lambda w, b: np.mean((y - (b + w * z)) ** 2)
for lr in [0.01, 0.1, 0.8, 1.1]:
    w, b = 0.0, 0.0  # empezar en el origen
    for _ in range(5):  # cinco pasos con todo el conjunto
        r = y - (b + w * z)
        w, b = w + lr * 2 * np.mean(r * z), b + lr * 2 * np.mean(r)
    print(f"lr {lr}: loss after 5 steps {mse(w, b):.0f}")
w_best, b_best = np.polyfit(z, y, 1)
print(f"minimum: {mse(w_best, b_best):.0f}")

Resultado

lr 0.01: loss after 5 steps 24468
lr 0.1: loss after 5 steps 6595
lr 0.8: loss after 5 steps 4043
lr 1.1: loss after 5 steps 159823
minimum: 3890

El mínimo, 3890, es el MSE de la recta de mínimos cuadrados de la lección 3. Con lr = 0.8 el factor es |1 − 1.6| = 0.6 por paso, que supera al 0,9 de lr = 0.1. Con lr = 1.1 es 1,2, así que la pérdida crece.

Para profesionales
  • Estandariza las variables numéricas antes del descenso de gradiente. Así el cuenco de la pérdida se vuelve redondo y una sola tasa de aprendizaje sirve para todas las direcciones.
  • Grafica siempre la pérdida contra el paso. Una bajada suave es sana. Una subida o un NaN casi siempre indican una tasa de aprendizaje demasiado grande: divídela por 10 y vuelve a probar.
  • No te detengas solo con un número fijo de pasos. Detente también cuando la pérdida apenas cambie, y comprueba que de verdad se haya aplanado y no que solo avance a paso de tortuga.
  • Si escribes un gradiente a mano, compáralo con una estimación por diferencias finitas en unos pocos puntos antes de confiar en una ejecución larga.
  • Cuando existe una forma cerrada, como en la regresión lineal, úsala. El descenso de gradiente se gana su lugar en los modelos que no tienen una fórmula así.

Profundiza en el Atlas

Entradas de la enciclopedia sobre las ideas de esta lección: