Funciones de activación en Pytorch

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 Activation Function

 

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:

Leaky ReLU Activation Function

 

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:

Sigmoid Activation Function

 

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:

Tanh Activation Function

 

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:

Softmax Activation Function

 

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])

Publicación traducida automáticamente

Artículo escrito por jhimlic1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *