Derivadas y regla de la cadena

Derivadas, regla de la cadena y derivadas parciales: fundamentos de cálculo para entender el descenso de gradiente.
Autor/a

Santi López Pavón

Palabras clave

machine learning, aprendizaje automatico, Python, algebra lineal, optimizacion, regresion lineal, clasificacion, estadistica

1 La pendiente

La pendiente de una recta, es una relación. Nos dice cuánto “avanza” o “retrocede” el eje vertical por cada paso unitario que damos hacia la derecha en el eje horizontal.Si la pendiente es \(3\): Por cada unidad que aumente \(X\), \(Y\) subirá 3 unidades.Si la pendiente es \(-0.5\): Por cada unidad que aumente \(X\), \(Y\) bajará media unidad. El símbolo \(\Delta\) (Delta) significa incremento. ss

\[m = \frac{y_2 - y_1}{x_2 - x_1} = \frac{\Delta y}{\Delta x}\]

Imagina que \(P_1 = (1, 2)\) y \(P_2 = (3, 8)\).

  • Cambio en X (\(\Delta x\)): \(3 - 1 = 2\) (Avanzamos 2 unidades a la derecha).
  • Cambio en Y (\(\Delta y\)): \(8 - 2 = 6\) (Subimos 6 unidades).

Aplicando tu fórmula:\[m = \frac{6}{2} = 3\]

Tenemos varios tipos de pendiente:

  • Pendiente Ascendente (\(m > 0\))Si el resultado es mayor que cero, la recta sube de izquierda a derecha. Existe una relación directa: si \(X\) crece, \(Y\) también crece.
  • Pendiente Descendente (\(m < 0\))Si el resultado es menor que cero, la recta baja de izquierda a derecha. La relación es inversa: cuando \(X\) crece, \(Y\) decrece.
  • Pendiente Nula o Plana (\(m = 0\))Significa que no hay inclinación. El numerador (\(y_2 - y_1\)) es cero porque la altura nunca cambia; es una recta horizontal.
  • Pendiente Vertical o Infinita (\(m = \text{indefinida}\)) Si la recta es completamente vertical, los dos puntos tienen el mismo valor de \(X\) (\(x_2 = x_1\)). Al restar el denominador, hacemos \(x_2 - x_1 = 0\).Como en matemáticas no se puede dividir entre cero, el resultado es infinito.

2 Derivadas

2.1 Concepto de derivada

Cuando se calcula la pendiente de una recta, se neceistan dos puntos separados (\(P_1\) y \(P_2\)) para ver el cambio. En el caso de la derivada, lo que hacemos es “acercar” el punto \(P_2\) tanto, tanto, tanto al punto \(P_1\) que la distancia entre ellos se vuelve casi cero (\(\Delta x \to 0\)). Al hacer esto, la tasa de cambio ya no es un promedio entre dos momentos, sino el ratio instantáneo en ese único punto.

Si tienes una curva (una función que sube y baja) y eliges un solo punto, no puedes calcular una pendiente tradicional porque la curva va cambiando de dirección constantemente. Sin embargo, si “haces zoom” infinito en ese punto de la curva, verás que la curva empieza a parecer una línea recta. Si apoyas una regla justo en ese punto (sin cortar la curva, solo rozándola), esa es la recta tangente. La derivada es, la pendiente de la recta tangente que pasa por un punto.

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

2.2 Aproximación de derivada

Consideremos la función cuadrática:

\[f(x) = x^2\]

Nuestro objetivo es calcular la pendiente de la recta tangente a la curva en el punto donde \(x = 3\). Al evaluar este punto en la función, obtenemos su coordenada vertical correspondiente:

\[f(3) = 3^2 = 9 \implies P_1 = (3, 9)\]

Para hallar la derivada (la pendiente instantánea) de forma numérica, tomaremos un segundo punto cercano, \(P_2 = (x_2, y_2)\), y reduciremos progresivamente la distancia horizontal (\(\Delta x\)) entre ambos, aplicando la fórmula tradicional de la pendiente (\(m\)):

\[m = \frac{y_2 - y_1}{x_2 - x_1} = \frac{\Delta y}{\Delta x}\]

1. Distancia \(\Delta x = 1\)

Evaluamos el segundo punto en \(x = 4\):

\[f(4) = 4^2 = 16 \implies P_2 = (4, 16)\]

Calculamos la pendiente de la recta secante:

\[m = \frac{16 - 9}{4 - 3} = \frac{7}{1} = \mathbf{7.0}\]

2. Distancia $x = 0.1

Acercamos el punto a \(x = 3.1\):

\[f(3.1) = 3.1^2 = 9.61 \implies P_2 = (3.1, \, 9.61)\]

Calculamos la nueva pendiente:

\[m = \frac{9.61 - 9}{3.1 - 3} = \frac{0.61}{0.1} = \mathbf{6.1}\]

3. Distancia $x = 0.01

Reducimos la distancia a \(x = 3.01\):

\[f(3.01) = 3.01^2 = 9.0601 \implies P_2 = (3.01, \, 9.0601)\]

Calculamos la pendiente:

\[m = \frac{9.0601 - 9}{3.01 - 3} = \frac{0.0601}{0.01} = \mathbf{6.01}\]

4. Distancia \(\Delta x = 0.001\)

Llevamos la aproximación a \(x = 3.001\):

\[f(3.001) = 3.001^2 = 9.006001 \implies P_2 = (3.001, \, 9.006001)\]

Calculamos la pendiente:

\[m = \frac{9.006001 - 9}{3.001 - 3} = \frac{0.006001}{0.001} = \mathbf{6.001}\]

Conclusión del límite numérico

Si analizamos el comportamiento de las pendientes obtenidas a medida que la distancia \(\Delta x\) tiende a cero, observamos:

  • Para \(\Delta x = 1.0 \implies m = 7.0\)
  • Para \(\Delta x = 0.1 \implies m = 6.1\)
  • Para \(\Delta x = 0.01 \implies m = 6.01\)
  • Para \(\Delta x = 0.001 \implies m = 6.001\)

Matemáticamente, al acercar el segundo punto de forma infinita, los valores convergen hacia el número \(6\). Por lo tanto, concluimos que la tasa de cambio instantánea —es decir, la pendiente de la recta tangente que pasa por la curva en \(x = 3\)— es exactamente \(6\).

2.3 Derivada respecto a variable

Las derivadas siempre se expresan en función de una de las variables de la ecuación. Cuando trabajamos con funciones que tienen más de una variable, podemos elegir respecto a cuál de ellas queremos medir el cambio instantáneo.

\[f(x, y) = x^2 + y\]

  • Derivada respecto a la variable \(x\): En este caso, tratamos a la \(x\) como la única variable activa y consideramos a la \(y\) como si fuera un número constante.
  • Derivada respecto a la variable \(y\): Aquí hacemos lo contrario; la \(y\) es nuestra variable activa y la \(x\) se comporta como una constante.

Para diferenciar este proceso de una derivada común, el cálculo lineal utiliza una notación específica llamada derivadas parciales (usando el símbolo \(\partial\) en lugar de la \(d\) tradicional):

  • La derivada respecto a \(x\) se escribe: \(\frac{\partial f}{\partial x}\)
  • La derivada respecto a \(y\) se escribe: \(\frac{\partial f}{\partial y}\)

Esta flexibilidad en la notación nos permite analizar cómo cambia una función en distintas direcciones del espacio, manteniendo congeladas las demás variables.

Elegimos un punto, y vamos a calcular las derivadas parciales respecto a ese punto.

\[f(3, 5) = 3^2 + 5 = 9 + 5 = \mathbf{14}\]

Derivada respecto a \(x\) Como derivamos respecto a \(x\), la variable \(y\) se queda fija en \(5\). Hacemos un incremento de \(\Delta x = 0.001\), por lo que el nuevo punto será \((3.001, 5)\).

\[f(3.001, 5) = (3.001)^2 + 5 = 9.006001 + 5 = \mathbf{14.006001}\]

Calculamos la tasa de cambio:

\[m_x = \frac{f(3.001, 5) - f(3, 5)}{0.001} = \frac{14.006001 - 14}{0.001} = \frac{0.006001}{0.001} = \mathbf{6.001}\]

Derivada Parcial respecto a \(y\)

Ahora hacemos lo contrario: la \(x\) se queda congelada en \(3\). Hacemos el incremento en la variable \(y\) con \(\Delta y = 0.001\), por lo que el nuevo punto será \((3, 5.001)\).

\[f(3, 5.001) = 3^2 + 5.001 = 9 + 5.001 = \mathbf{14.001}\]

Calculamos la tasa de cambio:

\[m_y = \frac{f(3, 5.001) - f(3, 5)}{0.001} = \frac{14.001 - 14}{0.001} = \frac{0.001}{0.001} = \mathbf{1.0}\]

Conclusión

  • \(\frac{\partial f}{\partial x} = 6\): Significa que si te mueves un paso en el eje X, la función sube 6 unidades.
  • \(\frac{\partial f}{\partial y} = 1\): Significa que si te mueves un paso en el eje Y, la función sube solo 1 unidad.

2.4 Máximos y minimos de una función

En el estudio de una función existen valores máximos y valores mínimos. Al observar la gráfica de una función con picos y valles, podemos identificar una serie de puntos donde la curva deja de subir o bajar; estos lugares son considerados máximos o mínimos locales.

import numpy as np
import matplotlib.pyplot as plt

# 1. Datos de la trayectoria
x = np.linspace(0, 10, 500)
y = np.sin(x) * x 

# 2. Encontrar picos y valles (derivada = 0)
dy = np.gradient(y, x)
puntos_cero = np.where(np.diff(np.sign(dy)))[0]

# 3. Gráfico ultra compacto
plt.figure(figsize=(6, 2.5), dpi=100) # Tamaño pequeño
plt.plot(x, y, color='#1f77b4', linewidth=2) # Curva
plt.scatter(x[puntos_cero], y[puntos_cero], color='red', s=40, zorder=5) # Puntos Rojos

# Líneas tangentes horizontales cortas
for idx in puntos_cero:
    plt.axhline(y[idx], xmin=idx/500 - 0.04, xmax=idx/500 + 0.04, color='red', linestyle='--')

plt.grid(True, linestyle=':', alpha=0.5)
plt.tight_layout()
plt.show()

Geométricamente, estos valores representan puntos donde la recta tangente que roza la función se vuelve completamente horizontal, lo que significa que su pendiente es igual a cero. Dicho de otra forma, en esos picos y valles la derivada es 0, ya que, como sabemos, la derivada es la pendiente de la recta tangente en un punto específico.

3 Calcular la función derivada

La derivada de una función es otra función.

Imagina que tienes una función original \(f(x)\) que dibuja una curva. Si queremos saber con qué inclinación sube o baja la pendiente de la recta tangente en un punto exacto,podemos crear una función derivada a partir de la función original. El resultado es una nueva función llamada función derivada, que denotamos como \(f'(x)\).A nueva función \(f'(x)\) le introduces cualquier valor de \(x\) y ella te devuelve, la pendiente de la recta tangente en ese punto. Es decir, te dice el ritmo de cambio, la velocidad o la inclinación exacta de la curva original en ese preciso instante.

3.1 Power Rule

La Power Rule es la herramienta que usamos cuando nuestra función original es una variable elevada a cualquier exponente (un número fijo).

La regla nos da una instrucción mecánica muy sencilla para encontrar la función derivada: “Baja el exponente multiplicando al frente, y réstale 1 al exponente original”.

Si: \[f(x) = x^n\]

Entonces: \[f'(x) = n \cdot x^{n-1}\]

Imaginemos que nuestra función es una parábola sencilla:

\[f(x) = x^2\] \[f'(x) = 2 \cdot x^1 = \mathbf{2x}\]

En \(x = 3\), la pendiente de la recta tangente debería ser \(2 \cdot 3 = \mathbf{6}\).

Podemos experimentar para verificar que es así.

\[f(3.01) = (3.01)^2 = 9.0601\] \[\text{Pendiente} = \frac{9.0601 - 9}{0.01} = \frac{0.0601}{0.01} = \mathbf{6.01}\]

3.2 Derivada de una constante

Si nuestra función original es una constante (un número fijo, sin variables), su función derivada será cero.

Si

\[f(x) = c\]

Entonces:

\[f'(x) = 0\]

Por ejemplo, imaginamos esta función.

\[f(x) = 5x^2\]

\[f'(x) = 5 \cdot (2x^{2-1}) = 5 \cdot 2x = \mathbf{10x}\]

Nos dice que la pendiente en cualquier punto de la curva \(5x^2\) será exactamente 10 veces el valor de \(x\).

\[f'(2) = 10 \cdot 2 = \mathbf{20}\]

\[f(2) = 5 \cdot (2)^2 = 5 \cdot 4 = \mathbf{20}\] \[f(2.01) = 5 \cdot (2.01)^2 = 5 \cdot 4.0401 = \mathbf{20.2005}\] \[\text{Pendiente} = \frac{20.2005 - 20}{0.01} = \frac{0.2005}{0.01} = \mathbf{20.05}\]

3.3 Multiplicación por un Escalar

La derivada de una constante multiplicada por una función es igual a la constante multiplicada por la derivada de esa función.

\[g(x) = c \cdot f(x)\] \[g'(x) = c \cdot f'(x)\]

Imaginamos que tenemos esta función.

\(f(x) = \sqrt{x}\).

Su derivada utilizando la power rule es:

\[f'(x) = \frac{1}{2\sqrt{x}}\]

Alfinal una raíz cuadrada se puede expresar como pontencia.

\[\sqrt{x} = x^{1/2}\]

Ahora, vamos a crear una función modificada por un escalar (multiplicada por \(4\)):

\[g(x) = 4 \cdot \sqrt{x}\]

\[g'(x) = 4 \cdot \left( \frac{1}{2\sqrt{x}} \right) = \frac{4}{2\sqrt{x}} = \frac{2}{\sqrt{x}}\]

3.4 Regla de la suma

Si tenemos una función que es la combinación de dos funciones sumadas, su derivada es simplemente la suma de las derivadas individuales de cada una de esas funciones.

\[f(x) = g(x) + h(x)\] \[f'(x) = g'(x) + h'(x)\]

Imagina que tienes una función \(g(x)\) que avanza hacia arriba con una pendiente de \(2\) (sube 2 metros por cada segundo). Al mismo tiempo, tienes otra función \(h(x)\) que avanza hacia arriba con una pendiente de \(3\) (sube 3 metros por cada segundo).Si creas una nueva función \(f(x)\) que sea la suma de ambas, en cada segundo esa nueva función ganará la altura de la primera más la altura de la segunda. Por lo tanto, su velocidad de subida total (su pendiente) será inevitablemente \(2 + 3 = \mathbf{5}\). Las tasas de cambio simplemente se acumulan.

3.5 Regla del producto

Cuando multiplicas dos funciones, ambas están cambiando al mismo tiempo, lo que genera un efecto cruzado.

La derivada del primero por el segundo sin derivar, más el primero sin derivar por la derivada del segundo.

\[f(x) = g(x) \cdot h(x)\] \[f'(x) = g'(x) \cdot h(x) + g(x) \cdot h'(x)\]

Vamos a demostrar que la regla funciona usando dos funciones sencillas:

  • \(g(x) = x^2 \rightarrow\) su derivada es \(g'(x) = 2x\)
  • \(h(x) = x \rightarrow\) su derivada es \(h'(x) = 1\)

Nuestra función producto es \(f(x) = x^2 \cdot x = x^3\).

\[f'(x) = \underbrace{(2x)}_{g'(x)} \cdot \underbrace{(x)}_{h(x)} + \underbrace{(x^2)}_{g(x)} \cdot \underbrace{(1)}_{h'(x)}\] \[f'(x) = 2x^2 + x^2 = \mathbf{3x^2}\]

3.6 Regla de la Cadena (Chain Rule)

Cuando tenemos una función dentro de otra (una composición de funciones), un cambio en la variable más interna (\(x\)) provoca un efecto dominó: primero cambia la función interna (\(u\)) y ese cambio, a su vez, hace cambiar a la función externa (\(y\)).Para medir el impacto total de \(x\) sobre \(y\), la Regla de la Cadena nos dice que debemos multiplicar las tasas de cambio de cada eslabón.

\[\frac{dy}{dx} = \frac{dy}{du} \cdot \frac{du}{dx}\]

  • Función externa: \(y = u^5\)
  • Función interna: \(u = 3x^2 + 2x + 1\)

Queremos encontrar la derivada de \(y\) respecto a \(x\) (\(\frac{dy}{dx}\)):

Aplicamos la Power Rule a \(u^5\):

\[\frac{dy}{du} = 5u^4\]

Aplicamos la regla de la suma, constante por escalar y Power Rule a \(3x^2 + 2x + 1\):

\[\frac{du}{dx} = 6x + 2\]

\[\frac{dy}{dx} = \frac{dy}{du} \cdot \frac{du}{dx} = (5u^4) \cdot (6x + 2)\]

\[\frac{dy}{dx} = 5(3x^2 + 2x + 1)^4 \cdot (6x + 2)\]

4 Derivadas Parciales

En una sola dimensión, la derivada de una función nos devuelve la pendiente de una recta tangente. Sin embargo, cuando trabajamos con funciones de dos variables —donde tenemos dos entradas \((x, y)\) y una salida \((z)\)— la gráfica resultante se convierte en una superficie tridimensional. En este entorno, las aproximaciones lineales ya no son rectas, sino planos tangentes.

Si tomamos una superficie en 3D (como el paraboloide \(z = x^2 + y^2\)) y fijamos el valor de una de las variables, por ejemplo haciendo \(y = 4\), esa variable se comporta inmediatamente como una constante.

import numpy as np
import matplotlib.pyplot as plt
from sys import exit

# 1. Definir la función original (Paraboloide) y su plano tangente
def f(X, Y):
    return X**2 + Y**2

# Punto de tangencia elegido: (x0, y0)
x0, y0 = 1.0, 1.0
z0 = f(x0, y0)

# Derivadas parciales evaluadas en el punto (calculadas previamente: 2*x y 2*y)
df_dx = 2 * x0
df_dy = 2 * y0

# Ecuación del plano tangente: z = z0 + df_dx*(x - x0) + df_dy*(y - y0)
def plano_tangente(X, Y):
    return z0 + df_dx * (X - x0) + df_dy * (Y - y0)

# 2. Crear la malla de puntos para la superficie 3D
x = np.linspace(-2, 2, 40)
y = np.linspace(-2, 2, 40)
X, Y = np.meshgrid(x, y)
Z_superficie = f(X, Y)
Z_plano = plano_tangente(X, Y)

# 3. Graficar en 3D
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')

# Dibujar la superficie original (azul translúcido)
ax.plot_surface(X, Y, Z_superficie, cmap='Blues', alpha=0.6, edgecolor='none')

# Dibujar el plano tangente (naranja translúcido)
ax.plot_surface(X, Y, Z_plano, cmap='Oranges', alpha=0.5, edgecolor='none')

# Marcar el punto exacto de tangencia (esfera roja)
ax.scatter([x0], [y0], [z0], color='red', s=100, label=f'Punto de Tangencia ({x0}, {y0})', zorder=5)

# Configurar etiquetas y límites del gráfico
ax.set_title('Plano Tangente sobre la superficie $z = x^2 + y^2$', fontsize=14)
ax.set_xlabel('Eje X')
ax.set_ylabel('Eje Y')
ax.set_zlabel('Eje Z')
ax.set_zlim(0, 8)
ax.legend()

# Mostrar el gráfico interactivo
plt.show()

Al hacer esto, estamos intersecando o “cortando” la superficie tridimensional con un plano vertical. El resultado de ese corte es una curva bidimensional (una parábola). Como ahora estamos ante una función de una sola variable (\(x\)), podemos calcular la pendiente de su recta tangente de la forma tradicional. Esa pendiente es la derivada parcial respecto a \(x\).Si repetimos el proceso fijando la \(x\) como una constante, cortaremos la superficie en la otra dirección, obteniendo una nueva curva cuya recta tangente representa la derivada parcial respecto a \(y\). Una función tendrá siempre tantas derivadas parciales como variables independientes posea.

\[z = f(x,y) = x^2 + y^2\]

  • Derivada parcial respecto a \(x\) (\(\frac{\partial f}{\partial x}\)): Tratamos a \(y\) como una constante (su derivada será 0) y aplicamos la Power Rule a \(x^2\). El resultado es \(2x\).
  • Derivada parcial respecto a \(y\) (\(\frac{\partial f}{\partial y}\)): Tratamos a \(x\) como una constante (su derivada será 0) y aplicamos la Power Rule a \(y^2\). El resultado es \(2y\).

Estas dos pendientes obtenidas de forma independiente son las que, al combinarse, sostienen y definen la inclinación exacta del plano tangente en cualquier punto de la superficie.

from sympy import symbols, diff

# Definir las variables simbólicas
x, y = symbols('x y')

# Definir la función de la superficie (paraboloide)
funcion = x**2 + y**2

# Calcular las derivadas parciales
derivada_x = diff(funcion, x)
derivada_y = diff(funcion, y)

# Mostrar los resultados en consola
print("Función original:", funcion)
print("Derivada parcial respecto a x:", derivada_x)
print("Derivada parcial respecto a y:", derivada_y)
Función original: x**2 + y**2
Derivada parcial respecto a x: 2*x
Derivada parcial respecto a y: 2*y