🧮 Computational Mathematics

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

177 — Cálculo matricial

universitario-avanzado clase 17 de 20 4 horas demostración matrix_calculus

El cálculo matricial da fórmulas cerradas para gradientes respecto a vectores y matrices.

Fórmulas

∂(aᵀx)/∂x = a
∂(xᵀAx)/∂x = (A + Aᵀ)x,  y 2Ax si A es simétrica
∂‖x‖²/∂x = 2x

Desarrollo

Derivar respecto a un vector o una matriz componente a componente es tedioso y propenso a error. El cálculo matricial ofrece fórmulas cerradas para los patrones que aparecen una y otra vez, y saberlas de memoria acelera cualquier deducción en machine learning.

Las dos más útiles son inmediatas: la derivada de una forma lineal aᵀx es a, y la de una forma cuadrática xᵀAx es (A + Aᵀ)x, que se reduce a 2Ax cuando A es simétrica —el caso habitual, porque toda forma cuadrática se puede escribir con matriz simétrica—.

El escollo práctico es la convención de layout. En la convención del denominador el gradiente es un vector columna; en la del numerador, una fila. Ambas son correctas y las fórmulas difieren en una transposición. Mezclarlas produce errores de shape que a veces no se detectan porque las dimensiones cuadran por casualidad.

La recomendación práctica es fijar una convención, declararla en el código y verificar siempre las fórmulas contra diferencias finitas. El laboratorio hace exactamente eso, y es lo mismo que hace torch.autograd.gradcheck.

Ejemplo trabajado

Dos identidades verificadas numéricamente.

x = (1, 2),  a = (4, −1),  A = [[2,1],[1,3]] (simétrica)

Forma lineal aᵀx:
  fórmula:  ∂/∂x = a = (4, −1)
  numérica: (4.000000, −1.000000)          ✓

Forma cuadrática xᵀAx:
  fórmula:  (A + Aᵀ)x = 2Ax = (8, 14)
  numérica: (8.00000, 14.00000)            ✓

Convención usada: denominador (gradiente como columna)

Qué calcula el laboratorio

Identidades básicas de cálculo matricial.

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

Salidas del laboratorio (6)

Muestra de la ejecución real

{
  "d(aᵀx)/dx": [
    4.0,
    -1.0
  ],
  "gradiente_numerico_lineal": [
    4.0,
    -1.0
  ],
  "d(xᵀAx)/dx = (A+Aᵀ)x": [
    8.0,
    14.0
  ],
  "gradiente_numerico_cuadratico": [
    8.0,
    14.0
  ],
  "A_simetrica_da_2Ax": [
    8.0,
    14.0
  ],
  "convencion": "layout denominador (gradiente como columna)"
}

Errores comunes

Dónde se usa

Deducción de gradientes de funciones de pérdida, backpropagation analítica, métodos de segundo orden y cualquier derivación en un paper de machine learning.

Idea rectora de la parte

El Jacobiano generaliza la derivada a funciones vectoriales.

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