ReLU vs Tanh

Eficiencia moderna vs activación centrada en cero

La comparación entre ReLU y Tanh muestra una transición clave en deep learning: de funciones suaves pero saturadas a funciones simples y eficientes.

👉 Es una de las diferencias más importantes entre redes clásicas y modernas.

Definición corta

  • ReLU: activa valores positivos y anula negativos
  • Tanh: transforma valores al rango [1,1][-1, 1][−1,1]

Definición matemática

🔹 ReLU

f(x)=max(0,x)f(x) = \max(0, x)

🔹 Tanh

tanh(x)=exexex+ex\tanh(x) = \frac{e^x – e^{-x}}{e^x + e^{-x}}

Intuición

  • ReLU: “solo dejo pasar lo positivo”
  • Tanh: “normalizo alrededor de cero”

ReLU → corte Tanh → suavizado centrado

📊 Comparación visual conceptual

ReLU: /----/Tanh: /---/--- /

Diferencia clave

PropiedadReLUTanh
Rango[0, ∞)[-1, 1]
Suavidadno
Centrado en cero
Saturaciónno (positivos)
Gradienteconstantevariable

Flujo de gradiente

🔹 ReLU

  • gradiente = 1 (positivos)
  • estable

🔹 Tanh

  • gradiente → 0 en extremos

👉 causa desvanecimiento.

Ejemplo conceptual

Tanh → gradiente se pierde ReLU → gradiente se mantiene

Saturación

🔹 Tanh

  • se aplana en extremos
  • aprendizaje lento

🔹 ReLU

  • no satura en positivos

👉 ventaja clave de ReLU.


📊 Ejemplo conceptual

Entrada grande ↓ Tanh → salida plana ReLU → sigue creciendo

Ventajas de Tanh

  • centrada en cero
  • mejor que Sigmoid
  • útil en redes pequeñas

Ventajas de ReLU

  • eficiente
  • evita saturación positiva
  • permite redes profundas

Desventajas

Tanh

  • saturación
  • gradiente débil

ReLU

  • neuronas muertas
  • no centrada

Cuándo usar cada una

Usa Tanh cuando:

  • redes pequeñas
  • necesitas salida centrada
  • RNNs tradicionales

Usa ReLU cuando:

  • redes profundas
  • modelos modernos
  • eficiencia es clave

Ejemplo en Python

import numpy as np
def relu(x):
return np.maximum(0, x)
def tanh(x):
return np.tanh(x)
x = np.array([-2, -1, 0, 1, 2])
print("ReLU:", relu(x))
print("Tanh:", tanh(x))

Ejemplo en PyTorch

import torch
import torch.nn as nn
relu = nn.ReLU()
tanh = nn.Tanh()
x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
print("ReLU:", relu(x))
print("Tanh:", tanh(x))

Ejemplo en modelo

model_relu = nn.Sequential(
nn.Linear(10, 20),
nn.ReLU()
)
model_tanh = nn.Sequential(
nn.Linear(10, 20),
nn.Tanh()
)

🧠 Qué muestra este ejemplo

  • diferencia en comportamiento
  • impacto en gradiente
  • uso práctico

Errores comunes

Usar Tanh en redes profundas

Provoca gradientes débiles.


Pensar que ReLU siempre es mejor

Depende del problema.

Ignorar centrado en cero

Puede afectar aprendizaje.

Ejemplo conceptual en ML

Activación ↓ Gradiente ↓ Aprendizaje

Interpretación profunda

Esta comparación refleja la evolución del deep learning:

  • Tanh → suavidad y teoría
  • ReLU → eficiencia y escalabilidad

👉 El cambio a ReLU permitió entrenar redes profundas de forma efectiva.

Conclusión

  • Tanh ofrece suavidad y centrado en cero, pero sufre saturación
  • ReLU es más eficiente y dominante en redes modernas

👉 La elección depende de profundidad, eficiencia y estabilidad requerida.

Related Concepts