La función sigmoide es ampliamente usada en redes neuronales para transformar valores reales en el intervalo \((0, 1)\).
Fórmula:
\[ \sigma(x) = \frac{1}{1 + e^{-x}} \]
Derivada:
\[ \sigma'(x) = \sigma(x) (1 - \sigma(x)) \]
sigmoid <- function(x) {
1 / (1 + exp(-x))
}
curve(sigmoid, from = -10, to = 10, col = "blue", lwd = 2,
ylab = "f(x)", xlab = "x", main = "Función Sigmoide")
abline(h = c(0, 1), lty = 2, col = "gray")
La sigmoide es útil en clasificación binaria, pero puede saturarse para valores extremos (problema del gradiente).
Es similar a la sigmoide, pero su salida está centrada en cero.
Fórmula:
\[ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \]
Derivada:
\[ \tanh'(x) = 1 - \tanh^2(x) \]
curve(tanh, from = -5, to = 5, col = "darkgreen", lwd = 2,
ylab = "f(x)", xlab = "x", main = "Tangente Hiperbólica")
abline(h = c(-1, 1), lty = 2, col = "gray")
Se prefiere sobre la sigmoide en redes profundas por estar centrada en cero.
Función lineal rectificada. Muy utilizada por su simplicidad.
Fórmula:
\[ f(x) = \max(0, x) \]
Derivada:
\[ f'(x) = \begin{cases} 1 & \text{si } x > 0 \\ 0 & \text{si } x \leq 0 \end{cases} \]
relu <- function(x) ifelse(x > 0, x, 0)
curve(relu, from = -5, to = 5, col = "red", lwd = 2,
ylab = "f(x)", xlab = "x", main = "ReLU")
ReLU es rápida y eficiente, pero puede causar el problema de neuronas muertas.
Mejora la ReLU permitiendo un pequeño gradiente cuando \(x < 0\).
Fórmula:
\[ f(x) = \begin{cases} x & \text{si } x > 0 \\ \alpha x & \text{si } x \leq 0 \end{cases} \quad \text{con } \alpha \approx 0.01 \]
Derivada:
\[ f'(x) = \begin{cases} 1 & \text{si } x > 0 \\ \alpha & \text{si } x \leq 0 \end{cases} \]
leaky_relu <- function(x, alpha = 0.01) ifelse(x > 0, x, alpha * x)
curve(leaky_relu, from = -5, to = 5, col = "purple", lwd = 2,
ylab = "f(x)", xlab = "x", main = "Leaky ReLU")
Evita neuronas muertas al mantener una pequeña pendiente negativa.
Es una versión suave de ReLU.
Fórmula:
\[ f(x) = \ln(1 + e^x) \]
Derivada:
\[ f'(x) = \frac{1}{1 + e^{-x}} = \text{sigmoide}(x) \]
softplus <- function(x) log(1 + exp(x))
curve(softplus, from = -5, to = 5, col = "orange", lwd = 2,
ylab = "f(x)", xlab = "x", main = "Softplus")
Es continua y diferenciable, pero computacionalmente más costosa.