Skip to content

English · Español

01 — Derivadas, gradientes, Jacobianas

🇪🇸 La derivada en una variable es una pendiente; el gradiente en varias variables es un vector que apunta a la subida más rápida; el Jacobiano de una función vectorial es la matriz que generaliza ambos. Todo backprop opera sobre estos tres objetos.


Derivada de una variable

Para f: R → R, la derivada (derivada) en x es

\[ f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h} \]

Geométrico: pendiente de la recta tangente en x. Numérico: cuánto cambia f por unidad de cambio en x, en el límite.

Derivadas útiles para memorizar en frío (cualquier derivación posterior va más rápida si estas son reflejas):

f(x) f'(x)
x^n n x^{n-1}
e^x e^x
log x 1/x
sin x cos x
cos x -sin x
tanh x 1 - tanh² x
relu x 1 if x > 0 else 0 (sub-gradiente en 0)
sigmoid x sigmoid(x) (1 - sigmoid(x))
softplus x sigmoid x
1/x -1/x²

Las últimas seis se derivan a mano en el lab 00 como calentamiento para la derivación de softmax.

Derivada parcial

Para f: R^n → R:

\[ \frac{\partial f}{\partial x_i} = \lim_{h \to 0} \frac{f(\ldots, x_i + h, \ldots) - f(\ldots, x_i, \ldots)}{h} \]

Trata todas las demás coordenadas como constantes; deriva como en el caso de una variable.

Ejemplo trabajado. f(x, y) = x² y + sin(y). Entonces:

\[ \frac{\partial f}{\partial x} = 2 x y, \qquad \frac{\partial f}{\partial y} = x^2 + \cos(y) \]

Gradiente

El gradiente (gradiente) de f: R^n → R es el vector de derivadas parciales:

\[ \nabla f(x) = \begin{pmatrix} \partial f / \partial x_1 \\ \vdots \\ \partial f / \partial x_n \end{pmatrix} \]

Por convención, un vector columna.

Significado geométrico: ∇f(x) apunta en la dirección de máximo ascenso de f en x. Su magnitud es la tasa de cambio en esa dirección. La dirección de máximo descenso es -∇f(x). Esta es la razón completa por la que el descenso de gradiente funciona.

Para el ejemplo de arriba:

\[ \nabla f(x, y) = \begin{pmatrix} 2xy \\ x^2 + \cos y \end{pmatrix} \]

Jacobiana

Para una función vectorial f: R^n → R^m, la Jacobiana (Jacobiana) es la matriz de derivadas parciales:

\[ J_f(x) = \begin{pmatrix} \partial f_1 / \partial x_1 & \cdots & \partial f_1 / \partial x_n \\ \vdots & \ddots & \vdots \\ \partial f_m / \partial x_1 & \cdots & \partial f_m / \partial x_n \end{pmatrix} \in \mathbb{R}^{m \times n} \]

Cada fila es el gradiente de una coordenada de salida, tratada como vector fila. La forma m × n es "dim de salida por dim de entrada".

Casos especiales:

  • Si m = 1 (salida escalar): J_f es un vector fila 1 × n; la transpuesta de ∇f (que es n × 1).
  • Si n = 1 (entrada escalar): J_f es un vector columna m × 1; la derivada de cada salida respecto a la única entrada.
  • Si m = n: Jacobiana cuadrada. Si es invertible, se aplica localmente el teorema de la función inversa.

Linealidad: la Jacobiana es la aproximación lineal de f cerca de x:

\[ f(x + h) \approx f(x) + J_f(x) \cdot h \quad \text{(producto matriz-vector)} \]

Esto es el teorema de Taylor en primer orden. Cada pieza posterior del cálculo multivariable se construye sobre esto.

Hessiana

Para f: R^n → R, la Hessiana (Hessiana) es la matriz de derivadas parciales segundas:

\[ H_f(x)_{ij} = \frac{\partial^2 f}{\partial x_i \partial x_j} \]

H_f ∈ R^{n × n}, y es simétrica (bajo las suposiciones estándar de regularidad — teorema de Clairaut).

Significado geométrico: la Hessiana describe la curvatura de f en x. Eigenvalores:

  • Todos positivos → mínimo local, forma de "cuenco".
  • Todos negativos → máximo local.
  • Signos mezclados → punto de silla.
  • Uno cero → degenerado (plano en alguna dirección).

Por qué nos importa para ML: el número de condición de la Hessiana de la superficie de pérdida (λ_max / λ_min) determina la velocidad de convergencia del descenso de gradiente. Hessiana anisotrópica (valle largo y estrecho) = GD lento. Adam aproxima un precondicionador diagonal que hace la superficie de pérdida "más redonda".

No calcularemos Hessianas explícitamente en este currículo — cuestan O(n²) en almacenamiento y O(n³) en invertir, inviable para modelos de un millón de parámetros. Razonaremos sobre ellas conceptualmente.

La jungla notacional

Distintas fuentes usan distintas convenciones:

Convención ∇f (salida escalar) J_f (salida vectorial) Regla de la cadena
Layout de numerador (Wikipedia, Stanford CS) fila 1 × n m × n J_{fg} = J_f · J_g
Layout de denominador (econometría) columna n × 1 n × m J_{fg} = J_g · J_f

Este currículo usa layout de numerador (gradientes/Jacobianas dispuestos para que el matmul de la regla de la cadena se lea naturalmente). PyTorch usa vectores en layout de denominador internamente pero expone gradientes en layout de numerador. No pelees con la convención; solo elige una y mantente.

En código:

  • grad = np.array([df_dx_i for i in range(n)]) — forma (n,). Los vectores 1-D de NumPy se tratan convencionalmente como columnas o filas indistintamente; en derivaciones, trátalos como columnas.
  • jacobian = np.empty((m, n)) — forma (m, n), fila i = gradiente de f_i.

Trabajado: gradiente de ||x||²

Sea f(x) = ||x||² = x^T x = Σ x_i².

\[ \frac{\partial f}{\partial x_i} = 2 x_i \quad \Rightarrow \quad \nabla f = 2x \]

Esta es la regla más simple "el gradiente es la función evaluada como vector". Usada en regularización L2: ∇(λ ||θ||²) = 2λθ. Los coeficientes difieren por convenciones de factor-de-2; fija cuál usa tu código.

Trabajado: Jacobiana de y = Wx + b

Para W: (m, n), x: (n,), b: (m,), la salida y ∈ R^m. Por componente:

\[ y_i = \sum_{j} W_{ij} x_j + b_i \]

Jacobiana respecto a x:

\[ \frac{\partial y_i}{\partial x_j} = W_{ij} \quad \Rightarrow \quad J_y(x) = W \]

Eso es todo. La Jacobiana de una capa lineal respecto a su entrada es la propia matriz de pesos. Esta es la Jacobiana más usada en todo aprendizaje profundo.

La Jacobiana respecto a W es más complicada — W tiene m × n entradas, así que la "Jacobiana" de y: (m,) respecto a W: (m, n) es un objeto de rango 3 de forma (m, m, n). La mayoría de librerías autograd expresan esto implícitamente: la regla de la cadena produce una contribución ∂L/∂W = ∂L/∂y · x^T (producto exterior), sin materializar nunca la Jacobiana completa de rango 3.

Derivaremos esta contribución explícitamente en theory/02-chain-rule-and-backprop.md.

Trabajado: Jacobiana de f(x) elemento a elemento

Para y = f(x) elemento a elemento (así y_i = f(x_i) — p. ej., f = relu, sigmoid, tanh):

\[ \frac{\partial y_i}{\partial x_j} = f'(x_i) \cdot \delta_{ij} \]

La Jacobiana es diagonal con entradas f'(x_i). En código: no materialices la diagonal completa; solo multiplica elemento a elemento.

Para ReLU: J_ii = 1 if x_i > 0 else 0. Para tanh: J_ii = 1 - tanh²(x_i). Para sigmoid: J_ii = σ(x_i)(1 - σ(x_i)). Cada una aparece en las ops de autograd de la Fase 7.

Problemas de práctica

Soluciones en solutions/01-derivatives-gradients-jacobians-ref.md en la apertura de fase.

  1. Para f(x, y) = x² + 3xy + y³: calcula ∇f y H_f.
  2. Para f(x) = ||Ax - b||² donde A: (m, n), x: (n,), b: (m,): deriva ∇f y H_f.
  3. Verifica simetría: para f(x, y) = x² sin(y), comprueba ∂²f/∂x∂y = ∂²f/∂y∂x.
  4. Para y = softmax(x) (longitud n): ¿cuál es la forma de J_y(x)? Calcúlala para x = [0, 0, 0] (n=3).
  5. Para una MLP de 2 capas y = W_2 · relu(W_1 x + b_1) + b_2 con entrada x: (n,), W_1: (h, n), W_2: (m, h): ¿cuál es la forma de J_y(x)?

Si dos o más se sienten tambaleantes, vuelve a leer.

Recapitulación en un párrafo

La derivada de una variable se generaliza al gradiente (vector de parciales, para funciones de salida escalar) y a la Jacobiana (matriz de parciales, para funciones de salida vectorial). La Jacobiana es la aproximación lineal de una función cerca de un punto: f(x + h) ≈ f(x) + J_f(x) h. La Hessiana es la matriz de segundas derivadas y describe la curvatura; sus eigenvalores clasifican los puntos críticos (mín/máx/silla), y su número de condición gobierna la velocidad de convergencia de la optimización de primer orden (GD). La Jacobiana más usada en aprendizaje profundo es la de una capa lineal y = Wx + b, cuya Jacobiana respecto a x es simplemente W. Las activaciones elemento a elemento tienen Jacobianas diagonales, por eso son baratas. Cada derivación posterior en la Fase 4 — softmax, cross-entropy, regla de la cadena — depende de este vocabulario.


Siguiente: theory/02-chain-rule-and-backprop.md.