Chisme 105 del Lince: coge la pelota antes de que caiga

Tutorial paso a paso. Trabajaremos en Machine Learning for Kids (la web) y en el Scratch que se abre desde esa web. Cada paso es pequeño: haz uno, comprueba que funciona y pasa al siguiente.

Sierra Bermeja, al atardecer. El Lince de la Noche está en la ladera con una cesta en la mano y una pelota que bota por la roca. Cada rebote la lanza un poco más lejos. «Tengo que estar donde va a caer», dice. La Gata Montesa, sentada en una piedra, no levanta la vista de su cuaderno: «Antes de correr, piensa. ¿Dónde crees que va a caer?». El Lince mira la pelota, mira la cesta y se queda pensando. «Pues... por ahí». «Eso es una corazonada. Enséñale al ordenador a adivinarlo con ejemplos».

Introducción

En este chisme vamos a entrenar un modelo de inteligencia artificial que predice un número: dónde va a tocar el suelo una pelota que rebota. Después usaremos esa predicción en un juego de Scratch: una cesta que se mueve sola hasta el punto predicho.

Por qué este chisme

En los chismes anteriores la IA decidía a qué clase pertenece algo: una imagen, una frase o un sonido. Aquí la respuesta es un número. Eso cambia la pregunta: ya no basta con decir «esto es luz» o «esto es persiana», hay que decir «caerá en x = 25».

Además, en el chisme 98 calculamos una recta de regresión con una fórmula. Aquí el ordenador no recibe ninguna fórmula: aprende solo a partir de ejemplos. Podremos comparar los dos enfoques.

Cómo funciona

Una pelota empieza en un punto con una velocidad. Esos datos son las entradas:

Lo que queremos saber es la salida: bounce x, la posición horizontal donde la pelota toca el suelo por primera vez.

Para entrenar, Scratch hace rebotar muchas pelotas y guarda, para cada una, las entradas y la salida. Con muchos ejemplos, el modelo busca patrones y predice un valor para una pelota nueva. Ojo: el modelo no sabe física. Solo ha visto ejemplos.

Qué necesitamos

Este tutorial está adaptado de la ficha «Catch the ball» de Machine Learning for Kids (licencia CC BY-NC-SA 4.0). Las capturas y los textos son nuestros; la idea original y el proyecto de Scratch son de ellos.

Construcción

Paso 1. Crea el proyecto

  1. Entra en machinelearningforkids.co.uk e inicia sesión.
  2. Pulsa Añadir un nuevo proyecto.
  3. Pon el nombre Coge la pelota.
  4. En Project Type, elige predicting numbers.
  5. En Storage, elige In your web browser.
  6. Pulsa CREAR.

Ya tienes el proyecto en tu lista. Haz clic en él.

Paso 2. Describe las entradas

Pulsa Entrenar. Después pulsa Add column y crea estas columnas, una a una:

  1. start y
  2. speed x
  3. speed y

Son las tres cosas que sabemos al empezar: desde dónde y con qué velocidad sale la pelota.

Paso 3. Crea la salida

Añade otra columna llamada bounce x. Esta es la que queremos predecir.

Marca la casilla que hay debajo de bounce x. Así la web sabe que esa es la salida. Debe aparecer este texto arriba:

Predicting bounce x from 3 input values

Si aparece from 4 input values, la casilla no está marcada.

Paso 4. Abre la plantilla de Scratch

  1. Vuelve al proyecto (Volver al proyecto) y pulsa Crea.
  2. Elige Scratch 3 y después straight into Scratch.
  3. En Scratch, abre Project templates y elige Catch the ball.
  4. Pulsa la bandera verde. Verás una pelota que sale por la izquierda y rebota.

La pelota empieza siempre en x = -230. Su altura y su velocidad cambian cada vez. Por eso solo usamos esos valores como entradas.

Paso 5. Guarda cada simulación como un ejemplo

En la plantilla, busca el bloque define end simulation que está en el sprite ball. Se ejecuta cuando la pelota termina de rebotar.

Dentro de ese bloque añade un bloque add training data del grupo de Machine Learning for Kids, y rellénalo así:

CampoValor
start yinitial location y
speed xinitial speed x
speed yinitial speed y
is bounce xfirst bounce x

Así, cada vez que la pelota acaba de rebotar, Scratch añade una fila con sus datos a la tabla de ejemplos.

Paso 6. Recoge diez ejemplos

  1. Pulsa la bandera verde.
  2. Deja que la simulación corra hasta que hayan rebotado diez pelotas.
  3. Vuelve a la web, a la pantalla Entrenar, y mira la tabla. Debes ver diez filas.

Diez ejemplos son pocos: el modelo todavía no será bueno. Lo mejoraremos en el paso 8.

Paso 7. Entrena el modelo

  1. Pulsa Aprender & Probar.
  2. Pulsa Train new machine learning model.
  3. Cuando termine, escribe unos valores de prueba en el formulario y pulsa Test.

Verás un número en Prediction: es la posición x donde el modelo cree que caerá la pelota.

Paso 8. Usa la predicción en Scratch

  1. Vuelve a Scratch. En el sprite catcher, busca el bloque when I receive new simulation.
  2. Pon un bloque glide debajo, con 0.3 segundos hacia x.
  3. Dentro de x, pon el bloque predict bounce x from con las entradas initial location y, initial speed x e initial speed y.
  4. Pulsa la bandera verde. La cesta debe moverse hasta el punto predicho.

Si la cesta no se mueve, vuelve al paso 7 y entrena otra vez el modelo: Scratch a veces no lo detecta.

Cómo probarlo

  1. Pulsa la bandera verde diez veces y cuenta cuántas pelotas atrapa la cesta.
  2. Anota también cuánto se aleja la cesta de la pelota cada vez: eso es el error.
  3. Recoge cien ejemplos en vez de diez: deja la simulación corriendo y vuelve a entrenar.
  4. Repite la prueba de diez lanzamientos. ¿Ha mejorado la cesta?

Qué estamos midiendo realmente

El modelo no mide la pelota. Mide los ejemplos que le hemos dado. Por eso:

Para el aula

Retos

  1. Haz que funcione. Consigue que la cesta atrape al menos cinco de diez pelotas.
  2. Cambia el punto de partida. Haz que la pelota salga de una altura aleatoria y vuelve a entrenar.
  3. Cambia el rebote. Haz que la pelota rebote con más o menos fuerza. ¿El modelo lo nota?
  4. Cambia la gravedad. Haz que la pelota caiga más despacio o más deprisa. Añade la gravedad como nueva entrada.
  5. Mide el error. Apunta veinte lanzamientos reales y calcula el error medio con una hoja de cálculo.

Qué hemos aprendido

Un modelo de predicción aprende de ejemplos. Cuantos más ejemplos y más variados sean, mejor predice, pero siempre se equivoca un poco. Antes de confiar en una predicción, hay que medir su error.

Para seguir investigando