04

Descenso del gradiente

¿Cómo encuentra una máquina los números correctos sin que nadie se los diga?

11 minRuta ejecutiva

Descenso del gradiente

Con voz. Puedes pausar y saltar a cualquier paso.

Lección completa

Subtítulos

Ya tenemos un modelo con un número por ajustar, el peso, y una forma de medir cuánto se equivoca. Falta lo central: ¿cómo encontrar el peso que se equivoca menos?

Voz

Sin voz: la lección avanza sola con subtítulos.

La voz de esta lección está en preparación: por ahora avanza sola con subtítulos.

0:00 / 0:00

Qué lograrás

  • Explicar qué es la pendiente de la curva de error en un punto (su derivada) y qué indica su signo.
  • Calcular un paso del descenso del gradiente con la regla peso nuevo = peso actual − tasa × pendiente.
  • Predecir el efecto de una tasa de aprendizaje muy pequeña o muy grande, y reconocer el gradiente como la lista de pendientes, una por peso.

Ideas clave

  1. Entrenar es buscar el peso que deja el error más bajo. La máquina no ve la curva completa: solo conoce el error y la pendiente donde está.
  2. La pendiente, o derivada, dice cuánto cambia el error al mover un poco el peso. Negativa: baja hacia la derecha. Positiva: sube. Cero: es el fondo.
  3. La regla es peso nuevo = peso actual − η × pendiente. El signo menos lleva cuesta abajo desde cualquier lado, y los pasos se acortan solos al aplanarse la pendiente.
  4. La tasa de aprendizaje η fija el tamaño del paso: muy pequeña es lenta; muy grande rebota o diverge.
  5. Con muchos pesos, el gradiente es la lista de pendientes, una por peso. El mismo bucle, con variantes como Adam, entrena modelos de cientos de miles de millones de pesos, sin garantía de llegar al mejor valle.

Lo que mucha gente cree

Creencia común La IA «ve» todo el paisaje de errores y salta directamente al mejor punto.

Lo correcto Solo conoce la pendiente justo donde está. Llega al fondo tanteando, paso a paso, y puede terminar en un valle distinto según dónde empiece.

Compruébalo

Cuatro preguntas. Sin nota ni cuenta: sirven para ver si la idea quedó.

ConceptoEn el peso actual, la pendiente del error es negativa. ¿Qué hace el descenso del gradiente con el peso?
ConceptoEn un modelo con muchos pesos, ¿qué es el gradiente?
CálculoUn peso vale 2, la pendiente del error ahí es +4 y la tasa de aprendizaje es 0.1. ¿Cuánto vale el peso después de un paso?
AplicaciónUn equipo informa que durante el entrenamiento el error sube y baja sin estabilizarse. ¿Cuál es la primera hipótesis razonable?

Por dentroPara quien quiere las fórmulas y el código. No hace falta para seguir el curso.

La pendiente y la derivada

Para medir la pendiente de una curva L(w)L(w) en un punto se mueve el peso una cantidad pequeña ε\varepsilon y se divide el cambio del error entre ese movimiento:

L(w+ε)−L(w)ε\frac{L(w+\varepsilon)-L(w)}{\varepsilon}

La derivada L′(w)L'(w) es el valor al que se acerca ese cociente cuando ε\varepsilon se hace cada vez más pequeño. Por eso L(w+ε)≈L(w)+ε L′(w)L(w+\varepsilon)\approx L(w)+\varepsilon\,L'(w): la derivada dice por cuánto hay que multiplicar un cambio pequeño del peso para obtener el cambio del error, y es la pendiente de la recta tangente en ese punto (Goodfellow et al., 2016, §4.3).

En la lección, L(w)=12(w−3)2+1L(w)=\tfrac12(w-3)^2+1, así que L′(w)=w−3L'(w)=w-3. En w=−1w=-1, con ε=0.1\varepsilon=0.1 el error pasa de 9 a 8.605 y el cociente es −0.395/0.1=−3.95-0.395/0.1=-3.95; con ε=0.01\varepsilon=0.01, −3.995-3.995; en el límite, −4-4. En esta curva el cociente vale exactamente (w−3)+ε/2(w-3)+\varepsilon/2. En el peso 6 la derivada es +3+3 y en el 3, el fondo, es 00.

Ojo con el nombre: en la lección 3, el peso ww era la pendiente de la recta del modelo. Aquí la pendiente es otra: la de la curva del error respecto al peso. Y en la práctica no se tantea con un ε\varepsilon: la derivada se calcula con fórmulas exactas y, en una red profunda, con la retropropagación (lección 8).

La regla de actualización

Con un peso, el descenso del gradiente repite

wt+1=wt−η L′(wt)w_{t+1} = w_t - \eta\,L'(w_t)

donde η>0\eta>0 es la tasa de aprendizaje. Como L(w−ε signo(L′(w)))L(w-\varepsilon\,\text{signo}(L'(w))) es menor que L(w)L(w) si ε\varepsilon es suficientemente pequeño, moverse en pasos pequeños con el signo contrario al de la derivada hace bajar el error (Goodfellow et al., 2016, §4.3). En la lección, con η=0.5\eta=0.5: −1→1→2→2.5→2.75→…-1 \to 1 \to 2 \to 2.5 \to 2.75 \to \dots La distancia al fondo se reduce a la mitad en cada paso y los pasos (2, 1, 0.5, 0.25, …) se acortan solos porque la pendiente se aplana.

Con muchos pesos, w=(w1,…,wn)\mathbf{w}=(w_1,\dots,w_n), cada derivada parcial ∂L/∂wi\partial L/\partial w_i mide cómo cambia el error cuando solo aumenta wiw_i, y el gradiente es el vector que las contiene todas:

∇L(w)=(∂L∂w1,…,∂L∂wn),wt+1=wt−η ∇L(wt)\nabla L(\mathbf{w}) = \Big(\frac{\partial L}{\partial w_1},\dots,\frac{\partial L}{\partial w_n}\Big),\qquad \mathbf{w}_{t+1} = \mathbf{w}_t - \eta\,\nabla L(\mathbf{w}_t)

El gradiente apunta cuesta arriba porque, entre todas las direcciones de longitud 1, es la que más hace crecer a LL; por eso se resta (Goodfellow et al., 2016, §4.3).

El método se atribuye a Cauchy, que lo expuso en la sesión del 18 de octubre de 1847 de la Academia de Ciencias de París para resolver sistemas de ecuaciones: cambiaba el sistema por una sola ecuación, la suma de los cuadrados igualada a cero, y hacía bajar esa función paso a paso. El tamaño del paso lo fijaba resolviendo una ecuación de una variable o tomando un valor «suficientemente pequeño» (Cauchy, 1847; Lemaréchal, 2012).

Por qué existe un umbral para la tasa

Para un error cuadrático de una variable, L(w)=h2(w−w∗)2+cL(w)=\tfrac{h}{2}(w-w^*)^2 + c con curvatura h>0h>0, el gradiente es h (w−w∗)h\,(w-w^*) y la distancia al fondo se multiplica por un factor constante en cada paso:

wt+1−w∗=(1−ηh) (wt−w∗)w_{t+1}-w^* = (1-\eta h)\,(w_t-w^*)
  • si 0<ηh<10<\eta h<1, el peso se acerca al fondo sin cruzarlo;
  • si ηh=1\eta h=1, llega al fondo de un salto;
  • si 1<ηh<21<\eta h<2, lo cruza en cada paso pero converge (oscila);
  • si ηh=2\eta h=2, rebota entre dos puntos a la misma distancia del fondo, sin acercarse;
  • si ηh>2\eta h>2, la distancia crece en cada paso: diverge.

Es el análisis clásico de LeCun et al. (1998, §5.1): la tasa óptima de una variable es 1/h1/h, y se diverge si la tasa pasa del doble de la óptima. En la lección h=1h=1. Las cuatro tasas de la escena son un caso lento (0.05: tras 12 pasos sigue a 2.16 del fondo, que estaba a 4), uno que oscila (1.7: cruza el fondo en cada paso, pero se acerca), uno que diverge (2.05: cada salto cae más lejos y el error pasa de 9 a 12.82 en 4 pasos) y uno bueno (0.8: a 0.03 del fondo en 3 pasos). El turno interactivo pide llegar a menos de 0.08 del fondo en diez pasos o menos sin cruzarlo: lo cumplen las tasas de 0.33 a 1.

Una tasa muy pequeña no es del todo inocua en una red real: además de lenta, puede dejar el entrenamiento atascado con un error alto, un efecto que no ocurriría con una función convexa y que se entiende poco (Goodfellow et al., 2016, §11.4.1).

Varias dimensiones: el condicionamiento

En varias dimensiones la curvatura es la matriz hessiana HH. En una cuadrática, wt+1−w∗=(I−ηH)(wt−w∗)\mathbf{w}_{t+1}-\mathbf{w}^*=(I-\eta H)(\mathbf{w}_t-\mathbf{w}^*): en cada dirección propia la distancia se multiplica por 1−ηλi1-\eta\lambda_i. Para converger hace falta η<2/λmax⁡(H)\eta<2/\lambda_{\max}(H) (LeCun et al., 1998), pero el avance en la dirección más plana depende de λmin⁡\lambda_{\min}. Con el número de condición κ=λmax⁡/λmin⁡\kappa=\lambda_{\max}/\lambda_{\min} grande, el error cae despacio y el camino zigzaguea, como en la figura. Con la mejor tasa fija (η=2/(λmax⁡+λmin⁡)\eta = 2/(\lambda_{\max}+\lambda_{\min})) la distancia al fondo se reduce por un factor (κ−1)/(κ+1)(\kappa-1)/(\kappa+1) por paso (Goh, 2017).

En la figura, λmin⁡=1\lambda_{\min}=1 y λmax⁡=7\lambda_{\max}=7 (κ=7\kappa=7), y η=0.2\eta=0.2: en la dirección plana la distancia se multiplica por 0.80.8 en cada paso, y en la empinada por −0.4-0.4 (cambia de lado: el zigzag). La mejor tasa fija sería 0.250.25, con factor 0.750.75. En el punto de partida, (−1,0)(-1, 0), las dos pendientes son −6.24-6.24 y 7.807.80: el gradiente (−6.24, 7.80)(-6.24,\ 7.80) apunta arriba a la izquierda, cuesta arriba, y el camino sale hacia abajo a la derecha.

Paisajes reales

Las curvas de la lección son de juguete: L(w)=12(w−3)2+1L(w)=\tfrac12(w-3)^2+1, el cuenco de dos pesos con curvaturas 1 y 7, y R(w)=0.08w4−0.6w2+0.25w+2R(w)=0.08w^4-0.6w^2+0.25w+2, con dos valles de errores mínimos 0.38 y 1.35. El error de una red real no es convexo: tiene mínimos locales, mesetas y puntos de silla (gradiente cero, pero baja en una dirección y sube en otra). En redes grandes se sospecha hoy que la mayoría de los mínimos locales tienen un error cercano al mejor y que las mesetas y los puntos de silla estorban más que los malos mínimos (Goodfellow et al., 2016, §8.2; Dauphin et al., 2014). El punto de partida importa: puede decidir si el entrenamiento converge, a qué costo y con qué capacidad de generalizar (Goodfellow et al., 2016, §8.4), y cambiar solo la semilla aleatoria puede dar resultados muy distintos, como al ajustar BERT (Dodge et al., 2020).

En código

def descenso(pendiente, w0, eta, pasos):
    w = w0
    historial = [w]
    for _ in range(pasos):
        w = w - eta * pendiente(w)   # peso nuevo = peso actual − tasa × pendiente
        historial.append(w)
    return historial

# error L(w) = 0.5 * (w - 3)**2 + 1  ->  pendiente (derivada): w - 3
print(descenso(lambda w: w - 3, w0=-1.0, eta=0.5, pasos=5))
# [-1.0, 1.0, 2.0, 2.5, 2.75, 2.875]

Lo que viene

En modelos reales el gradiente se calcula sobre un subconjunto de los datos (descenso del gradiente estocástico; Bottou et al., 2018) y se usan optimizadores como Adam (Kingma y Ba, 2015); ambos aparecen en la lección 9. Así se entrenó GPT-3 (175 mil millones de pesos): con Adam, lotes de hasta 3.2 millones de tokens y, en el modelo grande, una tasa de aprendizaje de 6×10−56\times 10^{-5} con calentamiento y caída gradual (Brown et al., 2020, tabla 2.1 y apéndice B). El cálculo eficiente de ∇L\nabla L en redes profundas es la retropropagación (lección 8).

Lente de decisión

Qué significa esta idea si tu trabajo es decidir, no programar.

  • Entrenar es optimización iterativa: el cómputo crece con el número de pasos, el tamaño del modelo y el tamaño del lote. Cada paso adicional es dinero en cómputo.
  • Si un equipo dice que «el entrenamiento no converge», la primera pregunta es por la tasa de aprendizaje (quizá el hiperparámetro más importante) y por los datos, no por «más GPUs».
  • El resultado depende del punto de partida y de decisiones de entrenamiento: dos corridas con la misma receta pueden dar modelos distintos. Pide que se reporte esa variabilidad.
  • No hay garantía de haber llegado al mejor punto posible: «suficientemente bueno» se comprueba con datos que el modelo no vio (lección 10).

Términos de la lección

Transcripción completa
ComentariosConversación pública de esta lección: dudas, datos por revisar, ideas.

Los comentarios viven en GitHub Discussions, en el repositorio público del curso; para escribir se necesita una cuenta de GitHub. Se cargan desde giscus.app al abrir esta sección. Las personas que revisan el curso los leen, y si un cambio se acepta, se aplica en los dos idiomas. Abrir el hilo en GitHub

Fuentes