InicioAprendizaje Automático y Redes NeuronalesRetropropagación

🔁 Retropropagación

Simulador interactivo de retropropagación: observa cómo los deltas pulsan hacia atrás a través de un pequeño MLP y los gradientes actualizan cada peso mientras el límite de decisión se transforma.

Aprendizaje Automático y Redes Neuronales3DAvanzado60 FPS
backpropagation ↗ Abrir independiente

Acerca de la Retropropagación en Redes Neuronales

La retropropagación (Rumelhart, Hinton y Williams, 1986) es el algoritmo que hace práctico el entrenamiento de redes neuronales profundas. Aplica la regla de la cadena del cálculo para calcular eficientemente el gradiente de la función de pérdida respecto a cada peso de la red en una única pasada hacia atrás — comparado con el enfoque ingenuo de perturbar cada peso individualmente, que costaría O(W) pasadas hacia adelante para W pesos. La idea clave es que los gradientes pueden propagarse hacia atrás capa por capa, reutilizando cada capa las señales δ (términos de error) calculadas por la capa superior. La retropropagación es la base de prácticamente todo sistema moderno de aprendizaje profundo, desde clasificadores de imágenes hasta grandes modelos de lenguaje.

Esta simulación visualiza un perceptrón multicapa (MLP) con una capa de entrada, dos capas ocultas de ancho ajustable H, y una salida de dos clases. Puedes avanzar paso a paso por la pasada hacia adelante (observando cómo las activaciones fluyen de izquierda a derecha) y la pasada hacia atrás (observando cómo las señales δ y los gradientes de peso fluyen de derecha a izquierda), elegir entre activaciones ReLU, tanh y sigmoide, cambiar entre modos de salida de clasificación (softmax) y regresión (lineal), y dibujar tu propio conjunto de datos en el lienzo con varios preajustes incluyendo XOR, espirales y conjuntos de datos de dos lunas.

Preguntas Frecuentes

¿Qué problema resuelve la retropropagación?

Entrenar una red neuronal significa encontrar pesos W que minimicen una función de pérdida L(W) — por ejemplo, entropía cruzada para clasificación o error cuadrático medio para regresión. El descenso de gradiente requiere calcular ∂L/∂w para cada peso w. Una red con W pesos necesitaría ingenuamente W + 1 pasadas hacia adelante para estimar todos los gradientes por diferencias finitas. La retropropagación usa la regla de la cadena para calcular el gradiente exacto de L respecto a todos los W pesos en una sola pasada hacia adelante y una hacia atrás — reduciendo el cómputo de O(W²) a O(W).

¿Cómo hace la regla de la cadena que funcione la retropropagación?

La regla de la cadena establece que si z = f(y) e y = g(x), entonces dz/dx = (dz/dy)(dy/dx). En una red con capas l = 1, …, L, la pérdida L depende de la salida ŷ que depende de las activaciones en la capa L–1, que dependen de la capa L–2, y así sucesivamente. La pasada hacia atrás calcula δ^(l) = (∂L/∂a^(l)), la "señal de error" en la capa l, de forma recursiva: δ^(l) = (W^(l+1))ᵀ δ^(l+1) ⊙ σ'(z^(l)), donde σ' es la derivada de la función de activación. El gradiente del peso es entonces ∂L/∂W^(l) = δ^(l) (a^(l-1))ᵀ.

¿Qué es el problema del gradiente que se desvanece?

Con activaciones sigmoide o tanh, la derivada σ'(z) es como máximo 0.25 (sigmoide) o 1 (tanh en z = 0) y se reduce hacia cero para valores grandes de |z|. Multiplicar muchas de estas derivadas a través de la regla de la cadena a lo largo de L capas hace que los gradientes en las primeras capas se reduzcan exponencialmente — un factor de (0.25)^L por paso para sigmoide. Con 10 capas esto significa que los gradientes se reducen por un factor de aproximadamente 10⁻⁶, haciendo casi imposible entrenar los pesos de las primeras capas. ReLU (σ'(z) = 1 para z > 0) evita esto en la pasada hacia adelante pero puede sufrir "neuronas muertas" donde z es siempre negativo.

¿Cuál es la diferencia entre SGD, GD por mini-lotes y GD por lote completo?

El descenso de gradiente estocástico (SGD) actualiza los pesos después de cada ejemplo de entrenamiento individual — rápido pero ruidoso. El descenso de gradiente por lote completo calcula el gradiente exacto sobre todo el conjunto de datos antes de actualizar — estable pero lento para conjuntos de datos grandes. El descenso de gradiente por mini-lotes (el estándar en aprendizaje profundo) usa un subconjunto aleatorio de B ejemplos por actualización, promediando el gradiente sobre el lote. El mini-lote equilibra el ruido (que ayuda a escapar de mínimos locales) con la eficiencia computacional (las operaciones matriciales sobre lotes se paralelizan bien en GPUs). Esta simulación ejecuta SGD de una sola muestra para mostrar claramente las actualizaciones individuales de los pesos.

¿Cuáles son las diferencias entre las activaciones ReLU, tanh y sigmoide?

La sigmoide σ(z) = 1/(1 + e^(–z)) comprime las salidas a (0, 1) y fue la elección original; sufre de gradientes que se desvanecen para valores grandes de |z|. Tanh(z) = (e^z – e^(–z))/(e^z + e^(–z)) mapea a (–1, 1) y tiene gradientes más fuertes cerca de cero que la sigmoide, haciéndola mejor para capas ocultas. ReLU(z) = max(0, z) es la elección moderna más popular: tiene un gradiente constante de 1 para z > 0 (sin desvanecimiento), es computacionalmente económica, y produce activaciones dispersas. Leaky ReLU y GELU son variantes comunes que corrigen el problema de las "ReLU moribundas".

¿Qué es la tasa de aprendizaje y cómo afecta el entrenamiento?

La tasa de aprendizaje η escala cada paso de gradiente: W ← W – η ∂L/∂W. Una η demasiado grande hace que la pérdida oscile o diverja (sobrepasando el mínimo); una η demasiado pequeña lleva a una convergencia extremadamente lenta. Los valores típicos van de η = 10⁻⁴ a 10⁻¹. El deslizador de tasa de aprendizaje en esta simulación usa una escala logarítmica (10^x donde x va de –3 a 0). Optimizadores modernos como Adam adaptan η por parámetro usando estimaciones de momento, fijando efectivamente una buena η de forma automática y requiriendo mucho menos ajuste.

¿Qué representan los bordes brillantes durante la pasada hacia atrás?

El brillo de los bordes durante la pasada hacia atrás es proporcional a |∂L/∂w|, el valor absoluto del gradiente para ese peso. Los bordes que brillan intensamente están aprendiendo rápido — sus pesos se están actualizando con un paso grande. Los bordes oscuros corresponden a un gradiente casi nulo, lo que significa que esos pesos apenas cambian. En redes profundas con activaciones sigmoide, a menudo se puede ver que las primeras capas tienen bordes tenues (gradiente que se desvanece) mientras que las capas posteriores brillan intensamente — ilustrando exactamente por qué las redes profundas eran difíciles de entrenar antes de ReLU y la normalización por lotes.

¿Cómo se visualiza el límite de decisión?

El fondo del lienzo está codificado por colores según la predicción de clase actual de la red en cada punto: las regiones rojas se predicen como clase 0, las azules como clase 1, con la saturación indicando la confianza. Después de cada actualización de peso, este fondo se vuelve a renderizar ejecutando una pasada hacia adelante en cada píxel — lo cual es computacionalmente costoso para redes grandes, por lo que se muestrea en una cuadrícula más gruesa y se escala. A medida que avanza el entrenamiento, puedes ver cómo el límite de decisión se retuerce y se agudiza para separar las dos clases, a veces quedando atrapado en un mínimo local.

¿Qué conjuntos de datos están disponibles y por qué se eligieron?

Los cinco preajustes prueban diferentes aspectos de la expresividad de la red: "2 Gauss" (manchas linealmente separables) se puede resolver incluso sin capas ocultas; "XOR" requiere al menos una capa oculta porque las clases no son linealmente separables; "Moons" y "Spirals" requieren que la red aprenda un límite curvo y no convexo; "3 Cluster" prueba la separación multiclase con una salida softmax. Las espirales son un banco de pruebas clásico — una red totalmente conectada con solo dos unidades ocultas de tanh puede resolverlas, mientras que un clasificador lineal no puede.

¿Qué es la norma del gradiente |∇| en el panel de estadísticas?

La norma del gradiente |∇| = √(Σ (∂L/∂w)²) es la longitud euclidiana de todo el vector de gradiente concatenado a través de todos los pesos. Una norma de gradiente grande significa que la superficie de pérdida es empinada y la red está lejos de un mínimo; una norma muy pequeña sugiere convergencia o una meseta. Monitorear |∇| es útil para detectar gradientes explosivos (|∇| repentinamente muy grande) y gradientes que se desvanecen (|∇| cerca de cero al principio del entrenamiento). El recorte de gradiente fija un |∇| máximo permitido para estabilizar el entrenamiento de redes recurrentes.

¿Puede esta red aprender la función XOR?

Sí — XOR no es linealmente separable, lo que significa que ninguna línea única puede separar las cuatro combinaciones de entrada, por lo que un perceptrón (sin capas ocultas) falla por completo. Una red con al menos una neurona oculta que use una activación no lineal puede aprender XOR exactamente. El artículo de Rumelhart et al. de 1986 usó XOR como la demostración clave de que la retropropagación permite que las unidades ocultas desarrollen representaciones internas útiles en lugar de ser meros intermediarios. Con η = 0.1 y activaciones tanh, la red aquí típicamente resuelve XOR en unos pocos cientos de pasos de SGD.

⚙ Bajo el capó

Pulsos δ fluyen hacia atrás a través de un pequeño MLP: los gradientes resaltan los bordes, los pesos se actualizan, y el límite de decisión se transforma para ajustarse a los datos.

Canvas 2DRetropropagaciónRegla de la CadenaMLPDescenso de Gradiente

3D · Renderizador Three.js / WebGL · Objetivo de 60 FPS · funciona completamente del lado del cliente, sin instalación

¿Qué encontraste?

Añadir pasos de reproducción (opcional)