1. Introducción
Antes de que una red neuronal aprenda cualquier cosa, sus pesos deben recibir valores iniciales. Esta decisión, que parece trivial, determina si el entrenamiento será exitoso o fallará catastróficamente. Pesos demasiado grandes causan que las señales exploten exponencialmente; pesos demasiado pequeños hacen que colapsen a cero.
Esta simulación te permite ver ese fenómeno directamente. Construyes una red de hasta 30 capas y 256 neuronas por capa, seleccionas un método de inicialización y una función de activación, y observas cómo un batch de datos se transforma al pasar por cada capa. Los histogramas de activaciones de cada capa se muestran como “galaxias” — distribuciones de puntos que pueden expandirse, comprimirse o mantenerse estables.
La clave está en una ecuación simple: \text{Var}[a_l] = n_{in} \cdot \text{Var}[w] \cdot \text{Var}[a_{l-1}]. Si el producto n_{in} \cdot \text{Var}[w] \neq 1, la varianza cambia exponencialmente con la profundidad.
2. Conceptos Fundamentales
2.1 El problema de la inicialización
En una capa densa, la pre-activación de la neurona j es:
z_j = \sum_{i=1}^{n} w_{ij} a_i + b_j
Si los pesos w_{ij} y las activaciones a_i son independientes con media cero:
\text{Var}[z_j] = n_{in} \cdot \text{Var}[w] \cdot \text{Var}[a]
Para que la varianza se mantenga estable capa a capa, necesitamos:
n_{in} \cdot \text{Var}[w] = 1
2.2 Explosión y desvanecimiento
Si n_{in} \cdot \text{Var}[w] > 1, la varianza crece exponencialmente:
\text{Var}[a_L] = (n \cdot \text{Var}[w])^L \cdot \text{Var}[a_0] \to \infty
Si n_{in} \cdot \text{Var}[w] < 1, la varianza decrece exponencialmente:
\text{Var}[a_L] = (n \cdot \text{Var}[w])^L \cdot \text{Var}[a_0] \to 0
En una red de 30 capas, incluso un factor de 1.5 por capa resulta en 1.5^{30} \approx 191000 — explosión total.
2.3 Los tres esquemas clásicos
| Método | Varianza | Diseñado para |
|---|---|---|
| Xavier/Glorot | \frac{2}{n_{in} + n_{out}} | Sigmoid, Tanh |
| He/Kaiming | \frac{2}{n_{in}} | ReLU |
| LeCun | \frac{1}{n_{in}} | SELU |
3. La Interfaz
3.1 Estructura general
| Área | Ubicación | Función |
|---|---|---|
| Canvas principal | Izquierda | Histogramas de activaciones por capa como “galaxias” |
| Tooltip | Sobre histograma hovereado | Varianza, media, min/max de la capa |
| Badge de estado | Canvas | Indica “Estable”, “Vanishing” o “Exploding” |
| Panel de controles | Derecha (360px) | Inicialización, activación, arquitectura, métricas |
3.2 Los histogramas galácticos
Cada capa se representa como un histograma vertical de las activaciones del batch:
- Histograma ancho y centrado: distribución saludable (varianza ≈ 1)
- Histograma que colapsa a una línea: señal desvanecida (varianza → 0)
- Histograma que se desborda: señal explosiva (varianza → ∞)
- Partículas estelares: puntos individuales del batch que flotan alrededor del histograma
- Glow: resplandor en los histogramas proporcional a la varianza
3.3 Gráfica de varianza por capa
Miniatura que muestra \log(\text{Var}) en función del número de capa. Una línea horizontal indica estabilidad; una línea descendente indica vanishing; ascendente indica explosión.
3.4 Diagnóstico
Panel con: estado general, varianza de entrada, varianza de salida, ratio salida/entrada, presencia de NaN, varianza media, y número de capas estables.
4. Controles Interactivos
4.1 Método de inicialización
| Método | Distribución | Descripción |
|---|---|---|
| Xavier/Glorot | \mathcal{N}(0, 2/(n_{in}+n_{out})) | Equilibra forward y backward pass |
| He/Kaiming | \mathcal{N}(0, 2/n_{in}) | Compensa la “muerte” de mitad de ReLU |
| LeCun | \mathcal{N}(0, 1/n_{in}) | Variante conservadora para SELU |
| Normal(0, 1) | \mathcal{N}(0, 1) | Demasiado grande — explosión garantizada |
| Normal(0, 0.01) | \mathcal{N}(0, 0.0001) | Demasiado pequeño — colapso garantizado |
| Zeros | w = 0 | Sin ruptura de simetría — la red no aprende |
4.2 Función de activación
| Activación | Efecto en varianza |
|---|---|
| ReLU | Elimina valores negativos → reduce varianza a la mitad |
| Sigmoid | Comprime a (0,1) → reduce varianza drásticamente |
| Tanh | Comprime a (-1,1) → reduce varianza |
| Lineal | Sin efecto → solo la inicialización importa |
4.3 Arquitectura
| Control | Rango | Default |
|---|---|---|
| Profundidad | 2 – 30 capas | 10 |
| Ancho | 8 – 256 neuronas | 64 |
| Batch size | 1 – 128 | 32 |
4.4 Control de propagación
| Botón | Acción |
|---|---|
| Propagar | Inicializa pesos y propaga un batch completo instantáneamente |
| Animar | Propaga capa por capa con animación visual |
| Comparar Todo | Ejecuta todas las combinaciones de inicialización + activación |
4.5 Opciones visuales
- Partículas estelares: muestra puntos individuales del batch flotando alrededor del histograma
- Glow en histogramas: añade un efecto de resplandor proporcional a la energía de cada capa
5. Las Matemáticas
5.1 Derivación de Xavier/Glorot
Para una capa con n_{in} entradas y n_{out} salidas, queremos mantener la varianza en el forward pass:
\text{Var}[z] = n_{in} \cdot \text{Var}[w] \cdot \text{Var}[a] \implies \text{Var}[w] = \frac{1}{n_{in}}
Y también en el backward pass:
\text{Var}[\delta] = n_{out} \cdot \text{Var}[w] \cdot \text{Var}[\delta'] \implies \text{Var}[w] = \frac{1}{n_{out}}
Como no podemos satisfacer ambas simultáneamente, Xavier usa el promedio:
\text{Var}[w] = \frac{2}{n_{in} + n_{out}}
5.2 Derivación de He/Kaiming
ReLU elimina todos los valores negativos, reduciendo la varianza a la mitad:
\text{Var}[\text{ReLU}(z)] = \frac{1}{2}\text{Var}[z]
Para compensar, He duplica la varianza de Xavier (solo para forward):
\text{Var}[w] = \frac{2}{n_{in}}
5.3 Factor de escala por capa
Para activación lineal, el factor de escala por capa es:
\alpha = n_{in} \cdot \text{Var}[w]
| Método | \alpha (con n_{in} = 64) |
|---|---|
| Xavier | 64 \cdot 2/128 = 1.0 |
| He | 64 \cdot 2/64 = 2.0 |
| LeCun | 64 \cdot 1/64 = 1.0 |
| Normal(0,1) | 64 \cdot 1 = 64 |
| Normal(0,0.01) | 64 \cdot 0.0001 = 0.0064 |
Con 10 capas: Normal(0,1) → 64^{10} \approx 10^{18} (NaN). Normal(0,0.01) → 0.0064^{10} \approx 10^{-22} (cero).
5.4 Efecto de la función de activación
La varianza después de aplicar la activación \sigma es:
\text{Var}[\sigma(z)] = \mathbb{E}[\sigma(z)^2] - \mathbb{E}[\sigma(z)]^2
Para Sigmoid con z \sim \mathcal{N}(0, 1): \text{Var}[\sigma(z)] \approx 0.05. Esto significa que sigmoid aplasta la varianza a 1/20 de su valor original en cada capa.
5.5 El problema de simetría con zeros
Si todos los pesos son cero, todas las neuronas de una capa computan la misma función. Sus gradientes son idénticos, se actualizan de forma idéntica, y nunca se diferencian. La red tiene efectivamente una sola neurona por capa.
6. Sonificación
6.1 Nota por capa
Cada capa produce una nota cuya frecuencia depende de la varianza:
- Varianza estable (\approx 1): nota media (\sim 440 Hz), armónica
- Varianza alta (explosión): nota aguda, volumen creciente
- Varianza baja (vanishing): nota grave, volumen decreciente
- NaN/Infinito: silencio abrupto (la señal murió)
6.2 Secuencia de propagación
Durante la animación, las notas suenan en secuencia (una por capa), creando una melodía ascendente (explosión), descendente (vanishing) o plana (estable).
6.3 Acorde de diagnóstico
Al completar la propagación: - Estable: acorde mayor consonante - Vanishing: secuencia descendente melancólica - Exploding: cluster disonante ascendente
7. Guía Paso a Paso
Experimento 1: Xavier + ReLU (el error clásico)
- Selecciona Xavier y ReLU, profundidad 10, ancho 64
- Click en Propagar
- Observa los histogramas: la varianza debería decrecer ligeramente
- Xavier está diseñado para sigmoid/tanh, no para ReLU
- Cambia a He y propaga de nuevo: los histogramas se mantienen más estables
- Conclusión: usar el esquema correcto para cada activación importa
Experimento 2: Normal(0,1) — la explosión
- Selecciona Normal(0, 1) y Lineal, profundidad 10
- Propaga — las últimas capas tendrán varianza astronómica
- La gráfica de varianza será una línea ascendente exponencial
- Con profundidad 20, el diagnóstico mostrará NaN
- n_{in} \cdot \text{Var}[w] = 64 \cdot 1 = 64 → la varianza se multiplica por 64 en cada capa
Experimento 3: Normal(0, 0.01) — el colapso
- Selecciona Normal(0, 0.01) y Lineal, profundidad 10
- Propaga — los histogramas colapsan rápidamente a una línea vertical en cero
- Con sigmoid, es aún peor: las activaciones se concentran en \sigma(0) = 0.5 (un valor constante)
- Conclusión: pesos demasiado pequeños matan las señales
Experimento 4: La profundidad amplifica
- Usa Xavier + Sigmoid, profundidad 5 → razonablemente estable
- Sube a profundidad 15 → se nota el vanishing
- Profundidad 30 → colapso total
- Repite con He + ReLU profundidad 30 → mucho más estable
- Conclusión: la profundidad amplifica cualquier desequilibrio
Experimento 5: Comparar Todo
- Click en Comparar Todo
- La simulación muestra una cuadrícula con todas las combinaciones de inicialización × activación
- Identifica las combinaciones “verdes” (estables) y “rojas” (inestables)
- He + ReLU y Xavier + Tanh deberían ser las más estables
Experimento 6: El efecto del ancho
- Fija He + ReLU, profundidad 10
- Prueba ancho 8, luego 64, luego 256
- Observa la gráfica de varianza: ¿el ancho afecta la estabilidad?
- La fórmula de He ajusta \text{Var}[w] = 2/n_{in}, compensando el ancho
- Sin este ajuste (Normal(0,1)), redes más anchas explotan más rápido
8. Conceptos Avanzados
8.1 Inicialización ortogonal
Además de los métodos basados en varianza, se puede inicializar con matrices ortogonales (W^T W = I). Esto preserva exactamente las normas de los vectores y es óptimo para redes lineales profundas. La descomposición QR de una matriz gaussiana aleatoria produce una inicialización ortogonal.
8.2 Batch Normalization como solución
Batch Normalization (Ioffe & Szegedy, 2015) normaliza las activaciones en cada capa a media 0 y varianza 1 durante el entrenamiento. Esto hace que la red sea mucho menos sensible a la inicialización — pero no la hace irrelevante (la inicialización aún afecta la velocidad de convergencia).
8.3 Layer Normalization y alternativas
| Técnica | Normaliza sobre | Uso principal |
|---|---|---|
| Batch Norm | Batch × Features | CNNs |
| Layer Norm | Features | Transformers |
| Group Norm | Grupos de features | CNNs con batch pequeño |
| RMS Norm | RMS de features | LLMs modernos |
8.4 Residual connections y el problema de profundidad
Las conexiones residuales (a_l = f(a_{l-1}) + a_{l-1}) de ResNet mitigan el vanishing gradient al crear un “atajo” para las señales. La inicialización sigue siendo importante — He se diseñó específicamente pensando en ResNets.
8.5 Data-dependent initialization
Métodos modernos como LSUV (Layer-Sequential Unit Variance) inicializan los pesos iterativamente, propagando datos reales y ajustando la escala de cada capa hasta que la varianza sea exactamente 1. Esto es más robusto que los métodos analíticos cuando las suposiciones (distribución gaussiana, independencia) no se cumplen.
9. Ejercicios
Ejercicio 1: Cálculo de varianza
Para una red de ancho 32 con Normal(0, 1) y activación lineal, calcula \text{Var}[a_5] si \text{Var}[a_0] = 1. Verifica tu cálculo configurando la simulación con esos parámetros y leyendo la varianza de la capa 5.
Ejercicio 2: Diseña tu propio esquema
Si tu red tiene capas de ancho variable (32, 64, 128, 64, 32), ¿qué varianza de pesos usarías en cada capa para mantener la varianza constante con activación lineal? Compara con lo que He y Xavier producen.
Ejercicio 3: Sigmoid vs. ReLU con Xavier
Fija Xavier, profundidad 20, ancho 64. Propaga con Sigmoid y anota la varianza de las capas 5, 10, 15 y 20. Repite con ReLU. ¿Para cuál función Xavier mantiene mejor la varianza? ¿Por qué?
Ejercicio 4: El punto de quiebre
Con Normal(0, 1) y activación lineal, ¿cuál es la profundidad máxima antes de obtener NaN? Prueba con ancho 8, 64 y 256. ¿Redes más estrechas aguantan más capas o menos?
Ejercicio 5: Zeros y simetría
Inicializa con Zeros y cualquier activación, profundidad 5. Observa los histogramas: ¿todas las neuronas tienen el mismo valor? Intenta entrenar (en la simulación de Backpropagation Flow) una red inicializada con zeros. ¿Qué ocurre con el loss?
Ejercicio 6: Efecto del batch size
Fija He + ReLU, profundidad 15. Propaga con batch size 1, 32 y 128. ¿Cambia el diagnóstico? ¿La varianza estimada es más ruidosa con batch size pequeño? Explica por qué.
10. Glosario
| Término | Definición |
|---|---|
| Inicialización de pesos | Asignación de valores iniciales a los parámetros de la red antes del entrenamiento |
| Varianza (\text{Var}) | Medida de dispersión: \text{Var}[X] = \mathbb{E}[X^2] - \mathbb{E}[X]^2 |
| Xavier/Glorot | Inicialización con \text{Var}[w] = 2/(n_{in}+n_{out}); óptima para sigmoid/tanh |
| He/Kaiming | Inicialización con \text{Var}[w] = 2/n_{in}; óptima para ReLU |
| LeCun | Inicialización con \text{Var}[w] = 1/n_{in}; variante para SELU |
| Explosión de activaciones | Varianza que crece exponencialmente con la profundidad |
| Desvanecimiento de activaciones | Varianza que decrece exponencialmente con la profundidad |
| Ruptura de simetría | Necesidad de que los pesos iniciales sean diferentes para que las neuronas se especialicen |
| NaN | Not a Number; ocurre cuando los valores exceden el rango del punto flotante |
| Batch size | Número de muestras propagadas simultáneamente para estimar la distribución |
| Factor de escala por capa (\alpha) | n_{in} \cdot \text{Var}[w]; debe ser \approx 1 para estabilidad |
| Batch Normalization | Técnica que normaliza activaciones a media 0 y varianza 1 en cada capa |
| Conexión residual | Atajo que suma la entrada a la salida: a_l = f(a_{l-1}) + a_{l-1} |
| Inicialización ortogonal | Pesos como matrices ortogonales que preservan normas exactamente |
| Histograma de activaciones | Distribución de los valores de salida de una capa para un batch dado |
| Diagnóstico | Clasificación del estado de propagación: Estable, Vanishing o Exploding |
| Profundidad | Número de capas de la red; amplifica cualquier desequilibrio en la varianza |
| Partículas estelares | Representación visual de puntos individuales del batch en el histograma |
11. Referencias
Glorot, X. & Bengio, Y. (2010). “Understanding the Difficulty of Training Deep Feedforward Neural Networks.” Proceedings of AISTATS 2010.
He, K., Zhang, X., Ren, S. & Sun, J. (2015). “Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification.” ICCV 2015. arXiv:1502.01852.
LeCun, Y., Bottou, L., Orr, G. B. & Müller, K.-R. (1998). “Efficient BackProp.” Neural Networks: Tricks of the Trade, Springer, 9–50.
Ioffe, S. & Szegedy, C. (2015). “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.” Proceedings of ICML 2015. arXiv:1502.03167.
Saxe, A. M., McClelland, J. L. & Ganguli, S. (2014). “Exact Solutions to the Nonlinear Dynamics of Learning in Deep Linear Neural Networks.” ICLR 2014. arXiv:1312.6120.
Mishkin, D. & Matas, J. (2016). “All You Need is a Good Init.” ICLR 2016. arXiv:1511.06422.
Goodfellow, I., Bengio, Y. & Courville, A. (2016). Deep Learning, Section 8.4: Parameter Initialization Strategies. MIT Press.