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
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