
TensorFlow Playground: la red grande, para completar lo que empezamos con Rosenblatt y Haibt
En clase habéis construido dos redes neuronales con vuestras propias manos (bueno, con vuestro propio código): Rosenblatt, una sola neurona que aprendía AND y OR pero no podía con XOR, y Haibt, una red pequeña con una capa oculta que sí resolvía XOR. En las dos veíais, número a número, cómo se actualizaban los pesos.
Ahora toca ver la misma idea, pero a lo grande: TensorFlow Playground, una herramienta gratuita de Google donde podéis construir redes con hasta 6 capas ocultas y varias neuronas por capa, cambiar cómo aprenden y ver en directo qué pasa. No hay que instalar nada, funciona en el navegador: playground.tensorflow.org.
No vais a ver el código por dentro como en Haibt — aquí la caja es más grande y no se puede abrir tan fácilmente. Pero vais a ver algo que con Haibt no se podía ver bien: cómo cambia el aprendizaje según el tamaño y la configuración de la red, con una red de verdad, del tipo que se usa fuera de clase.

Qué significa cada control
Learning rate (tasa de aprendizaje). Lo mismo que en Rosenblatt y Haibt: cuánto se mueven los pesos en cada paso. Muy alta, la red se vuelve inestable y no converge. Muy baja, tarda una eternidad.
Activation (función de activación). En Haibt usasteis siempre sigmoide. Aquí podéis elegir entre Tanh, ReLU, Sigmoid y Linear. Cambia cómo responde cada neurona — con Linear, por ejemplo, la red pierde la capacidad de aprender patrones curvos, por muchas capas que le pongáis.
Regularization (regularización) y Regularization rate (tasa de regularización). Un mecanismo para evitar que la red memorice los datos de entrenamiento en vez de aprender el patrón general (sobreajuste). Con “None” (ninguna) está desactivado; con L1 o L2, la red se ve obligada a mantener los pesos pequeños. Para esta primera exploración lo dejaremos en “None” — es un tema para otro día.
Problem type (tipo de problema). Classification (clasificación: separar dos grupos, naranja y azul) o Regression (regresión). Nos quedamos en clasificación, que es lo que habéis visto hasta ahora.
Which dataset (qué conjunto de datos). Cuatro patrones de puntos para aprender a separar: Circle (círculo), Exclusive or (un patrón en forma de X que es, literalmente, XOR, vuestro viejo conocido), Gaussian (una nube de puntos mezclados) y Spiral (espiral). La espiral es el más difícil de los cuatro.
Ratio of training to test data (proporción de datos de entrenamiento y de prueba), Noise level (nivel de ruido) y Batch size (tamaño de lote). Cuántos datos se usan para entrenar frente a comprobar, cuánto “ruido” (desorden) tienen los datos, y cuántos ejemplos se procesan antes de cada actualización de pesos. Los dejaremos en sus valores por defecto — no son el centro de esta actividad.
# of hidden layers (número de capas ocultas), y las neuronas de cada capa. Con los botones + y − de la parte de arriba de cada columna, añadís o quitáis capas ocultas (hasta 6) y neuronas dentro de cada capa (hasta 8). Esto es justo lo que en Haibt estaba fijado a “una capa, dos neuronas” — aquí lo controláis vosotros.
Play (reproducir/entrenar), Step (paso) y Reset (reiniciar). Play entrena de forma continua. Step avanza un solo paso de entrenamiento cada vez (como el “paso a paso” de Rosenblatt). Reset reinicia los pesos a valores al azar.
Lo que se ve en pantalla. El fondo coloreado es lo que la red predice en cada zona: azul y naranja son las dos clases, y cuanto más intenso el color, más segura está la red. Las líneas que conectan las neuronas también son azules o naranjas: azul es un peso positivo, naranja uno negativo, y el grosor indica lo grande que es ese peso — es la versión visual de la tabla de pesos que veíais en Haibt, solo que aquí hay demasiados pesos para ponerlos en una tabla. Arriba a la derecha, dos números: Training loss (pérdida de entrenamiento) y Test loss (pérdida de prueba) — cuanto más bajos, mejor está aprendiendo la red.
Paso a paso: lo que tenéis que hacer
Para cada paso, dejad que entrene unas cuantas épocas (o pulsad Play y esperad a que el número de época se estabilice), fijaos en el Training loss y en el dibujo del fondo, y haced una captura de pantalla antes de pasar al siguiente paso.
Paso 1 — Repetid lo que ya sabéis. Configurad: conjunto de datos (dataset) = Exclusive or (XOR), 1 capa oculta con 2 neuronas, activación = Sigmoid. Le suena, ¿verdad? Es la misma red que construisteis en Haibt. Entrenad y comprobad que converge (pérdida de entrenamiento cerca de 0). Captura de pantalla.
Paso 2 — Un patrón más difícil, con la misma red pequeña. Cambiad el conjunto de datos a Spiral (espiral), sin tocar nada más (seguís con 1 capa, 2 neuronas, Sigmoid). Entrenad. ¿Converge igual de bien que con XOR? Captura de pantalla y anotad qué pérdida de entrenamiento alcanza.
Paso 3 — Dadle más capacidad. Con el conjunto de datos todavía en Spiral, id añadiendo neuronas a la capa oculta (hasta 6 u 8) y, si hace falta, una segunda capa oculta. Entrenad después de cada cambio. Anotad a partir de qué configuración la red empieza a separar bien la espiral. Captura de pantalla de la configuración que mejor funcione.
Paso 4 — La función de activación importa. Volved al conjunto de datos XOR con 1 capa oculta y 2 neuronas (como en el paso 1), pero cambiad la activación a Linear. Entrenad. ¿Converge? Anotad por qué creéis que pasa esto — pista: pensad en lo que aprendisteis sobre separabilidad lineal con Rosenblatt.
Paso 5 — La tasa de aprendizaje, al límite. Con la configuración del paso 1 (XOR, 1 capa, 2 neuronas, Sigmoid), probad con tasa de aprendizaje (learning rate) = 3 (muy alta) y luego con tasa de aprendizaje = 0.001 (muy baja). Comparad los dos comportamientos con el que visteis en Haibt cuando la tasa de aprendizaje no era ni muy alta ni muy baja.
Para responder por escrito
- ¿Por qué la misma red (1 capa, 2 neuronas) que resuelve XOR sin problema no consigue separar bien la espiral? ¿Qué tuvisteis que cambiar para que funcionara?
- En el paso 4, la red con activación Linear no aprende XOR por mucho que entrenéis. ¿Qué límite del perceptrón de Rosenblatt os recuerda esto?
- Si tuvierais que explicarle a alguien que no ha visto nada de esto por qué hacen falta capas ocultas, ¿qué le enseñaríais primero: Haibt o TensorFlow Playground? ¿Por qué?




