Tanh (Hyperbolic Tangent)
Tanh asigna las entradas a valores entre −1 y 1 mediante una curva en S centrada en cero. Abarca su fórmula, gradiente y uso en RNN, GAN y sistemas de control, además de código de PyTorch.
La tangente hiperbólica, tanh(x) = (eˣ − e^(−x)) / (eˣ + e^(−x)), es una función de activación que asigna cualquier número real a un valor entre −1 y 1 siguiendo una curva en forma de S centrada en cero. Es una sigmoide reescalada, tanh(x) = 2σ(2x) − 1, así que comparte la forma de la sigmoide, pero devuelve valores negativos para las entradas negativas y tiene una pendiente de 1 en el origen. Tanh fue la función de activación estándar de las capas ocultas de las redes neuronales durante las décadas de 1990 y 2000. Hoy da forma al estado oculto de las redes neuronales recurrentes (RNNs), limita las salidas de los generadores de imágenes y las políticas de control, y mantiene los valores dentro de un rango en modelos más grandes.
Fórmula y propiedades#
Tanh es una función impar, tanh(−x) = −tanh(x), con tanh(0) = 0. Cerca de cero es casi lineal, tanh(x) ≈ x, y a partir de aproximadamente ±3 se aplana hacia ±1. Su derivada, 1 − tanh²(x), vale 1 en el origen, cuatro veces el máximo de 0,25 de la sigmoide, y se aproxima a cero a medida que la curva se satura. El fragmento de PyTorch de abajo calcula tanh y su gradiente, y después compara las salidas medias de tanh y la sigmoide con entradas de media cero:
import torch
x = torch.tensor([-3.0, -1.0, 0.0, 1.0, 3.0], requires_grad=True)
y = torch.tanh(x)
# The derivative of tanh is 1 - tanh(x)^2, which peaks at 1 when x = 0
y.sum().backward()
print(f"Tanh: {[round(v, 3) for v in y.tolist()]}")
print(f"Gradient: {[round(v, 3) for v in x.grad.tolist()]}")
# For zero-mean inputs, tanh outputs average near 0 and sigmoid outputs near 0.5
torch.manual_seed(0)
z = torch.randn(100_000)
print(f"Mean output, tanh: {torch.tanh(z).mean():.3f}, sigmoid: {torch.sigmoid(z).mean():.3f}")Imprime los valores de tanh de [-0.995, -0.762, 0.0, 0.762, 0.995] y los gradientes de [0.01, 0.42, 1.0, 0.42, 0.01], por lo que el gradiente en ±3 es una centésima parte de su valor en cero. Para 100 000 entradas normales estándar, las salidas de tanh tienen una media de aproximadamente 0,0 y las de la sigmoide, de aproximadamente 0,5.
Por qué ayudan las salidas centradas en cero#
Los gradientes de los pesos de una neurona son proporcionales a sus entradas. Cuando todas las entradas son positivas, como ocurre siempre con las salidas de la sigmoide, todos los gradientes de los pesos de una neurona tienen el mismo signo en cada actualización, de modo que sus pesos solo pueden aumentar juntos o disminuir juntos, y alcanzan el óptimo zigzagueando. Las salidas de tanh son positivas y negativas en proporciones aproximadamente iguales, lo que permite que cada peso se ajuste de forma independiente y mantiene las entradas de la siguiente capa cerca de una media cero, donde el descenso del gradiente converge más rápido. Por este motivo, la guía «Efficient BackProp» de Yann LeCun y sus colaboradores, publicada en 1998, recomendaba funciones simétricas en lugar de la sigmoide logística para las capas ocultas, concretamente la forma escalada 1.7159 · tanh(2x/3). Tanh sigue saturándose y apilar muchas capas tanh reduce los gradientes durante la retropropagación, lo que causa el problema del desvanecimiento del gradiente.
Dónde se usa tanh#
- Redes recurrentes: Una RNN simple actualiza su estado así: hₜ = tanh(Wxₜ + Uhₜ₋₁ + b), y tanh es la no linealidad predeterminada de
nn.RNNde PyTorch. En las celdas LSTM y GRU, tanh genera el contenido candidato y, en la LSTM, comprime el estado de la celda antes de la salida, mientras que las puertas sigmoides deciden qué parte utilizar. El rango acotado evita que un estado que se realimenta paso a paso crezca sin límite. - Generadores GAN: DCGAN termina su generador con tanh para que los píxeles generados estén entre −1 y 1, el rango al que se escalan las imágenes de entrenamiento; muchos modelos generativos antagónicos (GANs) posteriores siguen esta elección.
- Acciones acotadas: Las políticas de control continuo en aprendizaje por refuerzo aplican tanh a sus salidas para mantener cada orden dentro de los límites de los actuadores. Soft Actor-Critic comprime de este modo las muestras de una política gaussiana.
- Recorte suave de logits: Los modelos de lenguaje Gemma 2 de Google calculan cap · tanh(logits / cap), con un límite de 50 para los logits de atención y de 30 para los logits finales. Los logits pequeños apenas cambian y los grandes nunca pueden superar el límite.
- Aproximación de GELU: 0.5x(1 + tanh(√(2/π)(x + 0.044715x³))) aproxima GELU con gran precisión, y el código original de GPT-2 y BERT calcula GELU de este modo.
- Flujos normalizantes: Los flujos del estilo RealNVP suelen terminar cada red de escalado con tanh, de modo que cada capa de acoplamiento escala sus entradas por un factor entre e⁻¹ y e, lo que mantiene la estabilidad numérica del entrenamiento. Los modelos de estimación de pose de YOLO26 se entrenan con una pérdida de estimación residual de la log-verosimilitud; su flujo RealNVP de seis capas, que termina cada red de escalado con tanh, modela la distancia entre los puntos clave predichos y la verdad de referencia.
Tanh frente a funciones relacionadas#
- Sigmoide: Tanh es una sigmoide ampliada al rango de −1 a 1 y comprimida horizontalmente por un factor de dos, lo que aumenta la pendiente máxima de 0,25 a 1. El rango de 0 a 1 de la sigmoide la convierte en la función preferida para probabilidades y puertas.
- Hardtanh: Una versión lineal a trozos que recorta las entradas al intervalo [−1, 1]. Su cálculo es más barato y su gradiente es exactamente 0 fuera de ese intervalo.
- ReLU: max(0, x) nunca se satura con entradas positivas y solo requiere una comparación, por lo que ReLU y sus sucesoras suaves, como SiLU, sustituyeron a tanh en las capas ocultas de las redes neuronales convolucionales (CNNs) profundas y los transformers. En el artículo de AlexNet, una CNN de cuatro capas con ReLU alcanzó un error de entrenamiento del 25 % en CIFAR-10 seis veces más rápido que la misma red con unidades tanh.










