Explicación Funciones de activación y práctica con Python.

Original article was published by Rubiales Alberto on Deep Learning on Medium


¿Qué es una función de activación?

Respuesta corta que hay que dar en una entrevista: en el mundo de la inteligencia artificial se conoce la función de activación, como aquella, que activa los pesos de una neurona según el resultado de dicha neurona. Esto permite introducir la no linealidad en las redes neuronales, hay distintos tipos de funciones de activación y no solo son usados en el campo del Deep Learning.

En este artículo vamos a ver las funciones de activación más conocidas desde la formula, hasta la práctica en código. Al final del artículo sabrás perfectamente cuál es la función de cada una y te darás cuenta de lo realmente sencillo que es esta parte de las Redes Neuronales.

Sigmoide (Logística)

Muy usada en el mundo del Deep Learning y el Machine Learning, sobre todo para problemas de clasificación binaria. Su formula es:

Muy sencilla, se llama también Función Logística, porque es la que es usada en la Regresión Logística, es una función muy suavizada como podemos ver en su gráfica:

Propiedades matemáticas:

  • Es continua
  • Es derivable
  • Va de 0 a 1

Su principal ventaja es que es derivable, lo que permite hacer de forma directa la propagación hacia atrás en las redes neuronales (Back Propagation), sus principales desventajas son que sus resultados no tienen media cero y que su tiempo de computación es alto.

RELU

RELU (Rectificador Lineal Unitario), probablemente la más usada en el mundo del Deep Learning, sobre todo en la clasificación de imágenes, su formula matemática es sencillísima:

Formula RELU

Basicamente, dado un valor x si dicho valor es menor que 0, conviértelo a 0, y si es mayor, devuelve el mismo valor. Esto en el Deep Learning se traduce como “siempre que una neurona de un Output negativo, desactiva dicha neurona” . Esta es su gráfica:

Propiedades matemáticas:

  • Es continua
  • NO lineal
  • NO derivable
  • Va de 0 a ∞

Una de las grandes ventajas de esta función es su simplicidad y por tanto rapidez computacional, lo que en los procesos de Deep Learning que pueden durar horas/días/semanas, es una gran ventaja. Su código sería así:

RELU6

La función RELU, tiene bastantes variantes, esta es una de ellas. Es muy parecida por lo que voy a resumir bastante.

relubaBásicamente si el valor es menor que cero, lo convierte a cero y si es mayor que seis, lo convierte a seis, si es cualquier valor entre cero y seis, queda dicho valor. Su gráfica es:

y su código es casi igual que la RELU:

Leaky RELU

Esta variante de la RELU, si permite los valores negativos, pero acentúa los positivos. Su formula la podríamos escribir así:

Básicamente si el valor es menor que cero, quedamos el valor, si es mayor lo multiplicamos por un número elegido “alpha”. Esta es su gráfica:

Su código:

Tangente Hiperbólica

Es parecida a la sigmoide, pero tiene una parte negativa, su formula es:

Para un valor x, se transformará en un valor entre -1 y 1. A diferencia de la función sigmoide, esta función tiene media 0 y desviación típica uno, por lo que para conjuntos de datos cuya media esté entorno a cero suele funcionar muy bien. Aquí su gráfica

Propiedades matemáticas:

  • Es continua
  • Es derivable
  • Va de -1 a 1
  • Media 0 y desviación típica 1

Dos de las desventajas de esta función, al igual que la sigmoide es que necesita más tiempo de procesamiento que las demás, y que además es propensa al problema a dar problemas de desvanecimiento de gradiente (Vanish gradient). Esta sería su codificación en Python:

Softsign

Es parecida a la tangente hiperbólica, sus valores van de -1 a 1, tiene media 0 y su desviación típica es 1. Es más suavizada que la tangente hiperbólica. Su función es muy fácil:

Su gráfica muy parecida a la de la tangente hiperbólica, pero más suavizada. Aquí podemos ver ambas:

Propiedades matemáticas:

  • Es continua
  • NO derivable
  • Va de -1 a 1
  • Media 0 y desviación típica 1

Su codificación sería la siguiente:

Softplus

Es la función continua y derivable de la función RELU. Esto se consigue mediante el logaritmo. Esta es su función.

Su gráfica es parecida a la RELU, pero más suavizada, aquí están las dos, para poder compararlas.

Propiedades matemáticas:

  • Es continua
  • Es derivable (RELU no lo era)
  • Va de 0 a ∞

Su codificación es la siguiente:

ELU

Es similar a la RELU, lo único que los valores negativos forman una asíntota horizontal hacia -1. Su función la podemos definir así:

Sencillo, si x es menor que cero, elevamos el número irracional e a x y le restamos 1, si es igual o mayor que cero quedamos el mismo valor. Su gráfica es parecida a la RELU:

Y su código en Python sería:

Softmax

En clasificación, sirve para cuando tenemos múltiples clases y queremos extraer la probabilidad según los datos de pertenecer a las distintas clases posibles. Hay muchas variantes, su formula es:

Para esta versión de la Softmax, las categorías son excluyentes, es decir, si se asigna una categoría, ya no se puede pertenecer a otra.

Normalmente esta función es usada en la capa final de la red neuronal, para realizar la predicción de dicha red neuronal. Su función en Python sería así:

Esta función básicamente se le entrega una lista de datos y dichos datos son transformados en una distribución de probabilidad, la suma de todas las probabilidades tiene que dar uno y aquella clase con mayor probabilidad será la escogida por la red neuronal.

Conclusiones

Aquí hemos visto las distintas funciones de activación, hemos visto que características tiene cada una, lo que nos servirá para elegir la apropiada en el momento de construir nuestra red neuronal. Por ejemplo:

  • Si nuestros datos tienen media 0 y desviación típica 1, la función de activación Tangente Hiperbólica o la función Softsign son las más adecuadas.
  • Si nuestros datos son imágenes, son datos que van de 0 a 255 (gama de colores de las imágenes). Por lo que tendría sentido usar la función RELU, que corta los datos en 0.
  • Si nuestra distribución de datos, es necesario tener en cuenta los datos negativos, la función Leaky Relu, es la más adecuada.
  • Si tenemos un problema de clasificación binario, la función Sigmoide parece la más adecuada, ya que nos puede tratar los datos como cero o uno.
  • Si tenemos un problema de clasificación múltiple, la función Softmax es la más adecuada, ya que trata los datos y nos devuelve una distribución de probabilidad de cada clase.

En definitiva, las funciones de activación son sencillas y pueden tener un gran impacto en las predicciones, Hay más de las que aquí he expuesto, pero estas son las más conocidas. De hecho cuando buscas perfeccionar una red neuronal, muchas veces acabas creando tus propias funciones de activación para que se ajusten mejor a los datos.

Espero que os haya ayudado a entender las distintas funciones de activación, si ha sido así, por favor no te olvides de darle unas palmadas al artículo 👏 👏 👏 para ayudar a su difusión!!