Calculus·Unidad 10

Calc-10 — Optimization: gradient descent, convexity, Lagrange

Aquí se junta todo el cálculo en el algoritmo que entrena el machine learning: gradient descent. Entenderás por qué funciona (Taylor + gradient), cómo elegir el learning rate, qué es la convexity (y por qué unas losses son fáciles y otras no), sus variantes (momentum, SGD) y cómo optimizar con restricciones vía Lagrange multipliers (que también reaparecen al derivar SVMs y PCA).

Why this matters for ML

Aquí se junta todo el cálculo en el algoritmo que entrena el machine learning: gradient descent. Entenderás por qué funciona (Taylor + gradient), cómo elegir el learning rate, qué es la convexity (y por qué unas losses son fáciles y otras no), sus variantes (momentum, SGD) y cómo optimizar con restricciones vía Lagrange multipliers (que también reaparecen al derivar SVMs y PCA).

Concepts covered

  • Gradient descent: la regla y por qué baja
  • Learning rate: efectos y trade-offs
  • Variantes: SGD, mini-batch, momentum
  • Convexity multivariable
  • Optimización con restricciones: Lagrange multipliers
  • Vistazo a las condiciones KKT

Intuition first

🎬 3Blue1Brown Neural Networks cap. 2 ("Gradient descent, how neural networks learn"). Para restricciones, Khan Academy "Lagrange multipliers".

Theory & key results

Gradient descent (GD): para minimizar L(θ)L(\boldsymbol\theta), itera θt+1=θtηL(θt).\boldsymbol\theta_{t+1} = \boldsymbol\theta_t - \eta,\nabla L(\boldsymbol\theta_t). Por qué baja: por Taylor de 1er orden (Calc-08), moverte en dirección L-\nabla L es la dirección de máximo descenso local; con η\eta pequeño, LL disminuye.

Learning rate η\eta:

  • Muy pequeño → converge lentísimo.
  • Muy grande → oscila o diverge (se pasa del mínimo).
  • Justo → baja rápido y estable. En la práctica se ajusta y a veces se programa (learning rate schedule).

Variantes (clave en deep learning):

  • SGD (stochastic): usa el gradiente de un ejemplo (o mini-batch) en vez de todo el dataset → pasos ruidosos pero baratos y escalables. El ruido incluso ayuda a escapar de saddles.
  • Mini-batch: el punto medio (lo estándar).
  • Momentum: acumula una "velocidad" vt+1=βvt+Lv_{t+1}=\beta v_t + \nabla L, θθηvt+1\theta\leftarrow\theta-\eta v_{t+1} → acelera en valles largos y amortigua oscilaciones. (Adam, RMSProp: refinamientos de esta idea.)

Convexity (multivariable): LL es convexa si su Hessian es positive semidefinite en todo el dominio (LA-08). Consecuencia enorme: todo mínimo local es global, así que GD encuentra la solución. Linear/logistic regression → convexas. Redes neuronales → no convexas (saddles y mínimos locales), por eso entrenar requiere trucos.

Optimización con restricciones — Lagrange multipliers: para minimizar f(x)f(\mathbf{x}) sujeto a g(x)=0g(\mathbf{x})=0, forma el Lagrangiano L(x,λ)=f(x)λg(x),\mathcal{L}(\mathbf{x},\lambda) = f(\mathbf{x}) - \lambda,g(\mathbf{x)}, y resuelve xL=0\nabla_{\mathbf{x}}\mathcal{L}=\mathbf{0},   g(x)=0;g(\mathbf{x})=0. Intuición: en el óptimo, f\nabla f es paralelo a g\nabla g (no puedes mejorar ff sin violar la restricción). Aparece al derivar PCA (maximizar varianza con w=1|\mathbf{w}|=1) y SVMs.

KKT (vistazo): generalización a restricciones de desigualdad (g(x)0g(\mathbf{x})\le0). Las condiciones KKT (estacionariedad, factibilidad, complementary slackness) son la base teórica de SVMs y de la optimización convexa con restricciones. Solo necesitas saber que existen y qué generalizan por ahora.

Worked example

Minimizar f(x,y)=x2+y2f(x,y)=x^2+y^2 sujeto a x+y=1x+y=1. Lagrangiano: L=x2+y2λ(x+y1)\mathcal{L}=x^2+y^2-\lambda(x+y-1). x=2xλ=0\partial_x=2x-\lambda=0, y=2yλ=0\partial_y=2y-\lambda=0x=yx=y. Con x+y=1x+y=1: x=y=0.5x=y=0.5. Mínimo en (0.5,0.5)(0.5,0.5), valor 0.50.5. (Geométricamente: el punto de la recta más cercano al origen.)

GD numérico: minimizando f(x,y)=x2+y2f(x,y)=x^2+y^2 desde (3,3)(3,3) con η=0.1\eta=0.1 converge a (0,0)(0,0) en pocas iteraciones; con η=1.1\eta=1.1 diverge. Pruébalo abajo.

Notebook exercises (by hand)

  1. Escribe la actualización de GD para L(w)=(w5)2L(w)=(w-5)^2 y haz 3 iteraciones a mano con η=0.1\eta=0.1, w0=0w_0=0.
  2. ¿Para qué rango de η\eta converge GD en L(w)=aw2L(w)=aw^2? (Pista: analiza wt+1=(12aη)wtw_{t+1}=(1-2a\eta)w_t.)
  3. Minimiza f(x,y)=x2+4y2f(x,y)=x^2+4y^2 sujeto a x+y=3x+y=3 con Lagrange.
  4. Explica por qué momentum ayuda en un valle largo y estrecho.
  5. Argumenta por qué SGD es preferible a GD "full-batch" en datasets enormes.
  6. Da la intuición geométrica de "fg\nabla f \parallel \nabla g en el óptimo con restricción".

Python lab

import numpy as np

def gradient_descent(grad, theta0, eta, steps):
    theta = np.array(theta0, float); traj = [theta.copy()]
    for _ in range(steps):
        theta = theta - eta*grad(theta); traj.append(theta.copy())
    return theta, np.array(traj)

grad = lambda t: 2*t                    # de f = ||t||^2
for eta in [0.1, 0.5, 1.1]:
    final, _ = gradient_descent(grad, [3., 3.], eta, 30)
    print(f"eta={eta}: theta_final={np.round(final,3)}  "
          f"{'diverge' if np.linalg.norm(final)>1e3 else 'converge'}")

# momentum
def gd_momentum(grad, theta0, eta, beta, steps):
    theta = np.array(theta0, float); v = np.zeros_like(theta)
    for _ in range(steps):
        v = beta*v + grad(theta); theta = theta - eta*v
    return theta
print("con momentum:", np.round(gd_momentum(grad,[3.,3.],0.1,0.9,30),3))

Examen final 📝

Intenta cada nivel antes de abrir las soluciones.

🟡 Medio

  1. Escribe 3 iteraciones de GD para L(w)=(w3)2L(w)=(w-3)^2 desde w0=0w_0=0 con η=0.25\eta=0.25.
  2. Minimiza f(x,y)=x2+2y2f(x,y)=x^2+2y^2 sujeto a x+y=6x+y=6 con Lagrange multipliers.

🟠 Medio-difícil

  1. Para L(w)=aw2L(w)=aw^2 (a>0a>0), la iteración es wt+1=(12aη)wtw_{t+1}=(1-2a\eta)w_t. Halla el rango de η\eta para el que GD converge y el η\eta óptimo.
  2. Demuestra que minimizar ff sujeto a g(x)=0g(\mathbf x)=0 exige f=λg\nabla f=\lambda\nabla g en el óptimo, e interpreta geométricamente.

🔴 Difícil

  1. Deriva el estimador de PCA/SVM-style: maximiza wCw\mathbf w^\top C\mathbf w sujeto a w2=1|\mathbf w|^2=1 con Lagrange y muestra que el óptimo es el eigenvector principal de CC con valor óptimo = eigenvalue máximo (une Calc-10 + LA-07).
  2. Compara GD full-batch vs. SGD en términos de la varianza del estimador del gradiente (Prob-04/08): ¿por qué el gradiente de mini-batch es un estimador insesgado del gradiente verdadero, y cómo escala su varianza con el batch size BB?
✅ Soluciones
  1. L=2(w3)\nabla L=2(w-3). w1=00.252(03)=1.5w_1=0-0.25\cdot2(0-3)=1.5; w2=1.50.252(1.53)=2.25w_2=1.5-0.25\cdot2(1.5-3)=2.25; w3=2.250.252(2.253)=2.625w_3=2.25-0.25\cdot2(2.25-3)=2.625 → converge a 3.
  2. L=x2+2y2λ(x+y6)\mathcal L=x^2+2y^2-\lambda(x+y-6). 2x=λ2x=\lambda, 4y=λx=2y4y=\lambda\Rightarrow x=2y. Con x+y=6x+y=6: 3y=6y=2,x=43y=6\Rightarrow y=2,x=4. Mínimo (4,2)(4,2).
  3. Converge si 12aη<10<η<1/a|1-2a\eta|<1\Rightarrow 0<\eta<1/a. Óptimo η=1/(2a)\eta=1/(2a) (hace wt+1=0w_{t+1}=0 en un paso).
  4. En el óptimo restringido no puedes movar por la superficie g=0g=0 y bajar ff: la componente de f\nabla f tangente a g=0g=0 es cero, así que f\nabla f es normal a la superficie, igual que g\nabla gf=λg\nabla f=\lambda\nabla g. Geométricamente los level sets de ff y gg son tangentes.
  5. L=wCwλ(ww1)\mathcal L=\mathbf w^\top C\mathbf w-\lambda(\mathbf w^\top\mathbf w-1); =2Cw2λw=0Cw=λw\nabla=2C\mathbf w-2\lambda\mathbf w=0\Rightarrow C\mathbf w=\lambda\mathbf w. El valor objetivo wCw=λ\mathbf w^\top C\mathbf w=\lambda; máximo al tomar λ=λmax\lambda=\lambda_{\max} y su eigenvector.
  6. El mini-batch promedia gradientes de ejemplos muestreados uniformemente: E[LB]=L\mathbb{E}[\nabla L_B]=\nabla L (insesgado, por linearity of expectation). La varianza del promedio de BB términos i.i.d. escala como σ2/B\sigma^2/B ⇒ batches más grandes = gradiente menos ruidoso (a más coste). El ruido de BB pequeño ayuda a escapar de saddles.