Calculus·Unidad 6

Calc-06 — Jacobian & Hessian

Cuando una función devuelve un vector (p. ej. una capa de red que produce muchas activaciones), su derivada es una matriz: el Jacobian. Cuando quieres saber la curvatura de tu loss (¿estás en un mínimo, un máximo o un saddle?), miras la Hessian. El Jacobian es el engranaje de backpropagation; la Hessian es la base de métodos de optimización de segundo orden (Newton) y del análisis de convergencia.

Why this matters for ML

Cuando una función devuelve un vector (p. ej. una capa de red que produce muchas activaciones), su derivada es una matriz: el Jacobian. Cuando quieres saber la curvatura de tu loss (¿estás en un mínimo, un máximo o un saddle?), miras la Hessian. El Jacobian es el engranaje de backpropagation; la Hessian es la base de métodos de optimización de segundo orden (Newton) y del análisis de convergencia.

Concepts covered

  • Jacobian de f:RnRmf:\mathbb{R}^n\to\mathbb{R}^m
  • Hessian de f:RnRf:\mathbb{R}^n\to\mathbb{R} (matriz de segundas parciales)
  • Simetría de la Hessian (Schwarz)
  • Clasificación de critical points vía definiteness de la Hessian (usa LA-08)
  • Relación gradient ↔ Jacobian ↔ Hessian

Intuition first

Repasa Calc-05 (gradient) y Khan Academy — Multivariable Calculus (Jacobian, Hessian). Idea: el Jacobian es "todas las parciales de todas las salidas"; la Hessian es "el gradient del gradient".

Theory & key results

Jacobian: para f:RnRmf:\mathbb{R}^n\to\mathbb{R}^m, f(x)=(f1,,fm)f(\mathbf{x})=(f_1,\dots,f_m), el Jacobian es la matriz m×nm\times n de todas las parciales: J=fx=[f1x1f1xnfmx1fmxn],Jij=fixj.J = \frac{\partial f}{\partial \mathbf{x}} = \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \cdots & \frac{\partial f_1}{\partial x_n}\ \vdots & & \vdots \ \frac{\partial f_m}{\partial x_1} & \cdots & \frac{\partial f_m}{\partial x_n}\end{bmatrix}, \qquad J_{ij}=\frac{\partial f_i}{\partial x_j}. Es la mejor aproximación lineal local de ff. Si m=1m=1, el Jacobian es (la transpuesta de) el gradient. El chain rule multivariable (Calc-07) es multiplicación de Jacobians.

Hessian: para f:RnRf:\mathbb{R}^n\to\mathbb{R}, la Hessian es la matriz n×nn\times n de segundas parciales: H=2f,Hij=2fxixj.H = \nabla^2 f, \qquad H_{ij}=\frac{\partial^2 f}{\partial x_i,\partial x_j}. Es el "Jacobian del gradient". Mide curvatura en cada par de direcciones.

Simetría (teorema de Schwarz/Clairaut): si las segundas parciales son continuas, 2fxixj=2fxjxi\frac{\partial^2 f}{\partial x_i\partial x_j}=\frac{\partial^2 f}{\partial x_j\partial x_i}, así que HH es simétrica → se le aplica todo LA-08 (spectral theorem, definiteness).

Clasificar critical points (donde f=0\nabla f=\mathbf{0}) por la definiteness de HH:

Hessian Tipo de punto
Positive definite (eigenvalues >0) mínimo local
Negative definite (eigenvalues <0) máximo local
Indefinite (eigenvalues mixtos) saddle point
Semidefinite (algún 0) no concluye

Los saddle points son la razón por la que la optimización en deep learning es difícil: hay muchísimos, y el gradient es cero en ellos aunque no sean mínimos.

Worked example

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

  • Gradient: f=(2x+y, x+2y)\nabla f=(2x+y,\ x+2y). Critical point: f=0(x,y)=(0,0)\nabla f=\mathbf{0}\Rightarrow (x,y)=(0,0).
  • Hessian: H=[2112]H=\begin{bmatrix}2&1\1&2\end{bmatrix} (constante aquí). Eigenvalues 3,1>03,1>0 (de LA-07/08) → positive definite → el origen es un mínimo. ✓

Ejemplo saddle: g(x,y)=x2y2g(x,y)=x^2-y^2 tiene H=[2002]H=\begin{bmatrix}2&0\0&-2\end{bmatrix}, indefinite → el origen es un saddle.

Notebook exercises (by hand)

  1. Jacobian de f(x,y)=(x2y, sinx+y)f(x,y)=(x^2y,\ \sin x + y) (una función R2R2\mathbb{R}^2\to\mathbb{R}^2).
  2. Hessian de f(x,y)=x3+2xy+y2f(x,y)=x^3 + 2xy + y^2; ¿es simétrica?
  3. Encuentra los critical points de f(x,y)=x2+y24xf(x,y)=x^2+y^2-4x y clasifícalos con la Hessian.
  4. Muestra que g(x,y)=x2y2g(x,y)=x^2-y^2 tiene un saddle en el origen.
  5. Para f:RnRf:\mathbb{R}^n\to\mathbb{R}, explica por qué el Jacobian de f\nabla f es la Hessian.
  6. Si la Hessian de tu loss en un punto tiene eigenvalues {5,5,0.1}{5,5,-0.1}, ¿qué es y qué implica para GD?

Python lab

import numpy as np, sympy as sp

x, y = sp.symbols("x y")

# Jacobian de una función vectorial
F = sp.Matrix([x**2*y, sp.sin(x) + y])
print("Jacobian:\n", F.jacobian([x, y]))

# Hessian de un escalar
f = x**2 + x*y + y**2
H = sp.hessian(f, (x, y))
print("Hessian:\n", H)                       # [[2,1],[1,2]]
print("eigenvalues:", H.eigenvals())         # {3:1, 1:1} -> PD -> mínimo

# clasifica un critical point numéricamente
Hn = np.array([[2.,1.],[1.,2.]])
w = np.linalg.eigvalsh(Hn)
print("PD?" , np.all(w > 0))                 # True -> mínimo

Examen final 📝

Intenta cada nivel antes de abrir las soluciones.

🟡 Medio

  1. Jacobian de f(x,y)=(x+y, xy, x2)f(x,y)=(x+y,\ xy,\ x^2) (R2R3\mathbb{R}^2\to\mathbb{R}^3).
  2. Hessian de f(x,y)=x2+3xy+2y2f(x,y)=x^2+3xy+2y^2; confirma que es simétrica.

🟠 Medio-difícil

  1. Encuentra los critical points de f(x,y)=x33x+y2f(x,y)=x^3-3x+y^2 y clasifícalos con la Hessian.
  2. Para el softmax s=softmax(z)\mathbf s=\text{softmax}(\mathbf z), se sabe que su Jacobian es sizj=si(δijsj)\frac{\partial s_i}{\partial z_j}=s_i(\delta_{ij}-s_j). Verifícalo para el caso 2D calculando s1/z1\partial s_1/\partial z_1 y s1/z2\partial s_1/\partial z_2.

🔴 Difícil

  1. Demuestra que la Hessian de la loss de regresión lineal L(w)=Xwy2L(\mathbf w)=|X\mathbf w-\mathbf y|^2 es 2XX2X^\top X (constante, independiente de w\mathbf w), y usa LA-08 para explicar por qué esto garantiza que la loss es convexa.
  2. El Jacobian conecta capas en backprop. Para z=g(y)\mathbf z=g(\mathbf y), y=f(x)\mathbf y=f(\mathbf x), demuestra que Jz/x=Jz/yJy/xJ_{\mathbf z/\mathbf x}=J_{\mathbf z/\mathbf y}J_{\mathbf y/\mathbf x} (chain rule matricial) y explica por qué reverse-mode multiplica estos Jacobians de derecha a izquierda.
✅ Soluciones
  1. J=[11yx2x0]J=\begin{bmatrix}1&1\ y&x\ 2x&0\end{bmatrix}.
  2. H=[2334]H=\begin{bmatrix}2&3\3&4\end{bmatrix}, simétrica ✓.
  3. f=(3x23, 2y)=0x=±1, y=0\nabla f=(3x^2-3,\ 2y)=0\Rightarrow x=\pm1,\ y=0. H=[6x002]H=\begin{bmatrix}6x&0\0&2\end{bmatrix}. En (1,0)(1,0): eigenvalues 6,2>06,2>0 → mínimo. En (1,0)(-1,0): 6,2-6,2saddle.
  4. s1=ez1ez1+ez2s_1=\frac{e^{z_1}}{e^{z_1}+e^{z_2}}. s1/z1=s1(1s1)\partial s_1/\partial z_1=s_1(1-s_1) (como sigmoid). s1/z2=s1s2\partial s_1/\partial z_2=-s_1 s_2. Coinciden con s1(δ1jsj)s_1(\delta_{1j}-s_j).
  5. L=wXXw2yXw+yyL=\mathbf w^\top X^\top X\mathbf w-2\mathbf y^\top X\mathbf w+\mathbf y^\top\mathbf y. L=2XXw2Xy\nabla L=2X^\top X\mathbf w-2X^\top\mathbf y; H=2L=2XXH=\nabla^2 L=2X^\top X. Como XXX^\top X es PSD (LA-08), H0H\succeq0 en todo punto ⇒ LL convexa.
  6. Por chain rule, zixk=jziyjyjxk\frac{\partial z_i}{\partial x_k}=\sum_j\frac{\partial z_i}{\partial y_j}\frac{\partial y_j}{\partial x_k}, que es la entrada (i,k)(i,k) del producto Jz/yJy/xJ_{\mathbf z/\mathbf y}J_{\mathbf y/\mathbf x}. Reverse-mode empieza por Lz\frac{\partial L}{\partial \mathbf z} (un vector) y lo multiplica por Jacobians hacia atrás; como cada paso es vector×matriz (no matriz×matriz), el coste es lineal en el tamaño del grafo.