Una red neuronal
aprende.
Un laboratorio para mirar el aprendizaje desde adentro: datos, pesos, error, backpropagation y experimentos reproducibles.
01 · ¿Qué es XOR?
XOR da 1 si las entradas son diferentes y 0 si son iguales.
0 XOR 00 XOR 11 XOR 01 XOR 102 · ¿Por qué una neurona no alcanza?
Una neurona simple combina entradas con pesos y puede separar ciertos patrones con una línea. XOR no puede resolverse así. Necesitamos varias neuronas que trabajen juntas.
Entradas → pesos + bias → activación → salida.
Varias neuronas detectan partes del problema.
Las señales se combinan para producir una salida.
Los pesos se ajustan para reducir el error.
03 · Nuestra red
2 entradas → 4 neuronas ocultas → 1 salida. Los pesos comienzan al azar.
La red todavía no modificó sus pesos.
04 · ¿Qué está procesando?
Ahora cada etapa se muestra mientras el entrenamiento real ocurre en el servidor.
05 · Resultados: ¿aprendió o no?
Una salida cercana a 0 significa “diferentes” no; en XOR significa que la red cree que las entradas son iguales. Una salida cercana a 1 significa que cree que son diferentes. Usamos 0.5 como frontera para convertir el número en una respuesta 0/1.
1. ¿Las cuatro predicciones están del lado correcto de 0.5?
2. ¿El error final es pequeño?
3. ¿La curva de error bajó mientras entrenaba?
06 · Cambiá una variable
El primer entrenamiento queda guardado como A. Cuando termine, el botón se habilita otra vez: cambiá un parámetro, por ejemplo de 4 a 6 neuronas, y tocá Crear experimento B. Mientras entrena B, el botón queda deshabilitado; al terminar vuelve a habilitarse y aparece la comparación A vs. B.
Primer entrenamiento.
Segundo entrenamiento.
07 · De cero: ¿qué hace una neurona?
Antes de mirar código complejo, pensemos en una neurona como una pequeña calculadora. Recibe entradas, las multiplica por pesos, suma un bias y pasa el resultado por una función de activación.
entrada → peso → suma → activación → salida
Los pesos dicen cuánto influye cada entrada. El bias permite desplazar la decisión.
z = x₁·w₁ + x₂·w₂ + b y = sigmoid(z)
Primero calculamos z. Después sigmoid transforma z en un número entre 0 y 1.
def neurona(x1, x2, w1, w2, b):
z = x1*w1 + x2*w2 + b
return sigmoid(z)Esto ya es una neurona real, escrita de forma sencilla.
+ Ver más código: la función sigmoid
def sigmoid(x):
return 1 / (1 + exp(-x))Si z es muy negativo, la salida se acerca a 0. Si es muy positivo, se acerca a 1.
08 · ¿Cómo funciona una red neuronal?
Una red conecta muchas neuronas. En nuestro caso, las dos entradas pasan por una capa oculta y después llegan a la salida.
Recibimos x₁ y x₂. En XOR son 0 o 1.
La información avanza por la red y produce una predicción.
Comparamos la predicción con la respuesta correcta.
Usamos el error para modificar los pesos.
+ Ver el código del forward
h = []
for j in range(hidden):
z = W1[j][0]*x1 + W1[j][1]*x2 + b1[j]
h.append(sigmoid(z))
z_out = sum(W2[j]*h[j] for j in range(hidden)) + b2
y = sigmoid(z_out)La capa oculta calcula sus activaciones h₁, h₂, h₃... y la salida combina esas activaciones.
09 · ¿Cómo aprende? Forward → error → backpropagation
Esta es la parte fundamental. La red no “sabe” XOR al principio. Comienza con pesos que no son buenos y aprende repitiendo el proceso.
Hace una predicción.
Mide cuánto se equivocó.
Calcula cómo influyó cada peso.
Cambia los pesos.
Vuelve a intentarlo.
¿Qué es backpropagation?
Backpropagation significa propagar el error hacia atrás. Si la salida fue incorrecta, calculamos qué pesos contribuyeron a ese error y en qué dirección conviene modificarlos.
Una forma simplificada de verlo es:
nuevo_peso = peso - aprendizaje × gradiente
El gradiente indica la dirección del cambio. La velocidad de aprendizaje indica cuánto nos movemos en esa dirección.
+ Ver más código: actualización de pesos
go = 2 * (salida - esperada) * salida * (1 - salida)
for j in range(hidden):
W2[j] -= learning_rate * go * h[j]
b2 -= learning_rate * goEsta versión corresponde al gradiente de la función de error cuadrático usada por este laboratorio.
10 · ¿Qué significa una época?
Una época es una vuelta completa por los ejemplos de entrenamiento. En XOR tenemos cuatro ejemplos: 00, 01, 10 y 11.
La red todavía puede estar aprendiendo y cometer errores.
Tiene más oportunidades de ajustar sus pesos.
Más entrenamiento no siempre significa mejor aprendizaje.
+ Ver el bucle de entrenamiento completo
for epoch in range(epochs):
for x, esperado in datos:
salida = forward(x)
error = salida - esperado
backpropagate(error)
update_weights()El laboratorio ejecuta esta idea miles de veces. La curva de error permite observar si el aprendizaje está funcionando.
11 · Tu desafío: experimentar
Primero ejecutá A. Después cambiá una sola variable: velocidad de aprendizaje, cantidad de neuronas o épocas. Ejecutá B y compará. Preguntate: ¿qué cambió?, ¿por qué?, ¿mejoró o empeoró?
12 · Mapa mental de una red neuronal
↓
ENTRADAS (x₁, x₂)
↓
PESOS + BIAS
↓
CAPA OCULTA
↓
ACTIVACIÓN
↓
SALIDA / PREDICCIÓN
↓
COMPARAR CON LA RESPUESTA
↓
ERROR
↓
BACKPROPAGATION
↓
AJUSTAR PESOS
↓
REPETIR
Ese ciclo es la idea central detrás del entrenamiento de muchas redes neuronales.
13 · Conclusión
Ahora el laboratorio te deja hacer algo más importante que leer teoría: comprobarlo.