Derivada parcial: derivación de funciones multivariables una a una

Las derivadas anteriores eran para funciones de una variable f(x). Una red neuronal tiene millones de parámetros, por lo que es necesario derivar con respecto a cada parámetro.

Derivada parcial = en una función multivariable, se deriva solo con respecto a una de las variables, tratando las demás como constantes.


Análisis del concepto

Antes solo trabajamos con derivadas de funciones de una variable f(x). Pero en el mundo real, el resultado de las cosas generalmente está determinado pormúltiples factoresque actúan conjuntamente.

Por ejemplo: el precio de una vivienda depende de varios factores como el área, la ubicación, el piso y la antigüedad. Si queremos saber «cuánto aumenta el precio cuando el área aumenta 1 metro cuadrado», necesitamos mantener fijos los demás factores.

Este es el concepto central de la derivada parcial:Cambiar solo una variable a la vez, observar su efecto en el resultado y congelar temporalmente las demás variables.。

Para \( f(x, y) = x^2 + xy + y^2 \):

  • Derivada parcial con respecto a x (y se trata como constante; como y² es constante, su derivada es 0; en xy, y se trata como constante y la derivada de x es 1): \( \frac{\partial f}{\partial x} = 2x + y + 0 \)
  • Derivada parcial con respecto a y (x se trata como constante, de manera similar): \( \frac{\partial f}{\partial y} = 0 + x + 2y \)

La notación \( \partial \) (se lee «round d» o «partial») representa la derivada parcial, a diferencia de la d en las derivadas ordinarias.

Derivadas parciales de segundo orden

Al calcular la derivada parcial de una derivada parcial, se obtiene la derivada parcial de segundo orden:

  • \( \frac{\partial^2 f}{\partial x^2} \): después de derivar parcialmente con respecto a x, se deriva parcialmente nuevamente con respecto a x (mide la curvatura en la dirección de x)
  • \( \frac{\partial^2 f}{\partial x \partial y} \): primero se deriva parcialmente con respecto a x, y luego con respecto a y (derivada parcial cruzada; mide la interacción entre las dos variables)

La esencia del entrenamiento de redes neuronales: calcular la derivada parcial de la función de pérdida con respecto acada parámetro,y luego actualizar en la dirección del gradiente negativo.

En un modelo con un millón de parámetros, el gradiente es un vector de un millón de derivadas parciales.


Ejemplo cotidiano

El sabor de una olla de sopa

El sabor de la sopa depende de varios condimentos como sal, salsa de soja y vinagre. ¿Quieres saber «cuánto cambia el sabor si añades una cucharada más de sal»?

Mantén fijas las cantidades de los demás condimentos y observa solo el efecto de la sal: esta es la idea de la derivada parcial:Cambiar solo una variable a la vez.。


Definición matemática

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

y permanece constante, solo se deja que x varíe.


Práctica con Python

Ejemplo

import sympy as sp

x, y = sp.symbols('x y')
f = x**2 + x*y + y**2
print(f"f(x,y) = {f}")
print(f"∂f/∂x = {sp.diff(f, x)}")  # 2x + y
print(f"∂f/∂y = {sp.diff(f, y)}")  # x + 2y

# Derivada parcial de segundo orden
print(f"∂²f/∂x² = {sp.diff(f, x, 2)}")      # 2
print(f"∂²f/∂x∂y = {sp.diff(f, x, y)}")     # 1

# Derivada parcial de la pérdida del modelo lineal con respecto a los parámetros
w, b, xi, yi = sp.symbols('w b x_i y_i')
loss = (w*xi + b - yi)**2
print(f"\nloss=(w·xi+b-yi)^2")
print(f"∂L/∂w = {sp.diff(loss, w)}")
print(f"∂L/∂b = {sp.diff(loss, b)}")

La salida es:

f(x,y) = x**2 + x*y + y**2
∂f/∂x = 2*x + y
∂f/∂y = x + 2*y
∂²f/∂x² = 2
∂²f/∂x∂y = 1

loss=(w·xi+b-yi)^2
∂L/∂w = 2*x_i*(b + w*x_i - y_i)
∂L/∂b = 2*b + 2*w*x_i - 2*y_i

Escenarios de aplicación en IA

Entrenamiento de redes neuronales = millones de cálculos de derivadas parciales

Un modelo con un millón de parámetros tiene una pérdida que es una función multivariable de un millón de variables. En cada ronda de entrenamiento, el motor de diferenciación automática, con respecto acada parámetro,calcula la derivada parcial, obtiene un millón de valores de derivadas parciales que se combinan en un vector de gradiente, y actualiza todos los parámetros en la dirección del gradiente negativo.

Derivadas parciales locales en la retropropagación

Cada nodo en el grafo de cálculo necesita calcular la derivada parcial local: en un nodo de suma \( \\partial/\\partial x = 1 \) (el gradiente se propaga tal cual), en un nodo de multiplicación \( \\partial(xy)/\\partial x = y \) (el gradiente se multiplica por el valor del otro factor y se propaga). Estas derivadas parciales locales se multiplican en cadena a lo largo del grafo de cálculo para obtener el gradiente final de los parámetros.

Aprendizaje por transferencia con parámetros congelados

En el aprendizaje por transferencia, a menudo se «congelan» las capas preentrenadas: los parámetros de estas capas no calculan derivadas parciales ni se actualizan. En PyTorch, al establecer requires_grad=False, se omite el cálculo de la derivada parcial de los parámetros correspondientes, lo que ahorra significativamente memoria de video y costo computacional.


Otras extensiones