Dos funciones clásicas: probabilidades vs centrado en cero
La comparación entre Sigmoid y Tanh es clave para entender los orígenes del deep learning y los problemas que llevaron al uso de funciones modernas como ReLU.
👉 Ambas son funciones suaves y no lineales, pero difieren en su rango de salida y comportamiento del gradiente.
Definición corta
- Sigmoid: comprime valores entre 0 y 1
- Tanh: comprime valores entre -1 y 1
Definición matemática
🔹 Sigmoid
🔹 Tanh
👉 Ambas son funciones sigmoides (en forma de “S”).
🧠 Intuición
- Sigmoid: convierte valores en probabilidades
- Tanh: normaliza valores alrededor de cero
Sigmoid → [0, 1]
Tanh → [-1, 1]
Comparación visual conceptual
Sigmoid:
____
/
--/
Tanh:
/
---/---
/
🔄 Diferencia clave
| Propiedad | Sigmoid | Tanh |
|---|---|---|
| Rango | [0, 1] | [-1, 1] |
| Centrado en cero | ❌ | ✅ |
| Gradiente máximo | menor | mayor |
| Saturación | alta | alta |
| Uso típico | salida | capas ocultas (histórico) |
Problema compartido: saturación
Para valores grandes:
👉 ambas funciones se “aplanan”.
Ejemplo conceptual
Entrada grande
↓
Salida casi constante
↓
Gradiente ≈ 0
Impacto en gradiente
🔹 Sigmoid
👉 gradiente máximo ≈ 0.25
🔹 Tanh
👉 gradiente máximo = 1
Interpretación
Tanh → gradiente más fuerte
Sigmoid → gradiente más débil
Ventaja de Tanh
Al estar centrada en cero:
👉 facilita el aprendizaje
📊 Ejemplo conceptual
Media ≈ 0
↓
Mejor propagación
↓
Entrenamiento más estable
Desventaja clave (ambas)
- saturación
- desvanecimiento del gradiente
👉 problema crítico en redes profundas.
Cuándo usar cada una
Usa Sigmoid cuando:
- necesitas probabilidades
- clasificación binaria
- capa de salida
Usa Tanh cuando:
- quieres activación centrada
- redes pequeñas o clásicas
- RNNs tradicionales
Ejemplo en Python
import numpy as npdef sigmoid(x): return 1 / (1 + np.exp(-x))def tanh(x): return np.tanh(x)x = np.array([-2, -1, 0, 1, 2])print("Sigmoid:", sigmoid(x))print("Tanh:", tanh(x))
Ejemplo en PyTorch
import torchimport torch.nn as nnsigmoid = nn.Sigmoid()tanh = nn.Tanh()x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])print("Sigmoid:", sigmoid(x))print("Tanh:", tanh(x))
Ejemplo en red neuronal
model = nn.Sequential( nn.Linear(10, 20), nn.Tanh(), nn.Linear(20, 1), nn.Sigmoid())
Qué muestra este ejemplo
- Tanh en capas ocultas
- Sigmoid en salida
- flujo clásico de redes
Errores comunes
Usar sigmoid en capas profundas
Provoca gradientes débiles.
Ignorar saturación
Limita el aprendizaje.
Pensar que Tanh soluciona todo
También satura.
Ejemplo conceptual en ML
Entrada
↓
Activación
↓
Saturación
↓
Gradiente pequeño
Interpretación profunda
Esta comparación refleja una transición histórica:
- Sigmoid → probabilidades
- Tanh → mejor flujo
- ReLU → solución moderna
👉 Es la evolución del diseño de redes neuronales.
Conclusión
- Sigmoid es ideal para salidas probabilísticas
- Tanh mejora el flujo de gradiente al estar centrada en cero
👉 Sin embargo, ambas sufren saturación, lo que llevó al uso de ReLU y variantes modernas.
Related Concepts
- Función de activación
- ReLU
- Desvanecimiento del gradiente
- Backpropagation
- Optimización