LECCIÓN 4

Red multicapa (MLP)

Conectamos capas. Aquí ves el "forward pass": el viaje completo de los datos desde la entrada hasta la predicción, número por número, sin saltarnos nada.

Recuerda de las lecciones anteriores: una capa aplica activación(x · W + b) en paralelo a varias neuronas. Con la capa oculta de XOR y entrada (1,0): z = [0.10, −0.10] y activaciones a = [0.5250, 0.4750]. Hoy conectamos esa capa con la capa de salida — el forward pass completo.

1. La arquitectura: 2 → 2 → 1

Para resolver XOR usamos una red diminuta de tres capas:

entrada
x₁
x₂
→ W₁ →
oculta
h₁
h₂
→ W₂ →
salida
ŷ

"MLP" = Multi-Layer Perceptron, el nombre clásico de esta arquitectura. "Totalmente conectada" significa que cada neurona de una capa se conecta con todas las de la siguiente — ningún enlace se salta. El nodo de salida se llama ŷ (se lee "y gorro") — el gorrito indica que es la estimación de la red, no el valor real.

2. Todos los pesos de la red (los de todo el curso)

Capa oculta (W₁, b₁):
  h₁:  w=[0.20, 0.40]   b=-0.10
  h₂:  w=[-0.30, 0.10]  b=0.20

Capa de salida (W₂, b₂):
  ŷ:   w=[0.50, -0.40]  b=0.10
       (un peso por cada neurona oculta: a₁ y a₂)

3. Forward pass completo para x = (1, 0)

Vamos a seguir el dato sin saltarnos ni una sola operación. Lo dividimos en 4 micro-pasos: (A) suma de la capa oculta, (B) activación de la capa oculta, (C) suma de la salida, (D) activación de la salida.

Micro-paso A — suma ponderada de la capa oculta (z₁)

Cada neurona oculta multiplica las entradas por sus pesos y suma el bias. Una operación a la vez:

Neurona h₁ — sus pesos son [0.20, 0.40], bias -0.10:
  producto de x₁:  x₁ · w = 1 · 0.20  = 0.20
  producto de x₂:  x₂ · w = 0 · 0.40  = 0.00
  sumo los productos:      0.20 + 0.00      = 0.20
  sumo el bias:            0.20 + (-0.10)  = 0.10   ← z₁ de h₁

Neurona h₂ — sus pesos son [-0.30, 0.10], bias 0.20:
  producto de x₁:  x₁ · w = 1 · -0.30 = -0.30
  producto de x₂:  x₂ · w = 0 · 0.10  = 0.00
  sumo los productos:      -0.30 + 0.00     = -0.30
  sumo el bias:            -0.30 + (0.20)  = -0.10  ← z₁ de h₂

  z₁ = [0.10, -0.10]

Micro-paso B — activación de la capa oculta (a₁)

Aplicamos la sigmoid a cada componente de z₁, y la sigmoid también la desarmamos paso a paso:

σ(z) = 1 / (1 + e^(-z))

Para z = 0.10 (neurona h₁):
  -z          = -0.10
  e^(-z)      = e^(-0.10) = 0.904837
  1 + e^(-z)  = 1 + 0.904837 = 1.904837
  1 / (...)   = 1 / 1.904837 = 0.524979   ← a₁ de h₁

Para z = -0.10 (neurona h₂):
  -z          = 0.10
  e^(-z)      = e^(0.10) = 1.105171
  1 + e^(-z)  = 1 + 1.105171 = 2.105171
  1 / (...)   = 1 / 2.105171 = 0.475021   ← a₁ de h₂

  a₁ = [0.524979, 0.475021]

Micro-paso C — suma ponderada de la salida (z₂)

La neurona de salida toma a₁ como entrada. Sus pesos son [0.50, -0.40] y bias 0.10:

  producto de a₁:  0.524979 · 0.50  = 0.262489
  producto de a₂:  0.475021 · -0.40 = -0.190008
  sumo los productos:     0.262489 + (-0.190008) = 0.072481
  sumo el bias:           0.072481 + 0.10        = 0.172481   ← z₂

Micro-paso D — activación de la salida (ŷ)

Una última sigmoid, otra vez desarmada:

Para z = 0.172481:
  -z          = -0.172481
  e^(-z)      = e^(-0.172481) = 0.841574
  1 + e^(-z)  = 1 + 0.841574 = 1.841574
  1 / (...)   = 1 / 1.841574 = 0.543014

  ŷ = a₂ = 0.543014

Resumen en tabla: cada cálculo, neurona por neurona

Los mismos 4 micro-pasos, ahora condensados en una tabla que se lee de izquierda a derecha. Fíjate cómo la salida de la capa oculta (a₁, a₂) se convierte en la entrada de la neurona de salida — así es como una neurona "se conecta" con las otras:

CapaNeurona ① productos (entrada · peso) ② Σ ③ + bias = z ④ σ(z) = a
oculta h₁ x₁·w = 1 · 0.20 = 0.2000
x₂·w = 0 · 0.40 = 0.0000
0.2000 + (-0.10) = 0.1000 0.524979
h₂ x₁·w = 1 · -0.30 = -0.3000
x₂·w = 0 · 0.10 = 0.0000
-0.3000 + (0.20) = -0.1000 0.475021
salida ŷ a₁·w = 0.524979 · 0.50 = 0.262489
a₂·w = 0.475021 · -0.40 = -0.190008
0.072481 + (0.10) = 0.172481 0.543014
🔗 El enlace entre capas: mira la fila de la salida (ŷ). Sus "entradas" ya no son x₁, x₂, sino a₁ = 0.524979 y a₂ = 0.475021 — justo los resultados de la columna ④ de las neuronas ocultas. La salida de una capa es la entrada de la siguiente. Eso es lo que significa que las neuronas estén "conectadas".
La red predice ŷ = 0.543 para la entrada (1, 0). El target correcto de XOR es 1. O sea: está apenas por encima de 0.5, casi indecisa. Normal: la red todavía no ha aprendido nada, los pesos son inventados. Aprender = ajustar esos pesos para que ŷ se acerque a 1. Eso empieza en la lección 5.

4. La red entera, de un vistazo (los 4 casos de XOR)

Aplicando el mismo forward pass a las cuatro entradas posibles (solo desarrollamos (1,0) en la sección anterior — los demás siguen exactamente los mismos micro-pasos A→D con las entradas cambiadas; puedes verificarlo con el demo de abajo):

x₁x₂XOR (target)z₁ (oculta)a₁ŷ (predicción)
000[−0.10, 0.20][0.4750, 0.5498]0.5294
011[0.30, 0.30][0.5744, 0.5744]0.5393
101[0.10, −0.10][0.5250, 0.4750]0.5430
110[0.50, 0.00][0.6225, 0.5000]0.5526
⚠️ Mira la última columna: las cuatro predicciones rondan 0.5, sin distinguir los 0 de los 1. La red sin entrenar es inútil — pero la estructura ya está lista. Solo faltan los pesos correctos.

🎮 Elige una entrada y observa el flujo

5. Lo que aprendiste

Lo que aprendiste hoy: una red multicapa (MLP) encadena capas — la salida de una es la entrada de la siguiente. El "forward pass" es ese viaje completo: capa oculta (z₁ → a₁) → capa de salida (z₂ → ŷ). Para XOR con entrada (1,0): z₁ = [0.10, −0.10] → a₁ = [0.5250, 0.4750] → z₂ = 0.1725 → ŷ = 0.543. La red no sabe nada aún — los pesos son inventados y todas las predicciones rondan 0.5.

¿Por qué necesita la capa oculta? XOR no se puede separar con una sola línea recta. La capa oculta + la activación no-lineal dobla el espacio, haciendo posible la separación. Sin la capa oculta, cualquier red sería equivalente a una sola neurona.

En la lección 5 aprenderemos a medir cuán mal predice la red — la función de pérdida.