En este artículo, entenderemos las funciones de activación de PyTorch.
¿Qué es una función de activación y por qué usarla?
Las funciones de activación son los componentes básicos de Pytorch. Antes de llegar a los tipos de funciones de activación, primero comprendamos el funcionamiento de las neuronas en el cerebro humano. En las Redes Neuronales Artificiales, tenemos una capa de entrada que es la entrada del usuario en algún formato, una capa oculta que realiza los cálculos ocultos e identifica las características y la salida es el resultado. Entonces toda la estructura es como una red con neuronas conectadas entre sí. Entonces tenemos neuronas artificiales que son activadas por estas funciones de activación. La función de activación es una función que realiza cálculos para proporcionar una salida que puede actuar como entrada para las próximas neuronas. Una función de activación ideal debería manejar relaciones no lineales mediante el uso de conceptos lineales y debería ser diferenciable para reducir los errores y ajustar los pesos en consecuencia. Todas las funciones de activación están presentes en la biblioteca torch.nn.
Tipos de función de activación de Pytorch
Veamos las diferentes funciones de activación de Pytorch:
- Función de activación de ReLU
- Función de activación de Leaky ReLU
- Función de activación sigmoidea
- Función de activación de Tanh
- Función de activación Softmax
Función de activación ReLU:
ReLU significa función de activación lineal rectificada. Es una función no lineal y, gráficamente, ReLU tiene el siguiente comportamiento transformador:
ReLU es una función de activación popular ya que es diferenciable y no lineal. Si las entradas son negativas, su derivada se convierte en cero, lo que provoca la ‘muerte’ de las neuronas y no se produce el aprendizaje. Ilustremos el uso de ReLU con la ayuda del programa Python.
Python3
import torch import torch.nn as nn # defining relu r = nn.ReLU() # Creating a Tensor with an array input = torch.Tensor([1, -2, 3, -5]) # Passing the array to relu function output = r(input) print(output)
Producción:
tensor([1., 0., 3., 0.])
Función de activación de Leaky ReLU:
La función de activación Leaky ReLU o LReLU es otro tipo de función de activación que es similar a ReLU pero resuelve el problema de las neuronas ‘moribundas’ y, gráficamente, Leaky ReLU tiene el siguiente comportamiento transformador:
Esta función es muy útil ya que cuando la entrada es negativa la diferenciación de la función no es cero. Por lo tanto, el aprendizaje de las neuronas no se detiene. Ilustremos el uso de LReLU con la ayuda del programa Python.
Python3
# code import torch import torch.nn as nn # defining Lrelu and the parameter 0.2 is passed to control the negative slope ; a=0.2 r = nn.LeakyReLU(0.2) # Creating a Tensor with an array input = torch.Tensor([1,-2,3,-5]) output = r(input) print(output)
Producción:
tensor([ 1.0000, -0.4000, 3.0000, -1.0000])
Función de activación sigmoidea:
La función sigmoidea es una función de activación no lineal y diferenciable. Es una curva en forma de S que no pasa por el origen. Produce una salida que se encuentra entre 0 y 1. Los valores de salida a menudo se tratan como una probabilidad. A menudo se utiliza para la clasificación binaria. Es lento en computación y, gráficamente, Sigmoid tiene el siguiente comportamiento transformador:
La función de activación sigmoide tiene un problema de «Gradiente de fuga». El gradiente de fuga es un problema importante, ya que se alimenta una gran cantidad de entradas a la red neuronal y aumenta la cantidad de capas ocultas, el gradiente o la derivada se acercan a cero, lo que genera inexactitud en la red neuronal.
Ilustremos el uso de la función Sigmoid con la ayuda de un programa Python.
Python3
import torch import torch.nn as nn # Calling the sigmoid function sig = nn.Sigmoid() # Defining tensor input = torch.Tensor([1,-2,3,-5]) # Applying sigmoid to the tensor output = sig(input) print(output)
Producción:
tensor([0.7311, 0.1192, 0.9526, 0.0067])
Función de activación de Tanh:
La función Tanh es una función no lineal y diferenciable similar a la función sigmoidea, pero los valores de salida oscilan entre -1 y +1. Es una curva en forma de S que pasa por el origen y, gráficamente, Tanh tiene el siguiente comportamiento transformador:
El problema con la función de activación de Tanh es que es lenta y persiste el problema del gradiente de fuga. Ilustremos el uso de la función Tanh con la ayuda de un programa Python.
Python3
import torch import torch.nn as nn # Calling the Tanh function t = nn.Tanh() # Defining tensor input = torch.Tensor([1,-2,3,-5]) # Applying Tanh to the tensor output = t(input) print(output)
Producción:
tensor([0.7311, 0.1192, 0.9526, 0.0067])
Función de activación Softmax:
La función softmax es diferente de otras funciones de activación ya que se coloca en último lugar para normalizar la salida. Podemos usar otras funciones de activación en combinación con Softmax para producir la salida en forma probabilística. Se utiliza en la clasificación multiclase y genera una salida de probabilidades cuya suma es 1. El rango de salida se encuentra entre 0 y 1. Softmax tiene el siguiente comportamiento transformador:
Ilustremos con la ayuda del Programa Python:
Python3
import torch import torch.nn as nn # Calling the Softmax function with # dimension = 0 as dimension starts # from 0 sm = nn.Softmax(dim=0) # Defining tensor input = torch.Tensor([1,-2,3,-5]) # Applying function to the tensor output = sm(input) print(output)
Producción:
tensor([0.7311, 0.1192, 0.9526, 0.0067])