Sesión 13: Cálculo Multivariable

Teoría

1. Funciones de varias variables, representación y visualización

Una función de varias variables asigna a cada punto $(x_1, x_2, \dots, x_n)$ en $\mathbb{R}^n$ un valor real $f(x_1, x_2, \dots, x_n)$. Se denota $f: \mathbb{R}^n \to \mathbb{R}$.

Ejemplos:

Representación y visualización:

Ejemplo: $f(x, y) = x^2 + y^2$. Sus curvas de nivel son círculos concéntricos.

2. Derivadas parciales

La derivada parcial de $f$ respecto a $x_i$ mide la tasa de cambio de $f$ cuando solo $x_i$ varía, manteniendo las demás variables constantes. Se denota $\frac{\partial f}{\partial x_i}$ o $f_{x_i}$.

Definición: \(\frac{\partial f}{\partial x_i}(x_1, \dots, x_n) = \lim_{h \to 0} \frac{f(x_1, \dots, x_i + h, \dots, x_n) - f(x_1, \dots, x_n)}{h}\)

Ejemplo paso a paso: Sea $f(x, y) = x^2 y + \sin(xy)$.

3. Vector gradiente, interpretación geométrica (dirección de máximo crecimiento)

El gradiente de $f$ en un punto es el vector formado por todas sus derivadas parciales:

\[\nabla f(\mathbf{x}) = \begin{pmatrix} \frac{\partial f}{\partial x_1}, & \frac{\partial f}{\partial x_2}, & \dots, & \frac{\partial f}{\partial x_n} \end{pmatrix}^T\]

Propiedades geométricas:

Ejemplo: Para $f(x, y) = x^2 + y^2$, el gradiente es $\nabla f = (2x, 2y)$. En el punto $(1, 1)$, el gradiente es $(2, 2)$, que apunta hacia afuera del círculo de nivel, en dirección de máximo aumento de $f$. Efectivamente, moviéndonos en esa dirección, $f$ crece más rápido.

4. Regla de la cadena multivariable

Si tenemos una función compuesta $f(\mathbf{x}(t))$ donde $\mathbf{x}(t)$ es una trayectoria, o más generalmente $f(\mathbf{x})$ y $\mathbf{x} = \mathbf{g}(\mathbf{u})$, la derivada se obtiene mediante:

\[\frac{\partial f}{\partial u_j} = \sum_{i=1}^n \frac{\partial f}{\partial x_i} \frac{\partial x_i}{\partial u_j}\]

En forma vectorial, si $\mathbf{x} = \mathbf{g}(\mathbf{u})$, entonces la matriz jacobiana de la composición es el producto de las matrices jacobianas.

Ejemplo: $f(x, y) = x^2 + y^2$, con $x = u v$, $y = u + v$. Calculemos $\frac{\partial f}{\partial u}$: \(\frac{\partial f}{\partial u} = \frac{\partial f}{\partial x} \frac{\partial x}{\partial u} + \frac{\partial f}{\partial y} \frac{\partial y}{\partial u} = (2x)(v) + (2y)(1) = 2xv + 2y\) Sustituyendo $x = uv, y = u+v$: $\frac{\partial f}{\partial u} = 2(uv)v + 2(u+v) = 2uv^2 + 2u + 2v$.

5. Matriz Jacobiana y Hessiana (introducción y significado)

Significado:

Ejemplo: $f(x, y) = x^2 + xy + y^2$.
Gradiente: $\nabla f = (2x + y, x + 2y)$.
Hessiana:
$\frac{\partial^2 f}{\partial x^2} = 2$, $\frac{\partial^2 f}{\partial y^2} = 2$, $\frac{\partial^2 f}{\partial x \partial y} = 1$.
Entonces $H = \begin{pmatrix} 2 & 1 \ 1 & 2 \end{pmatrix}$. Sus autovalores son 3 y 1 (positivos), indicando que el punto crítico (0,0) es un mínimo.


Aplicaciones prácticas

Machine Learning (ML)

1. Gradiente de funciones de costo con múltiples parámetros

En ML, la función de costo depende de muchos parámetros. Por ejemplo, en regresión lineal con $p$ características, el costo MSE es: \(L(\mathbf{w}) = \frac{1}{n} \sum_{i=1}^n (y_i - \mathbf{w}^T \mathbf{x}_i)^2\) El gradiente respecto a $\mathbf{w}$ es: \(\nabla L(\mathbf{w}) = -\frac{2}{n} \sum_{i=1}^n (y_i - \mathbf{w}^T \mathbf{x}_i) \mathbf{x}_i\) (que es un vector). Este gradiente se usa en el descenso de gradiente para actualizar todos los pesos simultáneamente.

Ejemplo numérico con 2 parámetros: Supongamos dos puntos: $(x_1, y_1) = (1, 2)$ y $(x_2, y_2) = (2, 3)$, modelo $\hat{y} = w_1 x_1 + w_2 x_2$ (sin sesgo). Entonces: \(L(w_1, w_2) = \frac{1}{2}[(2 - (w_1\cdot1 + w_2\cdot1))^2 + (3 - (w_1\cdot2 + w_2\cdot2))^2]\) Simplificando: $L = \frac{1}{2}[(2 - (w_1+w_2))^2 + (3 - 2(w_1+w_2))^2]$. Sea $s = w_1+w_2$, entonces $L(s) = \frac{1}{2}[(2-s)^2 + (3-2s)^2]$. Derivando respecto a $s$: $L’(s) = - (2-s) - 2(3-2s) = -2 + s -6 + 4s = 5s - 8$. Como $\frac{\partial s}{\partial w_1} = 1$, $\frac{\partial s}{\partial w_2} = 1$, entonces $\frac{\partial L}{\partial w_1} = \frac{\partial L}{\partial s} \cdot 1 = 5s - 8$, igual para $w_2$. Así, el gradiente es el mismo para ambos pesos, lo que tiene sentido por simetría.

2. Gradiente de log-loss en regresión logística

En regresión logística, la función de costo (log-loss) para un conjunto de datos es: \(L(\mathbf{w}, b) = -\frac{1}{n} \sum_{i=1}^n [y_i \log \hat{y}_i + (1-y_i) \log(1-\hat{y}_i)]\) con $\hat{y}_i = \sigma(\mathbf{w}^T \mathbf{x}_i + b)$. El gradiente respecto a $\mathbf{w}$ es: \(\nabla_{\mathbf{w}} L = \frac{1}{n} \sum_{i=1}^n (\hat{y}_i - y_i) \mathbf{x}_i\) (derivación similar a la vista en semana 12, pero ahora es un vector). El gradiente respecto a $b$ es $\frac{1}{n} \sum (\hat{y}_i - y_i)$.

3. Superficie de pérdida

La función de costo define una superficie de pérdida en el espacio de parámetros. Visualizarla (en 2D o 3D) ayuda a entender la optimización: mínimos locales, puntos de silla, etc. Por ejemplo, para una red neuronal simple, la superficie puede tener muchos valles.

Deep Learning (DL)

1. Backpropagation (regla de la cadena multivariable)

El backpropagation es la aplicación sistemática de la regla de la cadena multivariable para calcular gradientes en redes profundas. Para una red con $L$ capas, la pérdida es función de todas las matrices de pesos $W^{(l)}$ y sesgos $b^{(l)}$. El gradiente se propaga hacia atrás desde la salida hasta la entrada.

Ejemplo con una red de dos capas (sin activación, solo lineal para simplificar):

Queremos $\frac{\partial L}{\partial W^{(2)}}$. Primero, $\frac{\partial L}{\partial \hat{y}} = -(y - \hat{y})$. Luego, $\hat{y} = W^{(2)} z^{(1)} + b^{(2)}$, entonces $\frac{\partial \hat{y}}{\partial W^{(2)}}$ es un tensor; en forma práctica, la derivada respecto a una matriz es un producto exterior: $\frac{\partial L}{\partial W^{(2)}} = \frac{\partial L}{\partial \hat{y}} \cdot (z^{(1)})^T$. Esto es un producto de un vector fila (o columna) con un vector fila.

Para $\frac{\partial L}{\partial W^{(1)}}$, necesitamos $\frac{\partial L}{\partial z^{(1)}} = (W^{(2)})^T \frac{\partial L}{\partial \hat{y}}$ (por regla de la cadena). Luego, $\frac{\partial L}{\partial W^{(1)}} = \frac{\partial L}{\partial z^{(1)}} \cdot x^T$.

2. Gradiente en redes profundas

En redes profundas, el gradiente se calcula mediante multiplicaciones sucesivas de matrices jacobianas. Por ejemplo, en una red con varias capas, el gradiente de la pérdida respecto a los pesos de la primera capa implica productos de las matrices de pesos de capas superiores y derivadas de activaciones.

3. Gradiente evanescente/explosivo (producto de Jacobianos)

Cuando se apilan muchas capas, el gradiente puede ser el producto de muchas matrices (las jacobianas de cada capa). Si estas matrices tienen autovalores < 1, el producto tiende a cero (gradiente evanescente); si > 1, tiende a infinito (gradiente explosivo). Esto dificulta el entrenamiento de redes muy profundas.

Ejemplo: Una red recurrente (RNN) sin control tiene el mismo problema. El gradiente a través de $T$ pasos es el producto de $T$ matrices $W_{hh}^T$. Si los autovalores de $W_{hh}$ son menores que 1, el gradiente decae exponencialmente.

4. Optimizadores (Adam, etc.)

Los optimizadores modernos como Adam utilizan el gradiente (vector) y también estimaciones de momentos de primer y segundo orden (que involucran el gradiente al cuadrado, que es un tensor). La actualización de parámetros es: \(m_t = \beta_1 m_{t-1} + (1-\beta_1) \nabla L_t\) \(v_t = \beta_2 v_{t-1} + (1-\beta_2) (\nabla L_t)^2\) \(\theta_{t+1} = \theta_t - \eta \frac{m_t}{\sqrt{v_t} + \epsilon}\) Aquí, el gradiente $\nabla L_t$ es un vector (o tensor aplanado). Las operaciones son elemento a elemento, pero conceptualmente se manejan como vectores.

5. Análisis de la Hessiana en optimización

En optimización de redes neuronales, la matriz Hessiana (de segundas derivadas) es enorme, pero su análisis es útil teóricamente. Por ejemplo, la condición de los puntos de silla se relaciona con autovalores de la Hessiana. En la práctica, se usan aproximaciones (como en el método de Newton truncado o L-BFGS) que evitan calcular la Hessiana completa.