TensorFlow

TensorFlow

Tutorial TensorFlow: Funciones de activación

Descubre cómo usar funciones de activación en Keras. Aprende las diferencias entre ReLU, Sigmoid, Tanh, y otras, y elige la adecuada para tus redes neuronales.

Aprende TensorFlow GRATIS y certifícate

¿Qué son las funciones de activación?

Las funciones de activación son componentes esenciales en las redes neuronales que introducen no linealidad en el modelo. Al aplicar una función de activación a la salida de una neurona, se permite que la red aprenda relaciones complejas y no lineales entre las entradas y salidas. Sin esta no linealidad, las redes neuronales serían equivalentes a un modelo lineal, limitando su capacidad para resolver problemas más sofisticados.

En el proceso de una red neuronal, cada neurona recibe una suma ponderada de sus entradas y aplica una función de activación para producir una salida. Esta salida transformada se utiliza como entrada para las neuronas en la siguiente capa o como resultado final. Las funciones de activación determinan cómo se dispara una neurona y afectan directamente la capacidad de aprendizaje de la red.

Existen diferentes tipos de funciones de activación, y la elección de una u otra puede influir en el rendimiento y la eficacia del modelo. Algunas funciones ayudan a resolver problemas como el desvanecimiento o explosión del gradiente, que pueden ocurrir durante el entrenamiento de redes profundas. Además, ciertas funciones de activación son más adecuadas para tareas específicas, como clasificación o regresión.

En Keras, implementar funciones de activación es sencillo gracias al parámetro activation en las capas. Por ejemplo, al crear una capa densa, se puede especificar la función de activación que se desee:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

# Definir el modelo
modelo = keras.Sequential([
    layers.Dense(128, activation='relu', input_shape=(dim_entrada,)),
    layers.Dense(64, activation='relu'),
    layers.Dense(num_clases, activation='softmax')
])

En este ejemplo, se utilizan las funciones de activación ReLU en las capas ocultas y softmax en la capa de salida. Estas funciones permiten al modelo aprender patrones complejos en los datos y producir probabilidades en una tarea de clasificación multiclase.

Es importante destacar que no existe una función de activación universalmente óptima. La elección adecuada depende del contexto del problema, la arquitectura de la red y los datos disponibles. Por ello, comprender el papel y las características de las diferentes funciones de activación es crucial para diseñar modelos efectivos en Keras.

Funciones de activación comunes y: ReLU, Sigmoid, Tanh

Las funciones de activación ReLU, Sigmoid y Tanh son ampliamente utilizadas en el diseño de redes neuronales debido a sus propiedades y eficacia en distintos tipos de problemas.

La función ReLU (Rectified Linear Unit) se define como:

$$[ f(x) = \max(0, x) ]$$

Esta función convierte todos los valores negativos a cero y mantiene los positivos sin cambios. La ReLU es popular en capas ocultas porque introduce no linealidad sin saturar el gradiente, lo que facilita y acelera el entrenamiento de redes profundas. Además, su simplicidad reduce el coste computacional. En Keras, se implementa de la siguiente manera:

from tensorflow.keras import layers

capa_relu = layers.Dense(units=64, activation='relu')

La función Sigmoid transforma las entradas en valores entre 0 y 1 utilizando la fórmula:

$$[ f(x) = \frac{1}{1 + e^{-x}} ]$$

Es especialmente útil en la capa de salida para problemas de clasificación binaria, ya que permite interpretar la salida como una probabilidad. Sin embargo, en capas ocultas puede provocar el fenómeno de desvanecimiento del gradiente, dificultando el aprendizaje en redes profundas. Su uso en Keras es el siguiente:

from tensorflow.keras import layers

capa_sigmoid = layers.Dense(units=1, activation='sigmoid')

La función Tanh (Tangente Hiperbólica) extiende la Sigmoid mapeando las entradas al rango entre -1 y 1:

$$[ f(x) = \tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} ]$$

Al centrar las activaciones en torno a cero, la Tanh puede conducir a una convergencia más rápida que la Sigmoid en ciertas circunstancias. Es adecuada para capas ocultas donde se desea una salida tanto positiva como negativa. En Keras, se utiliza así:

from tensorflow.keras import layers

capa_tanh = layers.Dense(units=64, activation='tanh')

Estas funciones de activación permiten capturar relaciones complejas en los datos al introducir no linealidades en la red neuronal. La elección entre ReLU, Sigmoid y Tanh depende del problema específico y de la arquitectura de la red, siendo fundamental para el rendimiento del modelo.

Funciones de activación avanzadas: Leaky ReLU, ELU

Las funciones de activación avanzadas como Leaky ReLU y ELU abordan limitaciones presentes en funciones más simples como ReLU. Estas funciones mejoran el rendimiento del modelo en situaciones donde las neuronas pueden quedar inactivas debido a valores negativos en la entrada.

La Leaky ReLU (Rectified Linear Unit con fuga) es una variante de ReLU que introduce una pequeña pendiente para valores negativos en lugar de convertirlos a cero. Esta pendiente evita que las neuronas queden muertas al permitir que fluyan gradientes incluso cuando la entrada es negativa. La función se define matemáticamente como:

$$[
f(x) =
\begin{cases}
x, & \text{si } x \geq 0 \
\alpha x, & \text{si } x < 0
\end{cases}
]$$

Donde $(\alpha)$ es un pequeño valor constante, típicamente 0.01. 

En Keras, la Leaky ReLU se puede implementar utilizando la clase LeakyReLU del módulo tensorflow.keras.layers. A continuación se muestran dos formas funcionales de usar esta activación:

  • Como una capa separada en un modelo secuencial:
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential

# Definir un modelo con Leaky ReLU como capa separada
modelo = Sequential([
    layers.Dense(units=64, input_shape=(100,)),  
    layers.LeakyReLU(alpha=0.01),               
    layers.Dense(units=10, activation='softmax') 
])
  • Especificando la función de activación directamente en la capa Dense:

Aunque no se puede pasar LeakyReLU directamente como activación en Dense, se puede usar una función personalizada para lograrlo:

from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
from tensorflow.keras.activations import relu

# Definir un modelo con Leaky ReLU integrada como activación personalizada
modelo = Sequential([
    layers.Dense(units=64, activation=lambda x: relu(x, alpha=0.01), input_shape=(100,)),
    layers.Dense(units=10, activation='softmax')
])

La ELU (Exponential Linear Unit) es otra función de activación que, al igual que Leaky ReLU, trata de solucionar el problema de las neuronas muertas. La ELU utiliza una función exponencial para valores negativos, lo que permite una mejor gestión de los gradientes y puede conducir a una convergencia más rápida. Su definición es:

$$[
f(x) =
\begin{cases}
x, & \text{si } x \geq 0 \
\alpha (e^{x} - 1), & \text{si } x < 0
\end{cases}
]$$

Donde $(\alpha)$ es un parámetro positivo que controla la saturación para valores negativos. 

En Keras, la ELU se implementa fácilmente especificando la función de activación:

from tensorflow.keras import layers

# Capa con ELU como función de activación
capa_elu = layers.Dense(units=64, activation='elu')

También es posible ajustar el parámetro $(\alpha)$ si se requiere un control más fino:

capa_elu = layers.Dense(units=64, activation=layers.ELU(alpha=1.0))

Estas funciones avanzadas ayudan a la red a mantener un flujo de información más constante y a evitar problemas asociados con el desvanecimiento del gradiente. Al permitir que los valores negativos contribuyan al aprendizaje, Leaky ReLU y ELU mejoran la capacidad del modelo para capturar relaciones complejas en los datos.

Es importante considerar el impacto de la función de activación en el rendimiento general del modelo. Mientras que ReLU es adecuada en muchos casos, Leaky ReLU y ELU pueden ofrecer ventajas en términos de velocidad de convergencia y rendimiento, especialmente en redes profundas. La elección entre estas funciones debe basarse en experimentación y comprensión de las características específicas del problema.

¿Cuándo usar cada función de activación?

La elección de la función de activación adecuada es crucial para el rendimiento de una red neuronal, ya que influye en cómo se procesan y transmiten las señales a través de las capas. 

A continuación, se detallan las consideraciones para decidir cuándo utilizar cada función:

ReLU (Rectified Linear Unit) es la función más común en capas ocultas debido a su simplicidad y eficiencia computacional. Es especialmente útil en redes profundas porque mitiga el problema del desvanecimiento del gradiente, permitiendo que los modelos aprendan características complejas. Se recomienda utilizar ReLU cuando:

  • Se trabaja con datos que requieren extraer relaciones no lineales.
  • Se diseñan redes profundas que pueden beneficiarse de una convergencia más rápida.
  • Se busca reducir el coste computacional durante el entrenamiento.

Sigmoid es apropiada para la capa de salida en problemas de clasificación binaria, ya que mapea las salidas al rango (0, 1), interpretándose como probabilidades. Sin embargo, en capas ocultas puede causar saturación y desvanecimiento del gradiente. Es conveniente usar Sigmoid cuando:

  • El objetivo es predecir una clase binaria o calcular probabilidades.
  • Se necesita una salida suave y diferenciable en el rango entre 0 y 1.
  • El modelo es poco profundo y no se ve afectado significativamente por problemas de gradiente.

Tanh (Tangente Hiperbólica) es útil en capas ocultas cuando se requiere centrar las activaciones alrededor de cero, lo que puede facilitar la convergencia del modelo. Tanh es preferible a Sigmoid en capas ocultas porque su salida está centrada en cero, pero aún puede sufrir desvanecimiento del gradiente. Se debe considerar Tanh cuando:

  • Se desea que las activaciones sean tanto positivas como negativas.
  • Se busca mejorar la convergencia en comparación con Sigmoid.
  • Se trabaja con modelos recurrentes donde las salidas centradas en cero pueden ser beneficiosas.

Leaky ReLU es una alternativa a ReLU para evitar el problema de las neuronas muertas, donde unidades pueden quedar inactivas permanentemente. Introduce una pequeña pendiente para valores negativos, permitiendo que fluyan gradientes. Se sugiere utilizar Leaky ReLU cuando:

  • Se observa que muchas neuronas quedan inactivas con ReLU estándar.
  • Se entrena una red profunda y se desea mantener un flujo de gradientes más constante.
  • Se necesita mejorar el rendimiento sin incrementar significativamente la complejidad computacional.

ELU (Exponential Linear Unit) puede ofrecer una mejor convergencia que ReLU y Leaky ReLU al permitir activaciones negativas y reducir el sesgo hacia valores positivos. ELU puede ser beneficiosa cuando:

  • Se requiere una convergencia más rápida y estable durante el entrenamiento.
  • Se busca reducir la media de las activaciones cercanas a cero, lo que puede acelerar el aprendizaje.
  • Se trabaja con arquitecturas donde mantener pequeñas activaciones negativas mejora el rendimiento.

Al seleccionar la función de activación, es importante también considerar el tipo de problema:

  • Regresión: Para problemas de regresión con salidas continuas, es común no utilizar función de activación en la capa de salida o emplear activaciones lineales. Sin embargo, si las salidas están acotadas en un rango específico, puede ser apropiado usar Sigmoid o Tanh.
  • Clasificación multiclase: En problemas de clasificación con múltiples clases mutuamente excluyentes, se utiliza softmax en la capa de salida para obtener probabilidades que suman uno.

Además, es recomendable experimentar con diferentes funciones de activación y validar sus efectos mediante técnicas de validación cruzada. La arquitectura de la red, el conjunto de datos y el problema específico pueden influir en cuál función de activación funciona mejor.

En resumen, la clave es entender las propiedades de cada función y alinearlas con los requisitos del modelo y los datos. No existe una solución única, por lo que el ajuste fino y la experimentación son esenciales para alcanzar el mejor rendimiento.

Aprende TensorFlow GRATIS online

Todas las lecciones de TensorFlow

Accede a todas las lecciones de TensorFlow y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción Al Deep Learning Y Redes Neuronales

TensorFlow

Introducción Y Entorno

Introducción A Tensorflow

TensorFlow

Introducción Y Entorno

Introducción A Keras

TensorFlow

Introducción Y Entorno

Redes Neuronales De Múltiples Capas

TensorFlow

Introducción Y Entorno

Algoritmo De Backpropagation

TensorFlow

Introducción Y Entorno

Implementación De Una Red Neuronal Con Numpy

TensorFlow

Introducción Y Entorno

Modelo Con Api Secuencial

TensorFlow

Construcción De Modelos Con Keras

Modelo Con Api Funcional

TensorFlow

Construcción De Modelos Con Keras

Subclases De Modelos

TensorFlow

Construcción De Modelos Con Keras

Capas En Keras

TensorFlow

Construcción De Modelos Con Keras

Funciones De Activación

TensorFlow

Construcción De Modelos Con Keras

Redes Neuronales Densas De Regresión

TensorFlow

Construcción De Modelos Con Keras

Redes Neuronales Densas De Clasificación Binaria

TensorFlow

Construcción De Modelos Con Keras

Redes Neuronales Densas De Clasificación Multiclase

TensorFlow

Construcción De Modelos Con Keras

Redes Convolucionales Cnn

TensorFlow

Construcción De Modelos Con Keras

Redes Recurrentes Rnn

TensorFlow

Construcción De Modelos Con Keras

Redes Neuronales Mixtas

TensorFlow

Construcción De Modelos Con Keras

Api Dataset

TensorFlow

Procesamiento De Datos

Manejo De Valores Faltantes

TensorFlow

Procesamiento De Datos

Encoding De Valores Categóricos En Continuos

TensorFlow

Procesamiento De Datos

Preprocesados De Escalado, Normalización Y Estandarización

TensorFlow

Procesamiento De Datos

Generación De Nuevas Características

TensorFlow

Procesamiento De Datos

Algoritmos De Optimización

TensorFlow

Entrenamiento Y Evaluación De Modelos

Técnicas De Validación

TensorFlow

Entrenamiento Y Evaluación De Modelos

Monitorización De Entrenamiento

TensorFlow

Entrenamiento Y Evaluación De Modelos

Redes Generativas Adversariales Gans

TensorFlow

Técnicas Avanzadas

Transformers

TensorFlow

Técnicas Avanzadas

Autoencoders

TensorFlow

Técnicas Avanzadas

Carga De Capas Ya Hechas

TensorFlow

Técnicas Avanzadas

Regularización De Modelos

TensorFlow

Herramientas Y Optimización

Hiperparámetros Con Keras Tuner

TensorFlow

Herramientas Y Optimización

Tensorboard

TensorFlow

Herramientas Y Optimización

Uso De Tensorflow Keras En Gpu

TensorFlow

Herramientas Y Optimización

Accede GRATIS a TensorFlow y certifícate

Objetivos de aprendizaje de esta lección

  • Comprender el papel de las funciones de activación en redes neuronales.
  • Identificar las características y aplicaciones de ReLU, Sigmoid y Tanh.
  • Aprender a implementar funciones avanzadas como Leaky ReLU y ELU.
  • Seleccionar funciones de activación según el problema y arquitectura.
  • Aplicar activaciones específicas en tareas como clasificación o regresión.