🧮 Computational Mathematics

Inicio · Parte 08 — Cálculo multivariable, matricial y autodiferenciación

168 — Jacobiano

universitario-avanzado clase 8 de 20 4 horas demostración jacobian

El Jacobiano es la derivada de una función vectorial; el modo reverso calcula vᵀJ sin construirlo.

Fórmulas

J ∈ ℝ^(m×n) para F: ℝⁿ → ℝᵐ
fila i = ∇Fᵢ
VJP: vᵀJ · JVP: Jv

Desarrollo

Cuando la función devuelve un vector en lugar de un escalar, su derivada es una matriz: el Jacobiano. Su fila i es el gradiente de la componente i de la salida, y su columna j recoge cómo afecta la entrada j a todas las salidas.

Su tamaño es el problema. Para una capa que va de 1000 entradas a 1000 salidas, el Jacobiano tiene un millón de entradas; para un modelo completo, sería inmanejable. Por eso los frameworks nunca lo construyen.

Lo que sí calculan son productos con el Jacobiano. El VJP (vector-Jacobian product), vᵀJ, es lo que hace backward(): propaga un gradiente hacia atrás sin materializar la matriz. El JVP (Jacobian-vector product), Jv, es lo que hace el modo directo. Cada uno cuesta aproximadamente lo mismo que evaluar la función una vez.

La elección entre modos depende de la forma. Si hay muchas entradas y una sola salida —el caso de una función de pérdida, con millones de parámetros y un escalar— el modo reverso obtiene todos los gradientes con un solo barrido. Si hay pocas entradas y muchas salidas, el modo directo es más eficiente. El entrenamiento de redes es el primer caso, y por eso backpropagation es modo reverso.

Ejemplo trabajado

Jacobiano de una función de ℝ² en ℝ³.

F(x,y) = (x²+y,  sin(x)·y,  x−3y)   en (1,2)

J (shape 3×2):
  [[2x,        1     ]     [[2.0,     1.0   ]
   [cos(x)·y,  sin(x)]  =   [1.0806,  0.8415]
   [1,        −3     ]]     [1.0,    −3.0   ]]

fila 1 = ∇(x²+y) = (2x, 1) = (2, 1)          ✓

VJP (modo reverso): vᵀJ, coste ≈ 1 evaluación
JVP (modo directo): Jv,  coste ≈ 1 evaluación

Qué calcula el laboratorio

Jacobiano de una función vectorial.

python classes/part-08-calculo-multivariable-matricial-y-autodiferenciacion/168-jacobiano/lab.py
compmath run 168

Salidas del laboratorio (8)

Muestra de la ejecución real

{
  "F": "(x²+y, sin(x)·y, x-3y)",
  "punto": [
    1.0,
    2.0
  ],
  "shape_del_jacobiano": [
    3,
    2
  ],
  "jacobiano": [
    [
      2.0,
      1.0
    ],
    [
      1.080605,
      0.841471
    ],
    [
      1.0,
      -3.0
    ]
  ],
  "fila_i_es_el_gradiente_de_Fi": true,
  "analitico_fila_1": [
    2.0,
    1.0
  ]
}

Errores comunes

Dónde se usa

Autodiferenciación, cambio de variable en densidades, cinemática de robots y análisis de sensibilidad de sistemas con varias salidas.

Idea rectora de la parte

El Hessiano describe la curvatura y decide el tipo de punto crítico.

Error a evitar

Suponer que el Hessiano es definido positivo sin comprobarlo.

Conexión con IA

Autograd de PyTorch y JAX es exactamente el modo reverso del grafo de cómputo que se construye en esta parte a mano.

Bibliografía de la clase

Archivos de la clase