Una neurona sola es débil. La magia aparece cuando pones varias en paralelo. Y al hacerlo, la suma ponderada se convierte en una multiplicación de matrices — la misma que viste en el Transformer.
Una capa es simplemente un grupo de neuronas en paralelo. Todas reciben las mismas entradas, pero cada una tiene sus propios pesos y bias, así que cada una calcula algo distinto.
Nuestra red XOR tiene una capa oculta de 2 neuronas: h₁ (la de la
lección 1) y una segunda, h₂. Ambas ven la entrada (x₁, x₂):
Neurona h₁: w = [0.20, 0.40] b = -0.10 Neurona h₂: w = [-0.30, 0.10] b = 0.20
Visto como un grafo: cada entrada se conecta con cada neurona, y cada conexión tiene su propio peso. Por eso hay 4 conexiones (2 entradas × 2 neuronas):
Fíjate: x₁ y x₂ llegan a ambas neuronas, pero por caminos
con pesos distintos. Esa red de conexiones con pesos es, literalmente, lo que guarda una capa.
Cada neurona hace su propia suma ponderada (lección 1):
Neurona h₁ (pesos [0.20, 0.40], bias -0.10): x₁ · w : 1 · 0.20 = 0.20 x₂ · w : 0 · 0.40 = 0.00 sumo: 0.20 + 0.00 = 0.20 + bias: 0.20 + (-0.10) = 0.10 Neurona h₂ (pesos [-0.30, 0.10], bias 0.20): x₁ · w : 1 · -0.30 = -0.30 x₂ · w : 0 · 0.10 = 0.00 sumo: -0.30 + 0.00 = -0.30 + bias: -0.30 + (0.20) = -0.10
Juntando las dos salidas en un vector: z = [0.10, −0.10]. ¿Te suena? Es justo lo que anticipamos.
En vez de calcular h₁ y h₂ por separado, podemos apilar sus pesos en una
matriz W (una columna por neurona) y hacerlo todo de un golpe:
| x = [x₁, x₂] | × | W =
|
+ b = [-0.10, 0.20] |
columna 1 = pesos de h₁ | columna 2 = pesos de h₂
z = [1, 0] · W + b z₁ = (1·0.20) + (0·0.40) + (-0.10) = 0.10 ← h₁ z₂ = (1·-0.30) + (0·0.10) + (0.20) = -0.10 ← h₂ z = [0.10, -0.10]
x @ W que viste en Q, K, V del Transformer.
Tras la suma matricial aplicamos la activación a cada componente del vector (lección 2):
σ(z) = 1 / (1 + e^(-z)). La aplicamos a cada componente: Componente 1, z = 0.10: -z = -0.10 e^(-z) = 0.904837 1 + e^(-z) = 1.904837 1 / (...) = 0.524979 Componente 2, z = -0.10: -z = 0.10 e^(-z) = 1.105171 1 + e^(-z) = 2.105171 1 / (...) = 0.475021 a = [0.524979, 0.475021]
Ese vector a es la salida completa de la capa oculta para la entrada (1, 0).
Será la entrada de la capa de salida, que arma la predicción final.
El mismo cálculo, ahora como grafo de flujo con los valores reales corriendo por las conexiones:
Sigue un número: x₁=1 entra a h₁ multiplicado por 0.20,
x₂=0 entra por 0.40 (pero aporta 0). Sumado al bias da z=0.10,
y la sigmoid lo convierte en a₁=0.5250. Lo mismo, en paralelo, para h₂.
entrada → × W → + b → activación → salida
| Pieza | Forma en nuestra capa oculta |
|---|---|
| Entrada x | vector de 2 (x₁, x₂) |
| Matriz W | 2 × 2 (2 entradas → 2 neuronas) |
| Bias b | vector de 2 (uno por neurona) |
| Salida a | vector de 2 (a₁, a₂) |
activación(x · W + b). Con (1,0) la capa oculta
de XOR devuelve [0.5250, 0.4750]. En la lección 4 conectamos esta capa con la de
salida y hacemos el forward pass completo de la red.