1. Introducción
Las funciones de activación son la fuente de no-linealidad en las redes neuronales. Sin ellas, una red de cualquier profundidad sería equivalente a una sola transformación lineal — incapaz de aprender patrones complejos como bordes en imágenes, sentimiento en texto, o estructura en datos.
Esta simulación muestra 8 funciones de activación procesando simultáneamente la misma señal de entrada. Cada función tiene su propia celda tipo osciloscopio, donde puedes observar en tiempo real cómo transforma la señal, dónde satura, dónde corta, y cómo se comporta su derivada. Cambiando la amplitud de la entrada, puedes provocar saturación masiva en Sigmoid y Tanh mientras ReLU y GELU continúan operando.
La metáfora de la “orquesta” es literal: cada función produce un sonido diferente, y el conjunto forma un paisaje sonoro que cambia con la señal de entrada.
2. Conceptos Fundamentales
2.1 ¿Por qué necesitamos no-linealidad?
Sin funciones de activación, una red de L capas computa:
f(\mathbf{x}) = W_L \cdot W_{L-1} \cdots W_1 \cdot \mathbf{x} = W_{\text{total}} \cdot \mathbf{x}
El producto de matrices lineales es otra matriz lineal. No importa cuántas capas apiles: la red solo puede representar transformaciones lineales. Las funciones de activación \sigma rompen esta limitación:
f(\mathbf{x}) = \sigma(W_L \cdot \sigma(W_{L-1} \cdots \sigma(W_1 \cdot \mathbf{x})))
2.2 Propiedades deseables
Una buena función de activación debería:
- Ser no lineal (de lo contrario no aporta nada)
- Tener derivada no nula en un rango amplio (para que los gradientes fluyan)
- Ser computacionalmente eficiente (se evalúa millones de veces)
- Producir salidas centradas en cero o cercanas (facilita la optimización)
2.3 La derivada importa
En backpropagation, el gradiente que fluye a través de una neurona se multiplica por \sigma'(z). Si la derivada es:
- Siempre < 1: los gradientes se desvanecen exponencialmente (vanishing)
- Exactamente 0: la neurona no recibe señal de error (zona muerta)
- Siempre 1: los gradientes fluyen perfectamente (ideal)
3. La Interfaz
3.1 Estructura general
| Área | Ubicación | Función |
|---|---|---|
| Banda de entrada | Parte superior del canvas | Señal de entrada como osciloscopio horizontal |
| Cuadrícula 4×2 | Área principal del canvas | 8 celdas, una por función de activación |
| Tooltip | Sobre celda hovereada | Salida, derivada, estado de saturación |
| Panel de controles | Derecha (360px) | Señal, visualización, audio, leyenda |
3.2 La banda de entrada
Una tira horizontal dorada muestra la señal de entrada actual (seno, cuadrada, etc.) en formato osciloscopio: el tiempo fluye de izquierda a derecha, con un marcador en el valor actual.
3.3 Las 8 celdas
Cada celda muestra:
- Línea sólida (color de la función): salida \sigma(x(t)) a lo largo del tiempo
- Línea punteada (si está activada): derivada \sigma'(x(t))
- Relleno bajo curva (si está activado): área sombreada entre la curva y el eje
- Nombre de la función: esquina superior izquierda
- Resaltado al hover: borde iluminado en la celda activa
3.4 Código de colores
| Función | Color |
|---|---|
| Sigmoid | Rojo (#ef4444) |
| Tanh | Azul (#3b82f6) |
| ReLU | Verde (#22c55e) |
| Leaky ReLU | Ámbar (#f59e0b) |
| ELU | Violeta (#a855f7) |
| Swish | Cyan (#06b6d4) |
| GELU | Rosa (#ec4899) |
| Mish | Lima (#84cc16) |
4. Controles Interactivos
4.1 Señal de entrada
| Tipo | Forma | Uso didáctico |
|---|---|---|
| Seno | Onda sinusoidal suave | Caso base: transición gradual entre regiones |
| Cuadrada | Saltos entre +A y -A | Testea respuesta a transiciones abruptas |
| Triángulo | Rampa lineal simétrica | Entrada linealmente creciente y decreciente |
| Rampa (sawtooth) | Rampa ascendente con reset | Muestra comportamiento asimétrico |
| Ruido | Valores aleatorios | Simula entradas ruidosas realistas |
| Chirp | Seno con frecuencia creciente | Muestra comportamiento a diferentes velocidades |
Presets de amplitud: - Explosión (A = 10): satura las funciones acotadas - Suave (A = 0.5): todas las funciones se comportan casi linealmente - Normal (A = 2): rango típico de pre-activaciones
4.2 Parámetros
| Control | Rango | Default | Efecto |
|---|---|---|---|
| Frecuencia | 0.1 – 5.0 Hz | 1.0 | Velocidad de oscilación de la entrada |
| Amplitud | 0.1 – 10.0 | 2.0 | Rango de la señal; amplitudes altas causan saturación |
| Velocidad | 0.1 – 5.0x | 1.0 | Escala temporal de la simulación |
4.3 Opciones de visualización
| Opción | Descripción |
|---|---|
| Mostrar derivadas | Superpone la derivada \sigma'(x) como línea punteada |
| Mostrar curva estática | Muestra \sigma(x) como función estática (no temporal) |
| Relleno bajo curva | Sombrea el área entre la curva y el eje horizontal |
4.4 Hover sobre celdas
Al pasar el mouse sobre una celda, el tooltip muestra: - Valor de salida actual - Valor de la derivada actual - Estado: “Activo” o “Saturado” (derivada < 0.05 cuando |x| > 1) - Descripción breve de la función
5. Las Matemáticas
5.1 Sigmoid
\sigma(x) = \frac{1}{1 + e^{-x}}, \quad \sigma'(x) = \sigma(x)(1 - \sigma(x))
- Rango: (0, 1)
- Derivada máxima: 0.25 en x = 0
- Problema: satura para |x| > 4, causando vanishing gradients
- Uso: capa de salida en clasificación binaria, gates en LSTM
5.2 Tanh
\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}, \quad \tanh'(x) = 1 - \tanh^2(x)
- Rango: (-1, 1)
- Derivada máxima: 1 en x = 0
- Ventaja sobre sigmoid: centrada en cero, derivada más alta
- Problema: aún satura para |x| > 3
- Uso: celdas LSTM, redes recurrentes clásicas
5.3 ReLU (Rectified Linear Unit)
\text{ReLU}(x) = \max(0, x), \quad \text{ReLU}'(x) = \begin{cases} 1 & x > 0 \\ 0 & x \leq 0 \end{cases}
- Rango: [0, \infty)
- Derivada: constante 1 o 0
- Ventaja: no satura para x > 0, computacionalmente trivial
- Problema: “neuronas muertas” — si una neurona entra en x < 0 permanentemente, deja de aprender
- Uso: estándar en redes convolucionales y feed-forward
5.4 Leaky ReLU
\text{LeakyReLU}(x) = \begin{cases} x & x > 0 \\ 0.01x & x \leq 0 \end{cases}
- Rango: (-\infty, \infty)
- Derivada: 1 o 0.01 (nunca exactamente 0)
- Ventaja: elimina el problema de neuronas muertas
- Uso: alternativa robusta a ReLU
5.5 ELU (Exponential Linear Unit)
\text{ELU}(x) = \begin{cases} x & x > 0 \\ \alpha(e^x - 1) & x \leq 0 \end{cases}, \quad \alpha = 1
\text{ELU}'(x) = \begin{cases} 1 & x > 0 \\ \alpha e^x & x \leq 0 \end{cases}
- Rango: (-\alpha, \infty)
- Ventaja: suave en x = 0, salidas con media cercana a cero
- Uso: redes donde se busca convergencia más rápida
5.6 Swish
\text{Swish}(x) = x \cdot \sigma(x)
\text{Swish}'(x) = \sigma(x) + x \cdot \sigma(x)(1 - \sigma(x))
- Rango: \approx (-0.28, \infty)
- Propiedad: suave, no monótona (tiene un mínimo negativo cerca de x \approx -1.28)
- Ventaja: auto-gated — la sigmoid actúa como compuerta que deja pasar más o menos señal
- Uso: redes de búsqueda de arquitectura (NAS), EfficientNet
5.7 GELU (Gaussian Error Linear Unit)
\text{GELU}(x) = x \cdot \Phi(x) \approx 0.5x\left(1 + \tanh\left(\sqrt{\frac{2}{\pi}}(x + 0.044715x^3)\right)\right)
- Rango: \approx (-0.17, \infty)
- Propiedad: suave, no monótona, basada en la función de distribución gaussiana \Phi
- Interpretación: la probabilidad de que una variable gaussiana sea menor que x pondera la entrada
- Uso: estándar en Transformers (BERT, GPT, ViT)
5.8 Mish
\text{Mish}(x) = x \cdot \tanh(\text{softplus}(x)) = x \cdot \tanh(\ln(1 + e^x))
- Rango: \approx (-0.31, \infty)
- Propiedad: suave, no monótona, auto-regularizante
- Ventaja: gradientes que fluyen mejor que Swish en redes muy profundas
- Uso: YOLOv4, redes de detección de objetos
6. Sonificación
6.1 La orquesta
Cada función de activación tiene asignado un oscilador continuo con frecuencia y timbre distintos:
| Función | Frecuencia base | Forma de onda | Posición estéreo |
|---|---|---|---|
| Sigmoid | 110 Hz | Sine | Izquierda |
| Tanh | 220 Hz | Sine | Centro-izq |
| ReLU | 330 Hz | Sawtooth | Centro-izq |
| Leaky ReLU | 440 Hz | Sawtooth | Centro |
| ELU | 550 Hz | Triangle | Centro |
| Swish | 660 Hz | Triangle | Centro-der |
| GELU | 770 Hz | Triangle | Centro-der |
| Mish | 880 Hz | Triangle | Derecha |
6.2 Modulación por salida
El volumen de cada oscilador es proporcional a |\sigma(x)|: funciones con salida alta suenan más fuerte, las que están en zona muerta se silencian.
6.3 Detuning por saturación
Cuando la derivada es baja (\sigma'(x) < 0.1), el oscilador se desafina hasta 25 centésimas. Esto crea una sensación de “disonancia” audible que representa la saturación — puedes escuchar cuándo una función deja de ser útil para el gradiente.
7. Guía Paso a Paso
Experimento 1: Comparación visual básica
- Mantén la configuración por defecto (seno, amplitud 2.0)
- Observa las 8 celdas simultáneamente
- Sigmoid y Tanh producen curvas suaves y acotadas
- ReLU corta la mitad negativa — la onda se “rectifica”
- Swish, GELU y Mish son intermedias: suaves pero no acotadas
- Activa “Mostrar derivadas” para ver dónde \sigma' es alta y dónde cae a cero
Experimento 2: Saturación con amplitud alta
- Click en “Explosión” (A = 10)
- Observa Sigmoid: se convierte en una onda cuadrada (saturación total en 0 y 1)
- Tanh hace lo mismo: satura en -1 y 1
- ReLU y Leaky ReLU no saturan — la salida crece linealmente
- Mira las derivadas punteadas: en Sigmoid y Tanh, \sigma' es prácticamente 0 excepto en transiciones
- Conclusión: con señales grandes, Sigmoid y Tanh no transmiten gradientes
Experimento 3: Régimen lineal
- Click en “Suave” (A = 0.5)
- Todas las funciones producen salidas muy similares — casi lineales
- Las derivadas son altas y estables
- Conclusión: cerca del origen, todas las activaciones se comportan de forma parecida. Las diferencias aparecen con señales fuertes.
Experimento 4: Señales abruptas
- Selecciona señal “Cuadrada” con amplitud normal
- La señal de entrada salta entre +2 y -2
- Sigmoid y Tanh suavizan los saltos (tienen inercia)
- ReLU produce una onda cuadrada rectificada (solo la parte positiva)
- Observa la derivada de ReLU: salta entre 0 y 1 instantáneamente
Experimento 5: GELU vs. ReLU
- Señal seno, amplitud 2.0
- Compara la celda de ReLU (verde) con GELU (rosa)
- ReLU corta abruptamente en x = 0 — la derivada es discontinua
- GELU tiene una transición suave — permite un pequeño rango negativo
- Activa las derivadas: la de ReLU salta de 0 a 1; la de GELU es una curva suave
- Esto explica por qué GELU funciona mejor en Transformers: gradientes más suaves
8. Conceptos Avanzados
8.1 La muerte de neuronas ReLU
Cuando una neurona con ReLU recibe consistentemente entradas negativas (porque w \cdot x + b < 0 para todos los datos del batch), su salida es 0 y su gradiente es 0. No recibe señal de error y nunca se recupera. Esto se llama el problema de “dying ReLU”.
Soluciones: Leaky ReLU, ELU, o inicialización cuidadosa de pesos.
8.2 La “no-monotonicidad” de Swish, GELU y Mish
Estas tres funciones tienen un comportamiento peculiar: para x ligeramente negativo, la salida es negativa y menor que la entrada. Esto crea un “valle” que actúa como regularización implícita — penaliza ligeramente las activaciones pequeñas pero negativas.
El mínimo de Swish está en x \approx -1.28 con valor \approx -0.28.
8.3 La aproximación de GELU
GELU se define como x \cdot \Phi(x) donde \Phi es la CDF de la distribución normal estándar. La implementación usa la aproximación:
\text{GELU}(x) \approx 0.5x\left(1 + \tanh\left(\sqrt{\frac{2}{\pi}}(x + 0.044715x^3)\right)\right)
Esta aproximación es extremadamente precisa (error < 10^{-4}) y más rápida que evaluar la función de error.
8.4 Funciones de activación en diferentes arquitecturas
| Arquitectura | Activación típica | Razón |
|---|---|---|
| CNN (ResNet, VGG) | ReLU | Simple, rápida, no satura |
| Transformers (GPT, BERT) | GELU | Suave, mejor rendimiento empírico |
| LSTM / GRU | Sigmoid (gates) + Tanh (estado) | Gates necesitan [0,1]; estado centrado en cero |
| GANs | Leaky ReLU | Evita neuronas muertas en el discriminador |
| Detection (YOLO) | Mish / SiLU | Mejor gradiente en redes muy profundas |
8.5 Softplus como precursor
\text{Softplus}(x) = \ln(1 + e^x)
Softplus es una versión suave de ReLU. Es la base de Mish (x \cdot \tanh(\text{softplus}(x))). Aunque teóricamente elegante, en la práctica ReLU suele funcionar mejor por su simplicidad y derivada exacta.
9. Ejercicios
Ejercicio 1: Clasificando saturación
Con señal seno y amplitud 5.0, clasifica las 8 funciones en tres categorías: “satura completamente”, “satura parcialmente” y “no satura”. Verifica tu clasificación observando las derivadas.
Ejercicio 2: Reconstrucción de la entrada
¿Desde qué función podrías reconstruir la señal de entrada original? Con amplitud normal, compara las salidas de ReLU y Leaky ReLU. ¿Cuál preserva más información? ¿Es posible reconstruir x a partir de \text{ReLU}(x)? ¿Y a partir de \text{LeakyReLU}(x)?
Ejercicio 3: Sensibilidad a la amplitud
Varía la amplitud de 0.1 a 10 en incrementos de 0.5. Para cada valor, anota si Sigmoid está: (a) en régimen lineal, (b) parcialmente saturada, (c) totalmente saturada. ¿En qué rango de amplitud cambia el comportamiento?
Ejercicio 4: GELU manual
La fórmula de GELU usa \Phi(x) \approx 0.5(1 + \tanh(\sqrt{2/\pi}(x + 0.044715x^3))). Calcula \text{GELU}(-1), \text{GELU}(0) y \text{GELU}(2) a mano. Verifica tus resultados observando los valores en el tooltip.
Ejercicio 5: Escuchando la saturación
Activa el audio y usa señal seno con amplitud normal. Gradualmente sube la amplitud a 10. ¿En qué punto empiezas a notar la desafinación (detuning) en los osciladores? ¿Cuáles funciones se desafinan primero? ¿Cuáles mantienen el tono?
Ejercicio 6: Derivada máxima
Para cada una de las 8 funciones, observa la derivada con señal seno y amplitud 2.0. ¿Cuál tiene la derivada máxima más alta? ¿Cuál tiene la derivada más estable (menos variación)? Ordena las 8 funciones de “mejor para gradientes” a “peor para gradientes”.
10. Glosario
| Término | Definición |
|---|---|
| Función de activación | Función no lineal \sigma(z) aplicada a la pre-activación de cada neurona |
| No-linealidad | Propiedad que permite a las redes neuronales representar funciones complejas |
| Saturación | Estado donde \|\sigma'(z)\| \approx 0; los gradientes no fluyen a través de la neurona |
| Zona muerta | Región de la entrada donde la salida y la derivada son cero (ej. x < 0 en ReLU) |
| Neurona muerta | Neurona que siempre produce 0 y no se recupera; problema de ReLU |
| Sigmoid | \sigma(x) = 1/(1+e^{-x}); acota a (0,1), satura |
| Tanh | \tanh(x); centrada en cero, acota a (-1,1), satura |
| ReLU | \max(0,x); simple, no satura para x > 0, tiene zona muerta |
| Leaky ReLU | \max(0.01x, x); ReLU con pendiente pequeña en x < 0 |
| ELU | Exponential Linear Unit; suave en x = 0, media cercana a cero |
| Swish | x \cdot \sigma(x); auto-gated, no monótona, suave |
| GELU | x \cdot \Phi(x); estándar en Transformers, suave probabilística |
| Mish | x \cdot \tanh(\text{softplus}(x)); auto-regularizante, no monótona |
| Derivada de activación (\sigma') | Factor por el que se multiplica el gradiente al atravesar la neurona |
| Detuning | Desafinación del oscilador proporcional a la saturación |
| Softplus | \ln(1 + e^x); versión suave de ReLU, base de Mish |
| Auto-gating | Propiedad de Swish/GELU donde la función controla su propia magnitud |
| CDF gaussiana (\Phi) | Función de distribución acumulada de la normal estándar; base de GELU |
11. Referencias
Nair, V. & Hinton, G. E. (2010). “Rectified Linear Units Improve Restricted Boltzmann Machines.” Proceedings of ICML 2010.
Clevert, D.-A., Unterthiner, T. & Hochreiter, S. (2016). “Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs).” Proceedings of ICLR 2016. arXiv:1511.07289.
Ramachandran, P., Zoph, B. & Le, Q. V. (2018). “Searching for Activation Functions.” ICLR 2018 Workshop. arXiv:1710.05941.
Hendrycks, D. & Gimpel, K. (2016). “Gaussian Error Linear Units (GELUs).” arXiv:1606.08415.
Misra, D. (2019). “Mish: A Self Regularized Non-Monotonic Activation Function.” arXiv:1908.08681.
Glorot, X., Bordes, A. & Bengio, Y. (2011). “Deep Sparse Rectifier Neural Networks.” Proceedings of AISTATS 2011.
Goodfellow, I., Bengio, Y. & Courville, A. (2016). Deep Learning, Section 6.3: Hidden Units. MIT Press.
Maas, A. L., Hannun, A. Y. & Ng, A. Y. (2013). “Rectifier Nonlinearities Improve Neural Network Acoustic Models.” ICML Workshop on Deep Learning for Audio.