Cómo aproximar derivadas usando valores discretos
La diferenciación numérica es una técnica para estimar derivadas usando valores finitos de una función, en lugar de calcularlas analíticamente.
👉 Es útil cuando la función es desconocida, compleja o solo disponible como “caja negra”.
Definición corta
La diferenciación numérica aproxima derivadas mediante diferencias finitas.
Definición detallada
La derivada se aproxima como:
Donde:
- = pequeño incremento
👉 Es una aproximación, no exacta.
Intuición
La diferenciación numérica responde:
👉 “Si avanzo un poco, ¿cuánto cambia la función?”
Punto x
↓
Pequeño cambio h
↓
Cambio en f
↓
Estimación de pendiente
Tipos de diferencias finitas
🔹 Diferencia hacia adelante
🔹 Diferencia hacia atrás
🔹 Diferencia central
👉 Más precisa.
Comparación de precisión
| Método | Precisión |
|---|---|
| Forward | baja |
| Backward | baja |
| Central | alta |
🔄 Relación con otros conceptos
- Derivada
- Diferenciación automática
- Diferenciación simbólica
- Gradiente
Diferenciación numérica en machine learning
🔹 1. Gradient checking
Verifica gradientes:
👉 comparando con AD
🔹 2. Modelos caja negra
Cuando no hay fórmula explícita.
🔹 3. Simulaciones
Modelos físicos o experimentales.
🔹 4. Debugging
Validar implementaciones.
📊 Ejemplo paso a paso
👉 Aproximación cercana a 4.
Ejemplo conceptual
Función desconocida
↓
Evaluaciones en puntos cercanos
↓
Estimación de derivada
⚠️ Elección de h
- muy grande → error de aproximación
- muy pequeño → error numérico
👉 equilibrio necesario.
Error numérico
- error de truncamiento
- error de redondeo
👉 ambos afectan precisión.
Ejemplo en Python
import numpy as npdef f(x): return x**2def forward_diff(x, h=1e-5): return (f(x + h) - f(x)) / hdef central_diff(x, h=1e-5): return (f(x + h) - f(x - h)) / (2*h)print("Forward:", forward_diff(2))print("Central:", central_diff(2))
Ejemplo multivariable
import numpy as npdef f(x): return x[0]**2 + x[1]**2def grad(x, h=1e-5): g = np.zeros_like(x) for i in range(len(x)): x_h = x.copy() x_h[i] += h g[i] = (f(x_h) - f(x)) / h return gprint(grad(np.array([2.0, 3.0])))
Ejemplo en PyTorch (comparación)
import torchx = torch.tensor(2.0, requires_grad=True)y = x**2y.backward()grad_autodiff = x.grad.item()h = 1e-5grad_numeric = ((2.0 + h)**2 - 2.0**2) / hprint("AutoDiff:", grad_autodiff)print("Numérico:", grad_numeric)
Qué muestra este ejemplo
- Aproximación de derivadas
- Comparación con AD
- Validación de gradientes
Errores comunes
Elegir mal h
Impacta precisión.
Usarlo en modelos grandes
Muy lento
Asumir exactitud
Siempre hay error.
Ejemplo conceptual en ML
Modelo
↓
Gradiente (AD)
↓
Verificación (numérico)
Interpretación profunda
La diferenciación numérica permite:
- estimar derivadas sin fórmulas
- validar modelos
- trabajar con sistemas complejos
👉 Es una herramienta práctica, pero no escalable.
Conclusión
La diferenciación numérica aproxima derivadas mediante diferencias finitas. Es útil para verificación y casos donde no hay acceso a derivadas exactas.
👉 Es simple, pero menos precisa y eficiente que la diferenciación automática.