Calculus·Unidad 5

Calc-05 — Partial derivatives & gradient

Tu modelo tiene miles o millones de parámetros: la loss es una función de muchas variables. El gradient es el vector de todas las derivadas parciales, y apunta en la dirección de máximo crecimiento de la loss. Gradient descent — el algoritmo que entrena casi todo el ML — simplemente da pasos en la dirección opuesta al gradient. Este módulo es donde el cálculo se vuelve el motor del aprendizaje.

Why this matters for ML

Tu modelo tiene miles o millones de parámetros: la loss es una función de muchas variables. El gradient es el vector de todas las derivadas parciales, y apunta en la dirección de máximo crecimiento de la loss. Gradient descent — el algoritmo que entrena casi todo el ML — simplemente da pasos en la dirección opuesta al gradient. Este módulo es donde el cálculo se vuelve el motor del aprendizaje.

Concepts covered

  • Funciones de varias variables f:RnRf:\mathbb{R}^n\to\mathbb{R}
  • Partial derivatives f/xi\partial f/\partial x_i
  • Gradient f\nabla f (vector de parciales)
  • Directional derivative
  • El gradient como dirección de máximo ascenso
  • Interpretación geométrica (superficies, level sets)

Intuition first

🎬 3Blue1Brown Essence of Calculus cap. 7 (implica gradiente) y sobre todo Khan Academy — Multivariable Calculus (unidades de partial derivatives y gradient). Idea: la parcial mide la pendiente si te mueves solo por un eje.

Theory & key results

Función multivariable: f(x1,,xn)f(x_1,\dots,x_n) toma un vector y devuelve un escalar (p. ej. la loss). Su gráfica es una "superficie" en dimensión alta.

Partial derivative: fxi\frac{\partial f}{\partial x_i} = deriva respecto a xix_i tratando las demás variables como constantes. Mide la tasa de cambio si te mueves solo en la dirección del eje xix_i.

Gradient: junta todas las parciales en un vector: f(x)=(fx1,,fxn).\nabla f(\mathbf{x}) = \left(\frac{\partial f}{\partial x_1}, \dots, \frac{\partial f}{\partial x_n}\right). Dos hechos clave:

  1. f\nabla f apunta en la dirección de máximo ascenso (donde ff crece más rápido). Su magnitud f|\nabla f| es la pendiente en esa dirección.
  2. f\nabla f es perpendicular a los level sets (curvas/superficies donde ff es constante).

Directional derivative: la tasa de cambio en una dirección unitaria u\mathbf{u} es Duf=fuD_{\mathbf{u}}f = \nabla f\cdot\mathbf{u}. Es máxima cuando u\mathbf{u} apunta como f\nabla f (por eso el gradient es "la mejor dirección").

Conexión con ML — gradient descent: para minimizar la loss L(θ)L(\boldsymbol\theta), muévete contra el gradient: θθηL(θ),\boldsymbol\theta \leftarrow \boldsymbol\theta - \eta,\nabla L(\boldsymbol\theta), con learning rate η\eta. Repetir esto es, en esencia, cómo aprende un modelo (detalles en Calc-10).

Worked example

f(x,y)=x2+3xy+y2f(x,y)=x^2 + 3xy + y^2.

  • fx=2x+3y\frac{\partial f}{\partial x} = 2x + 3y (y es constante).
  • fy=3x+2y\frac{\partial f}{\partial y} = 3x + 2y.
  • f=(2x+3y, 3x+2y)\nabla f = (2x+3y,\ 3x+2y). En (1,2)(1,2): f=(2+6, 3+4)=(8,7)\nabla f=(2+6,\ 3+4)=(8,7).

Directional derivative en (1,2)(1,2) hacia u=(1,0)\mathbf{u}=(1,0): fu=8\nabla f\cdot\mathbf{u}=8. Hacia la dirección de f\nabla f mismo (normalizado) sería f=64+49=11310.6|\nabla f|=\sqrt{64+49}=\sqrt{113}\approx10.6, el máximo posible.

Notebook exercises (by hand)

  1. f(x,y)=x2y+sin(y)f(x,y)=x^2 y + \sin(y): calcula f/x\partial f/\partial x y f/y\partial f/\partial y.
  2. f\nabla f para f(x,y,z)=x2+y2+z2f(x,y,z)=x^2+y^2+z^2; ¿qué dirección apunta y por qué tiene sentido geométrico?
  3. Para f(x,y)=3x+4yf(x,y)=3x+4y (plano), calcula f\nabla f y nota que es constante. ¿Dirección de máximo ascenso?
  4. Directional derivative de f(x,y)=xyf(x,y)=xy en (2,3)(2,3) hacia u=(1,1)/2\mathbf{u}=(1,1)/\sqrt2.
  5. Deriva wXwy2\nabla_{\mathbf{w}} |X\mathbf{w}-\mathbf{y}|^2 componente a componente (¡es el gradiente de la loss de regresión!).
  6. Explica por qué gradient descent resta el gradient en vez de sumarlo.

Python lab

import numpy as np, sympy as sp

x, y = sp.symbols("x y")
f = x**2 + 3*x*y + y**2
grad = [sp.diff(f, v) for v in (x, y)]
print("grad simbólico:", grad)
print("grad en (1,2):", [g.subs({x:1, y:2}) for g in grad])   # [8, 7]

# gradiente numérico de una f: R^n -> R
def num_grad(f, p, h=1e-6):
    p = np.asarray(p, float); g = np.zeros_like(p)
    for i in range(len(p)):
        e = np.zeros_like(p); e[i] = h
        g[i] = (f(p+e) - f(p-e)) / (2*h)
    return g

F = lambda v: v[0]**2 + 3*v[0]*v[1] + v[1]**2
print("grad numérico en (1,2):", num_grad(F, [1., 2.]))       # ~[8, 7]

# un paso de gradient descent para minimizar F
theta = np.array([3., 3.]); eta = 0.1
for _ in range(20):
    theta = theta - eta * num_grad(F, theta)
print("tras 20 pasos:", theta)                                 # se acerca a (0,0)

Examen final 📝

Intenta cada nivel antes de abrir las soluciones.

🟡 Medio

  1. f\nabla f para f(x,y)=x2y+3y2f(x,y)=x^2y+3y^2; evalúalo en (1,2)(1,2).
  2. f\nabla f para f(x,y,z)=exsiny+z2f(x,y,z)=e^{x}\sin y+z^2.

🟠 Medio-difícil

  1. Para f(x,y)=x2+y2f(x,y)=x^2+y^2: dibuja/argumenta que f\nabla f en (1,1)(1,1) es perpendicular al level set (círculo) que pasa por ese punto.
  2. Calcula la directional derivative de f(x,y)=xy2f(x,y)=xy^2 en (2,1)(2,1) hacia u=(3,4)/5\mathbf u=(3,4)/5, e indica en qué dirección crece más rápido.

🔴 Difícil

  1. Deriva wL\nabla_{\mathbf w}L para L(w)=1mi=1m(wxiyi)2L(\mathbf w)=\frac{1}{m}\sum_{i=1}^m (\mathbf w^\top\mathbf x_i-y_i)^2 (regresión lineal multivariable), primero componente a componente y luego en forma matricial 2mX(Xwy)\frac{2}{m}X^\top(X\mathbf w-\mathbf y).
  2. Demuestra que la dirección de máximo ascenso de ff en un punto es exactamente f/f\nabla f/|\nabla f| (maximiza fu\nabla f\cdot\mathbf u sobre vectores unitarios u\mathbf u; usa Cauchy–Schwarz, LA-01).
✅ Soluciones
  1. f=(2xy, x2+6y)\nabla f=(2xy,\ x^2+6y); en (1,2)(1,2): (4, 1+12)=(4,13)(4,\ 1+12)=(4,13).
  2. f=(exsiny, excosy, 2z)\nabla f=(e^x\sin y,\ e^x\cos y,\ 2z).
  3. f=(2x,2y)=(2,2)\nabla f=(2x,2y)=(2,2) en (1,1)(1,1), que es paralelo a (1,1)(1,1) = el radio; la tangente al círculo en (1,1)(1,1) es perpendicular al radio ⇒ f\nabla f\perp level set.
  4. f=(y2, 2xy)=(1,4)\nabla f=(y^2,\ 2xy)=(1,4) en (2,1)(2,1). Duf=(1,4)(3,4)/5=(3+16)/5=3.8D_{\mathbf u}f=(1,4)\cdot(3,4)/5=(3+16)/5=3.8. Crece más rápido en dirección f=(1,4)\nabla f=(1,4) (normalizada).
  5. Componente jj: Lwj=2mi(wxiyi)xij\frac{\partial L}{\partial w_j}=\frac{2}{m}\sum_i(\mathbf w^\top\mathbf x_i-y_i)x_{ij}. Apilando sobre jj: 2mX(Xwy)\frac{2}{m}X^\top(X\mathbf w-\mathbf y).
  6. Maximizar fu\nabla f\cdot\mathbf u con u=1|\mathbf u|=1: por Cauchy–Schwarz fufu=f\nabla f\cdot\mathbf u\le|\nabla f||\mathbf u|=|\nabla f|, con igualdad cuando uf\mathbf u\parallel\nabla f. Luego el máximo es en u=f/f\mathbf u=\nabla f/|\nabla f|.