Tecnología

Machine Learning — Explicado con Super Mario Bros.



Machine Learning — Explicado con Super Mario Bros. - Tecnología

Antes las máquinas nos ayudaban con tareas que eran imposibles para un humano con sus manos desnudas, pero han llegado a un punto en el que incluso han vuelto triviales muchos trabajos sencillos.

Sin embargo, el cerebro humano todavía tiene una destreza mental que la programación de una máquina no es capaz de repetir y las misma personas no saben duplicar. A veces es necesario hacer ciertas acciones sencillas, como reconocer contenido inadecuado, pero a una escala tal que requeriría una oficina completa dedicada a ello.

La solución ha sido lo que hoy conocemos como Machine Learning, un método de programación donde la máquina se enseña a sí misma a hacer su deber. De esta manera se han creado programas con la habilidad de identificar objetos, leer oraciones e incluso transcribir audio.

¿Cómo funciona el Machine Learning?

Los mismos creadores de estos software no están seguros de qué pasa tras bambalinas. Estamos hablando de líneas de código que, de forma casi autodidacta, aprendieron a hacer acciones muy complejas, pero podemos hacernos una idea de cómo funciona con algo bastante sencillo. Digamos que queremos crear un programa que pueda jugar Super Mario Bros. para el NES. Sería sencillo programar paso a paso qué botones debe presionar para llegar de punto A a punto B, pero queremos que aprenda hacerlo por su cuenta, solo sabiendo que puede caminar, correr y saltar.

Primero le damos a la máquina un método de entrada de datos, la forma en la que la máquina recibirá la información necesaria para su tarea. En este caso, el ordenador necesitará como mínimo percibir cambios en la pantalla. Si esta no cambia, significa que no hay avances. También le daremos una forma de medir el tiempo transcurrido desde que empezó a jugar.

Luego le asignamos una forma de salida de datos, la manera con la que la máquina se comunicará con su tarea. En el caso de Super Mario Bros., ese serían los botones del control: Los direccionales, A y B. Pausa y Select sería un estorbo en la operación y por ende son ignorados.

Por último, se le instruirá a la máquina que, basado en las herramientas provistas, haga el mejor resultado posible basado en un margen de error determinado por la información de entrada. Para interés de ser campeona de Super Mario Bros., la computadora necesita obtener el mayor número de cambios mayores en la pantalla en el menor tiempo posible.

Y con todas las instrucciones listas, ¡es hora de jugar! …Y con jugar quiero decir presionar botones como lo haría un nené recien nacido con el mando en la boca.

Las primeras partidas serán mucho menos que estelares. El programa hará tonterías como saltar en el lugar una y otra vez, correr en la dirección equivocada, ir de adelante para atrás, e incluso hacer nada. Jugará hasta que haya recopilado un número importante de intentos. Al menos unos 100.

A estos intentos se le conoce como Generación, la primera línea de programas escritos por la computadora con el objetivo de completar el juego. De esta generación es elegida la mejor línea de código, la que mejores resultados haya dado, y se descartan las demás. Como la máquina aún no está muy segura de qué está haciendo, lo más seguro es que ese intento sea algo similar a dar toquecitos hacia la derecha una y otra vez hasta chocar con el primer enemigo.

Para la segunda generación la computadora hará aún más intentos, esta vez tomando como referencia el programa ganador de generación uno. Es muy probable que el software dará una repetición diferente de toquecitos a la derecha, se intercalará entre dar toquecitos a la izquierda y la derecha, dará toquecitos al botón de correr, etc. De esa, se toma el intento más exitoso, que es probable sea uno que haga cambios más rápidos antes de chocar con su primer obstáculo mayor.

Estos pasos se repiten cuantas veces sean necesarias, siempre intentando 100 veces antes de tomar como referencia el mejor intento y adaptarlo a la generación siguiente. Así hasta que la máquina tiene la destreza como para volar por todo el mundo 1-1 como un campeón.

…Y luego llegamos al mundo 1-2 y empezamos el proceso otra vez desde el principio.

Claro, la máquina toma lo que ha aprendido del nivel 1-1 y lo usa acá, pero repetir al pie de la letra la línea de comandos que usó anteriormente no le hará nada bien. El primer enemigo está mucho más cerca y encima hay tres de ellos. Pero es referencia suficiente para aprender más rápido que hacer en un nuevo escenario.

Y así hará hasta llegar al final del juego… O al menos así sería si no fuera porque el mundo final tiene un laberinto de tuberías. Laberinto que nuestro método de enseñanza no toma en cuenta y lleva a un trágico fin a nuestro programa que mide el éxito del software basado en avance. El programador se vería obligado a crear un nuevo método de entrada que determine el progreso de la máquina y le permita terminar el juego. Pero ya a este punto, está más que claro cómo la máquina aprendió, desde cero, cómo jugar Super Mario Bros.

¿Es posible hacer esto para identificar cosas como fotos? ¡Claro! Imaginemos que queremos hacer una aplicación capaz de determinar si en una foto hay una gorra de Super Mario. Como método de entrada tenemos las imágenes que queremos comparar, millones de fotos que pueden o no contener un gorro de Mario. Cada foto tiene además anexada información. ¿La gorra está en la foto? ¿En qué parte de la foto? ¿Qué espacio ocupa en la foto?

El programa escribirá varios software al azar que intentarán determinar si las imágenes tienen o no un gorro basado en los datos administrados. El programa más exitoso, que probablemente tendrá un 5% de éxito siendo optimistas, será elegido entre sus hermanos como modelos de la segunda generación, y se repetirá este proceso cuantas generaciones sea necesario hasta dar con un software que pueda con un 99.999% de precisión determinar si una foto provista realmente contiene el famoso sombrero rojo.

Lo curioso de este método de escritura de algoritmos es que funciona tal cual lo hace el aprendizaje humano. La diferencia es que en este caso se considera más como una forma de evolución, asumiendo que cada generación cuenta con un ganador y otros 99 perdedores que fueron echados al caño… Por quien sabe cuantas generaciones.

¿Qué te ha parecido este avance tecnológico? ¿Crees que está bien o es posible que lleve a complicaciones? Déjame un mensaje con lo que piensas. ¡Me encantaría conocer tu opinión!

¿Te ha gustado el artículo? ¡Valóralo!

0.00 - 0 votos
Cuanto más alta sea la valoración más visible será el artículo en portada.
¡Compártelo en las redes sociales!

Acerca del autor

Gahbriel

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Únete a la comunidad de NoCreasNada

¿Te gustaría compartir tus inquietudes y ganar seguidores por todo el mundo?

¿Eres una persona inquieta y quieres descubrir a más gente como tú? 

Únete a NoCreasNada.

Además, te pagaremos por las visitas que recibas.

Más Información