Las redes neuronales son modelos computacionales
inspirados en el cerebro humano, diseñados para aprender patrones
complejos a partir de datos. Sin embargo, dado que estos patrones suelen
ser no lineales, las redes requieren un componente esencial: las
funciones de activación. Estas funciones transforman no
linealmente la señal de entrada en una salida procesada, permitiendo
modelar relaciones complejas entre capas. Sin ellas, las redes se
limitarían a combinaciones lineales, incapaces de capturar patrones en
procesamiento de imágenes, lenguaje o predicciones financieras. A
continuación se presentan 5 funciones de activación y sus respectivas
derivadas.
\[ \text{H}(x) = \begin{cases} 0 & \text{si } x < \theta, \\ 1 & \text{si } x \geq \theta. \end{cases} \]
donde \(\theta\) es el umbral de activación, usalmente \(\theta=0\).
#Se define la función
funcion_paso_binario<-function(x, theta=0) {ifelse(x>theta, 1, ifelse(x<theta, 0, NA))}
#Se grafica con curve
curve(funcion_paso_binario, from = -10, to = 10, col = "#1874CD", lwd = 2, xlab="x", ylab="H(x)")
points(0, 0, pch = 21, bg = "white", col = "#1874CD", cex = 1.5) # Bola abierta
points(0, 1, pch = 19, col = "#1874CD", cex = 1.5) # Bola cerrada
\[ H'(x)= 0 \quad \forall x \neq \theta \]
Debido a que hay una discontinuidad en x=\(\theta\), que en este caso es igual a 0, la derivada no existe en este punto.
#Se define la función
derivada_funcion_paso_binario<-function(x, theta=0) {ifelse(x!=theta,0,NA)}
#Se grafica con curve
curve(derivada_funcion_paso_binario, from = -10, to = 10, col = "#1874CD", lwd = 2, xlab="x", ylab="H'(x)")
points(0, 0, pch = 21, bg = "white", col = "#1874CD", cex = 1.5) # Bola abierta
La función de paso binario es una función de activación simple, pero
fundamental en las primeras redes neuronales bastante simples. Toma una
entrada real y a partir de un umbral, activa una neurona (\(H(x)=1\)) si la entrada supera el umbral y
la desactiva (\(H(x)=0\)) en caso
contrario. Con esto en mente, esta función es útil en modelos discretos
como redes neuronales binarias o en sistemas de control basados en
umbrales. No obstante, su limitación principal es que no es
diferenciable en \(x = \theta\) y la
derivada es 0 en todos los demás puntos, por tanto no es posible usar el
backpropagation para el ajuste de pesos, lo que la hace inviable en
redes profundas modernas.
\[ σ(x)= \frac{1}{1+e^{-x}} \]
#Se define la función
funcion_sigmoide<-function(x) {1/(1+exp(-x))}
#Se grafica con curve
curve(funcion_sigmoide, from = -10, to = 10, col = "#1874CD", lwd = 2, xlab="x", ylab="σ(x)")
\[ σ'(x)= \frac{e^{-x}}{(1+e^{-x})^2} \]
#Se define la función
derivada_funcion_sigmoide<-function(x) {exp(-x)/(1+exp(-x))^2}
#Se grafica con curve
curve(derivada_funcion_sigmoide, from = -10, to = 10, col = "#1874CD", lwd = 2, xlab="x", ylab="σ'(x)")
La función sigmoide tiene una curva en forma de S, es una función
suave y diferenciable en todos \(\rm I\!
R\) que transforma cualquier valor real en un rango entre 0 y 1
(\(σ(x) \in\) (0,1) \(\forall x \in \rm I\! R\)), lo que la hace
ideal para modelar probabilidades en problemas de clasificación binaria.
Las entradas más grandes y positivas producen valores cercanos a 1,
mientras que las más pequeñas y negativas producen valores cercanos a 0,
lo que ocurre también con su derivada, pues note que su valor máximo es
igual a 0.25 en \(x=0\), pero para
valores en los extremos sus salidas son próximas a 0, por lo que durante
el backpropagation en las capas iniciales los pesos de los nodos son
casi 0, lo que estanca el aprendizaje, esto es lo que se conoce como el
problema de desvanecimiento del gradiente.
\[ \tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} \]
#Se define la función
funcion_tanh<-function(x) {(exp(x)-exp(-x))/(exp(x)+exp(-x))}
#Se grafica con curve
curve(funcion_tanh, from = -10, to = 10, col = "#1874CD", lwd = 2, xlab="x", ylab="tanh(x)")
\[ \tanh'(x)= \frac{4}{(e^{x}+e^{-x})^2} \]
#Se define la función
derivada_funcion_tanh<-function(x) {4/(exp(x)+exp(-x))^2}
#Se grafica con curve
curve(derivada_funcion_tanh, from = -10, to = 10, col = "#1874CD", lwd = 2, xlab="x", ylab="tanh'(x)")
La función tangente hiperbólica es una función suave e inifnitamente
diferenciable en todo \(\rm I\! R\) que
transforma cualquier valor real en un rango entre -1 y 1, es decir \(\tanh(x)\) \(\in\) (-1,1) \(\forall x \in \rm I\! R\). Está centrada en
cero y su resultado es simétrico alrededor del origen, es decir es una
función impar. Lo anterior ayuda a representar salidas negativas,
neutras o positivas lo que es preferible en problemas donde los datos
están centrados en 0. En comparación con la sigmoide, esta propiedad
implica una mayor diversidad en los signos de las derivadas parciales
durante el backpropagation, por tanto hay una mayor flexibilidad y
eficiencia en el aprendizaje. A pesar de que la derivada máxima vale 1
en \(x=0\), al igual que la sigmoide,
se aproxima a cero para valores extremos, lo que también puede provocar
el problema de desvanecimiento del gradiente en capas iniciales.
\[ \text{ReLU}(x) = \max(0, x) = \begin{cases} 0 & \text{si } x \leq 0, \\ x & \text{si } x > 0. \end{cases} \]
#Se define la función
ReLU<-function(x) {pmax(0,x)}
#Se grafica con curve
curve(ReLU, from = -10, to = 10, col = "#1874CD", lwd = 2, xlab="x", ylab="ReLU(x)")
\[ \text{ReLU}'(x) = \begin{cases} 0 & \text{si } x < 0, \\ 1 & \text{si } x > 0. \end{cases} \]
En x=0 hay un punto esquinoso, por tanto la derivada no existe en este punto.
#Se define la función
derivada_ReLU <- function(x) {ifelse(x > 0, 1, ifelse(x < 0, 0, NA))}
#Se grafica con curve
curve(derivada_ReLU, from = -10, to = 10, col = "#1874CD", lwd = 2, xlab="x", ylab="ReLU'(x)")
#bolas abierts
points(0, 0, pch = 21, bg = "white", col = "#1874CD", cex = 1.5)
points(0, 1, pch = 21, bg = "white", col = "#1874CD", cex = 1.5)
La función ReLU transforma cualquier valor real en un número mayor o
igual a 0. Es una de las más importantes funciones de activación en
redes neuronales por su eficiencia computacional, pues además de tener
operaciones simples, en algunas situaciones donde los valores negativos
representan ruido o características menos importantes, la activación
dispersa es lo ideal, ya que solo las neuronas relevantes procesan la
información y se reduce la carga computacional. Por otro lado, a
diferencia de la función sigmoide y tangente hiperbólica, ReLU mitiga el
problema del desvanecimiento del gradiente, puesto que, a pesar de que
su derivada sea indefinida en 0, para las neuronas activas su derivada
es 1, lo que permite un flujo constante de gradientes y acelera el
entrenamiento, dado que no se estanca y es ideal para las capas ocultas
en redes neuronales profundas. No obstante, para las neuronas con
entradas siempre negativas está el problema de las neuronas muertas,
dado que dejan de aprender y se puede perder información valiosa
dependiendo del problema.
\[ \text{softplus}(x) = \ln(1+e^{x})\]
#Se define la función
funcion_softplus<-function(x) {log(1+exp(x))}
#Se grafica con curve
curve(funcion_softplus, from = -10, to = 10, col = "#1874CD", lwd = 2, xlab="x", ylab="softplus(x)")
\[ \text{softplus}'(x)= \frac{e^x}{1+e^x} \]
#Se define la función
derivada_funcion_softplus<-function(x) {exp(x)/(1+ exp(x))}
#Se grafica con curve
curve(derivada_funcion_softplus, from = -10, to = 10, col = "#1874CD", lwd = 2, xlab="x", ylab="softplus'(x)")
La función Softplus transforma entradas reales a un rango de salida
(0, +\(\infty\)). A diferencia de ReLU,
Softplus es infinitamente diferenciable en todo su dominio, por lo que
es preferible en contextos donde la diferenciabilidad es importante.
Note que su derivada coinicide con la función sigmoide y tiene un
comportamiento asintótico, pues tiene un rango (0,1) \(\forall x \in \rm I\! R\), lo que evita el
problema de las neuronas muertas que ocurre en ReLU, puesto que la
función y su derivada nunca se anulan. Sin embargo, su cálculo implica
operaciones exponenciales y logarítmicas, lo que la hace más costosa
computacionalmente y lenta que ReLU. Finalmente, aunque su derivada
nunca es 0, en valores negativos extremos la derivada es muy pequeña, lo
que puede estancar o ralentizar el aprendizaje.
Buhl, N. (2023, 17 octubre). Activation Functions in Neural Networks: With 15 examples. https://encord-com.translate.goog/blog/activation-functions-neural-networks/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=tc
DataCamp. (s.f.). Introducción a las funciones de activación en redes neuronales. https://www.datacamp.com/es/tutorial/introduction-to-activation-functions-in-neural-networks
Redes neuronales: Funciones de activación. (s.f.). Google For Developers. https://developers.google.com/machine-learning/crash-course/neural-networks/activation-functions?hl=es-419
Vicente, F. R. (2023, 29 junio). Las matemáticas del Machine
Learning: Funciones de activación. Telefónica Tech. https://telefonicatech.com/blog/las-matematicas-del-machine-learning-funciones-de-activacion