Descenso por gradiente: bajar la colina
El algoritmo que entrena casi todo el aprendizaje automático moderno cabe en una línea: moverse en la dirección opuesta al gradiente. Lo difícil es cuánto moverse.
Para este tema conviene tener claro:El gradiente: la dirección de máxima subida
Estás en una montaña con niebla y querés bajar. No ves el valle, pero sí la pendiente bajo tus pies. Das un paso en la dirección más empinada hacia abajo y repetís. Eso es el descenso por gradiente, y es cómo se entrena desde una regresión logística hasta un modelo de lenguaje.
El gradiente apunta para arriba: hay que ir al revés
El gradiente de una función de varias variables es el vector de sus derivadas parciales, y apunta en la dirección de máximo crecimiento. Para minimizar, se va en sentido contrario:
Donde es la tasa de aprendizaje: cuánto se avanza en cada paso. Es información local: dice hacia dónde bajar acá, sin saber nada sobre el terreno más allá.
Antes de seguir, predecí
La tasa de aprendizaje, el hiperparámetro que más arruina
La tasa de aprendizaje es el hiperparámetro que más arruina entrenamientos. Muy chica, converge tan lento que no termina nunca. Muy grande, el paso se pasa del mínimo y puede rebotar o divergir hasta dar infinitos.
El síntoma se lee en la curva de costo: si baja lentísimo y de forma pareja, la tasa es chica; si oscila o explota, es grande. Lo habitual es empezar con un valor razonable y reducirlo a medida que avanza el entrenamiento: pasos grandes para acercarse, chicos para afinar.
Con un solo valle hay garantías; sin él, no
Si la función es convexa —un solo valle, como en regresión lineal o logística— el método llega al mínimo global. Ahí hay garantías teóricas sólidas.
Las redes neuronales no son convexas: hay muchos mínimos locales, mesetas y puntos de ensilladura. La intuición decía que eso sería fatal, y resultó que no: en alta dimensión, los mínimos locales suelen ser casi tan buenos como el global, y el problema real son las ensilladuras, donde el gradiente casi se anula sin estar en un mínimo.
Tocá el lienzo para soltar una partícula, o enfocalo con el tabulador, movete con las flechas y soltala con Enter.
Nadie deriva a mano: diferenciación automática
Calcular el gradiente a mano es inviable para un modelo grande. Lo que se usa es diferenciación automática: la biblioteca registra las operaciones del cálculo y aplica la regla de la cadena hacia atrás, obteniendo derivadas exactas —no aproximaciones numéricas— con un costo comparable al de la pasada hacia adelante.
Eso es lo que hace PyTorch o JAX por detrás, y es lo que permite que uno escriba el modelo y no la derivada.
La geometría del problema importa
La geometría del problema importa mucho. Si un atributo va de 0 a 1 y otro de 0 a 100.000, las curvas de nivel del costo forman un valle largo y angosto, y el gradiente apunta hacia las paredes en vez de hacia el fondo: el descenso zigzaguea y tarda muchísimo.
Estandarizar los atributos redondea esas curvas de nivel y el descenso va derecho. Es la explicación concreta de por qué escalar los datos acelera el entrenamiento, y no una recomendación de manual.
Diagnosticar mirando la curva de costo
Para diagnosticar alcanza con graficar el costo por época. Debe bajar de forma consistente; si sube, la tasa es alta. Si se aplana muy arriba, puede ser tasa baja, mala inicialización o un problema de escala.
Y siempre conviene mirar el costo de entrenamiento junto al de validación: el primero dice si la optimización funciona, el segundo si el modelo generaliza. Son preguntas distintas y se confunden seguido.
El ciclo completo, sin biblioteca
import numpy as np
def entrenar(X, y, tasa=0.01, epocas=100):
n, d = X.shape
pesos = np.zeros(d)
sesgo = 0.0
for _ in range(epocas):
z = X @ pesos + sesgo
p = 1 / (1 + np.exp(-z)) # sigmoide
error = p - y # el gradiente de la entropía cruzada se simplifica a esto
grad_pesos = (X.T @ error) / n
grad_sesgo = error.mean()
pesos -= tasa * grad_pesos # el paso: contra el gradiente
sesgo -= tasa * grad_sesgo
return pesos, sesgoSon cinco líneas y están todas las piezas: calcular la predicción, medir el error, derivar, y mover los parámetros en contra del gradiente. El signo menos es lo único que separa minimizar de maximizar.
La simplificación de p - y no es casualidad: combinar sigmoide con entropía cruzada hace que el
gradiente se reduzca a la diferencia entre lo predicho y lo real. Esa cancelación es la razón
matemática de por qué esas dos se usan juntas.
Lo que hace falta además del gradiente
| Síntoma | Causa probable | Qué hacer |
|---|---|---|
| El costo sube | tasa demasiado alta | bajarla un orden de magnitud |
| El costo no se mueve | tasa muy baja, o gradiente que se desvanece | subirla, o revisar la activación |
| Oscila mucho | lote demasiado chico o tasa alta | subir el lote, bajar la tasa |
| Baja y se estanca alto | el modelo no da: sesgo | más capacidad o mejores atributos |
| Entrena bien y valida mal | sobreajuste | regularizar, más datos, parada temprana |
Cierre
Restar el gradiente multiplicado por la tasa de aprendizaje, y repetir. La tasa decide entre no avanzar y divergir; la convexidad da garantías que las redes no tienen pero igual funcionan; la diferenciación automática calcula las derivadas; y estandarizar arregla la geometría del valle.
Autoevaluación
¿Lo entendiste?
Práctica