Curso
Las funciones de activación deciden qué señales pasan a través de una red neuronal y cuáles no. Si eliges la equivocada, tu modelo aprende demasiado lento o no generaliza. Durante años, ReLU fue la opción por defecto porque era rápida y suficiente para la mayoría de tareas.
GELU (Gaussian Error Linear Unit) cambió ese panorama. Ahora es la función de activación detrás de algunos de los modelos más potentes jamás creados, como BERT y GPT.
En este artículo verás la intuición detrás de GELU, su fórmula, cómo se compara con otras funciones de activación y dónde conviene usarla en la práctica.
Si eres completamente nuevo en funciones de activación en machine learning, lee nuestro guía para principiantes de la unidad lineal rectificada (ReLU).
¿Qué es la función de activación GELU?
GELU, o Gaussian Error Linear Unit, es una función de activación que pondera las entradas según su magnitud con un enfoque suave y probabilístico.
La mayoría de funciones de activación deciden pasar o bloquear la señal. ReLU, por ejemplo, anula todo lo negativo y deja pasar el resto sin cambios. GELU funciona de otra manera. En lugar de un corte brusco, escala las entradas de forma suave según cuán grandes o pequeñas sean, lo que significa que incluso valores negativos pequeños pueden contribuir a la salida.
La diferencia respecto a ReLU es que GELU es suave y continua en todo su dominio. No hay un ángulo marcado en cero ni transiciones abruptas. Esa suavidad importa durante el entrenamiento porque ofrece al optimizador gradientes más limpios con los que trabajar.
Intuición detrás de GELU
Piensa en GELU como un filtro que no trata todas las entradas por igual.
ReLU es tajante: todo lo negativo se convierte en cero, siempre. GELU, en cambio, se pregunta «¿qué probabilidad hay de que este valor de entrada sea útil?». Los valores claramente grandes y positivos pasan casi sin cambios. Los valores pequeños o negativos se reducen, no se eliminan por completo.
El resultado es una curva suave que atenúa las señales menos relevantes sin descartarlas del todo.
Imagina que revisas un montón de candidaturas. Un filtro estricto eliminaría a cualquiera sin título universitario, sin excepción. Un filtro más inteligente aún consideraría a quienes se acercan, porque quizá tengan experiencia relevante que compense. GELU funciona como ese filtro más inteligente. No hace cortes drásticos; pondera cada entrada según su magnitud y decide cuánto dejar pasar.
Esta escala gradual y probabilística es lo que hace diferente a GELU. No hay transiciones bruscas ni neuronas muertas: solo una decisión suave de pasar o atenuar para cada valor de entrada.
Fórmula de GELU
La fórmula exacta de GELU se basa en la función de distribución acumulada (CDF) gaussiana, y se escribe así:

Función de distribución acumulada gaussiana
donde x es el valor de entrada y Φ(x) es la probabilidad de que una variable aleatoria de una normal estándar sea menor o igual que x. En pocas palabras, Φ(x) te indica cuán «normal» o esperable es el valor de entrada, y esa probabilidad es la que GELU usa para escalar la entrada.
Cuanto mayor es la entrada, más se acerca Φ(x) a 1, lo que implica que la señal pasa casi sin cambios. Cuanto menor es la entrada, más se acerca Φ(x) a 0, de modo que la señal se atenúa.
La aproximación usada en la práctica
El problema de la fórmula exacta es que calcular Φ(x) es costoso. Implica la función error, que no tiene forma cerrada simple y es lenta a gran escala.
Los frameworks de deep learning usan esta aproximación:

Fórmula aproximada de GELU
Esta aproximación usa tanh, que es rápida y está muy optimizada en hardware moderno. El resultado es prácticamente idéntico a la fórmula exacta en el rango de entradas que importa en la práctica, por lo que frameworks como PyTorch y TensorFlow la emplean por defecto.
Por supuesto, no necesitas memorizar ninguna de las dos. Pero saber que existe la aproximación —y por qué— te ayuda a entender qué ocurre realmente cuando llamas a GELU en tu código.
GELU frente a otras funciones de activación
Cada función de activación maneja las entradas de forma distinta, y esas diferencias se reflejan en cómo aprende tu modelo.
Así se ve la diferencia de forma visual antes de explicarla con texto:

Gráfico de GELU frente a otras funciones de activación
Sigmoid
Sigmoid comprime todas las entradas al rango 0–1. Es suave, pero tiene un problema conocido: los gradientes que se desvanecen. Para entradas muy grandes o muy pequeñas, el gradiente tiende a cero, por lo que las capas profundas dejan de aprender. GELU evita este problema porque mantiene gradientes útiles en un rango de entrada más amplio.
Tanh
Tanh es similar a Sigmoid pero centrada en cero, con salidas entre -1 y 1. Maneja mejor las entradas negativas que Sigmoid, pero sigue sufriendo desvanecimiento de gradientes en los extremos. GELU produce una curva de salida más suave y con mejor flujo de gradiente en redes profundas.
ReLU
ReLU es rápida y simple: las entradas positivas pasan sin cambios; las negativas se anulan. El corte brusco en cero provoca el problema de las neuronas moribundas: neuronas que, al recibir valores negativos de forma sostenida, dejan de actualizarse. GELU lo evita escalando las entradas negativas en lugar de recortarlas.
Leaky ReLU
Leaky ReLU soluciona las neuronas moribundas permitiendo que una pequeña fracción de entradas negativas pase. Es un paso adelante respecto a ReLU, pero la transición en cero sigue siendo brusca. GELU produce una curva más suave en general, lo que suele funcionar mejor en arquitecturas profundas donde la calidad del gradiente es clave.
En resumen, estas son las diferencias entre estas cinco funciones de activación:

Tabla de GELU frente a otras funciones de activación
Por qué se usa GELU en transformers
Un transformer no deja de ser una red neuronal profunda. Y cuanto más profunda es la red, más importa la calidad del gradiente.
Modelos como BERT y GPT apilan decenas de capas. A esa profundidad, los pequeños problemas de flujo de gradiente se agravan. Si tu función de activación produce gradientes inestables o casi nulos en ciertas regiones, las capas iniciales apenas se actualizan durante el entrenamiento y, por tanto, aprenden poco.
GELU lo evita manteniendo gradientes suaves y no nulos en un rango de entradas más amplio. No hay un corte como el cero de ReLU, así que el optimizador recibe una señal más limpia en cada capa, no solo cerca de la salida.
Hay otra razón por la que GELU encaja bien en arquitecturas transformer.
Los transformers procesan entradas mediante mecanismos de atención que generan un rango amplio de activaciones, tanto positivas como negativas. Una activación suave maneja mejor ese rango que otra con transiciones bruscas.
Cuando se publicó el artículo original de BERT, los autores eligieron GELU frente a ReLU y reportaron mejores resultados en sus benchmarks. GPT siguió el mismo camino. Desde entonces, GELU se ha convertido en la activación por defecto en la mayoría de arquitecturas basadas en transformers, no porque sea nueva, sino porque funciona mejor a la escala a la que operan estos modelos.
GELU en la práctica
Usar GELU en tus modelos es tan fácil como cualquier otra función de activación. Tanto PyTorch como TensorFlow la incluyen de serie.
PyTorch
En PyTorch, puedes aplicar GELU como un módulo independiente o en línea dentro de la definición del modelo. Aquí tienes un bloque feedforward sencillo que usa GELU:
import torch
import torch.nn as nn
class FeedForwardBlock(nn.Module):
def __init__(self, input_dim, hidden_dim):
super().__init__()
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.act = nn.GELU()
self.fc2 = nn.Linear(hidden_dim, input_dim)
def forward(self, x):
return self.fc2(self.act(self.fc1(x)))
block = FeedForwardBlock(input_dim=512, hidden_dim=2048)
x = torch.randn(8, 512)
output = block(x)
nn.GELU() va entre las dos capas lineales, exactamente donde la verás en la subcapa feedforward de un transformer. La activación se ejecuta tras la primera proyección y antes de la segunda.
TensorFlow
En TensorFlow, GELU está disponible a través de la API de Keras:
import tensorflow as tf
from tensorflow import keras
model = keras.Sequential([
keras.layers.Dense(2048, input_shape=(512,)),
keras.layers.Activation("gelu"),
keras.layers.Dense(512)
])
x = tf.random.normal((8, 512))
output = model(x)
También puedes pasarla directamente como cadena al argumento activation de una capa Dense:
keras.layers.Dense(2048, activation="gelu")
Ambos enfoques producen el mismo resultado.
Dónde encaja GELU en una red
GELU va en el mismo lugar que cualquier otra activación: justo después de una transformación lineal y antes de la siguiente capa. En transformers, eso significa dentro de la subcapa feedforward, entre las dos proyecciones densas. En otras redes profundas, colócala tras tu capa lineal o convolucional para escalar la salida antes de pasarla adelante.
Ventajas de GELU
Si has llegado hasta aquí, ya conoces los principales puntos fuertes de GELU frente a otras activaciones. Aquí va un breve repaso:
- Activación suave: GELU produce una curva continua y diferenciable sin transiciones bruscas, lo que ofrece al optimizador información más limpia en cada paso.
- Mejor flujo de gradiente: GELU no anula las entradas negativas, así que los gradientes pueden propagarse incluso por neuronas que reciben valores negativos. Esto reduce el riesgo de neuronas muertas durante el entrenamiento.
- Mejor rendimiento en modelos profundos: En arquitecturas profundas como los transformers, el efecto acumulado de gradientes más suaves suele traducirse en mejores resultados de entrenamiento frente a activaciones más simples.
Limitaciones de GELU
GELU no es la opción adecuada para todos los casos. Ten en cuenta estas limitaciones:
-
Más costosa de calcular que ReLU: GELU implica la función error o una aproximación basada en
tanh, ambas más caras que el umbral sencillo de ReLU. En modelos grandes con muchas capas, esto puede acumularse. -
Menos intuitiva: Funciones como ReLU son fáciles de razonar: los valores positivos pasan, los negativos no. El escalado probabilístico de GELU es más difícil de interpretar.
-
No siempre necesaria: En redes poco profundas o tareas simples, GELU no aporta ventajas significativas. ReLU o Leaky ReLU suelen rendir igual de bien con menor coste computacional.
En conclusión, si vas a construir un transformer u otra arquitectura profunda, GELU es una gran opción por defecto. Para el resto, haz pruebas comparativas antes de decidirte.
Conclusión
GELU no es una mejora universal ni una solución única que sustituya a ReLU. Es una decisión de diseño deliberada que merece la pena en contextos concretos: piensa en redes profundas y modelos tipo transformer.
Si trabajas con BERT, GPT o cualquier modelo basado en transformers, ya estás usando GELU, lo supieras o no. Ahora ya sabes por qué está ahí.
Para todo lo demás, la elección de la activación va de compensaciones. Ninguna función gana siempre; entender qué hace cada una te permite decidir con confianza y no por costumbre.
Si aún te lías con las diferencias entre funciones de activación, apúntate a nuestro Machine Learning Engineer Track y prepárate para tu carrera en machine learning y MLOps.
Conviértete en un Científico ML
Preguntas frecuentes
¿Qué es la función de activación GELU?
GELU, o Gaussian Error Linear Unit, es una función de activación usada en redes neuronales. A diferencia de ReLU, GELU escala las entradas de forma suave según su magnitud con un enfoque probabilístico. Esto la hace especialmente adecuada para arquitecturas profundas donde la calidad del gradiente importa.
¿En qué se diferencia GELU de ReLU?
ReLU anula todas las entradas negativas con un corte en cero, lo que puede hacer que las neuronas dejen de aprender (neuronas moribundas). GELU lo evita reduciendo gradualmente las entradas negativas en lugar de cortarlas. Obtendrás un flujo de gradiente más suave y mejor rendimiento en redes profundas.
¿Cuándo debería usar GELU en lugar de otras funciones de activación?
GELU funciona mejor en arquitecturas profundas, especialmente en modelos basados en transformers como BERT y GPT. En redes poco profundas o tareas más simples, el sobrecoste computacional rara vez compensa el cambio desde ReLU. Empieza con ReLU como referencia y siempre puedes probar otras opciones.
¿Cuál es la diferencia entre la fórmula exacta de GELU y su aproximación?
La fórmula exacta de GELU usa la función de distribución acumulada gaussiana, que requiere calcular la función error: una operación lenta a gran escala. La aproximación la sustituye por una expresión basada en tanh, más rápida y muy bien soportada en hardware moderno. En la práctica, ambas dan resultados casi idénticos, por eso la mayoría de frameworks usan la aproximación por defecto.
¿GELU funciona tanto en PyTorch como en TensorFlow?
Sí, ambos frameworks admiten GELU. En PyTorch, puedes usar nn.GELU() como módulo dentro de tu modelo. En TensorFlow, puedes pasar "gelu" como cadena al argumento activation de cualquier capa o usar keras.layers.Activation("gelu").


