la última clase estuvimos hablando acerca de como construir un programa que pueda jugar y hablamos de la investigación básica; hoy vamos a hablar del programa AlphaGo y sus derivados como el AlphaGo Master y AlphaGo 0; que se volvieron los campeones del mundo de Go; si se acuerdan de la última vez, había 2 dificultades principales para poder construir un programa que juegue al Go; una de ellas en ajedrez podemos construir una función de valor a mano, diciéndole que use inteligencia humana que le diga cual es la mejor posición en el tablero; pero en el Go, encontramos que es muy difícil poder hacer eso y los seres humanos en verdad luchan para escribir programas que les habiliten a encodificar ese conocimiento humano acerca de qué significa ser un buen jugador de Go; el 2do problema es que en el ajedrez tenemos 20 movidas que se pueden hacer en cualquier momento, mientras que en el Go hay como 300 movidas que se pueden hacer en cualquier momento y en particular, pensar hacia adelante 3 movidas para cada jugador al comienzo del juego de Go implican 58 trillones de posiciones, lo cual es demasiado! entonces lo que vamos a hacer ahora es hablar acerca de como podemos hacer para evitar ese problema; lo 1ro es darnos cuenta que hay 2 problemas principales de aprendizaje supervisado, ya hablamos antes que podemos tomar cada posición del tablero de Go y representarlas como una lista de números donde cada posición es o bien vacía, blanca o negra y el 1er problema de aprendizaje es, podemos tomar esta posición en el tablero y podemos mapearla a un valor? esta posición de acá arriba, este es para 2 puntos de negras, está bien o la posición de abajo es mala para las negras, entonces es -1 lo que podemos hacer ahora es en vez de tener una función de valores humanos codificada, esta piedra vale 6 puntos por si misma y esta piedra vale 2 y entonces nunca va a funcionar, en vez de eso, vamos a aprender utilizando un algoritmo de aprendizaje de máquina el 2do punto es también que debemos darnos cuenta de qué jugada tenemos que mirar, porque podemos decir que mirar a cada jugada posible es imposible; la 2da cosa es que también es verdad que una vez que tenemos el estado del tablero, esta lista de números, también vamos a querer aprender cuales son las jugadas posibles que se pueden realizar; cual de las 5 posiciones es en la que tengo que pensar para poder podar el árbol y así no perderme por las ramas otra vez hay 2 problemas importantes de aprendizaje de máquina, el 1ro es tomar la posición en el tablero y mapearla a un valor y la 2da es tomar la posición en el tablero y mapearla a todo lo que deberíamos tener pensado la forma en que AlphaGo funciona es tratar este problema del aprendizaje de máquina y bajando una lista de todas las jugadas profesionales de Go de los últimos 30 años y otro montón de juegos que fueron jugados por amateurs de muy buen nivel y a partir de ahí tomarlo como un problema de aprendizaje supervisado; es decir aprender que posición en el tablero es la más probable para ganar y desde esta posición en el tablero cual jugada es la que haría un jugador con mucha experiencia, así la máquina aprende estas 2 cosas la 2da cosa que hizo fue es aumentar este valor de la función con algo que se llama búsqueda de árbol de Monte Carlo; si lo recuerdan de antes, la idea de la búsqueda en un árbol es la de poder adelantarse a un par de jugadas, pero ahora lo que hace es en algún punto de la parte de abajo del árbol, vamos a simular un montón de juegos al azar para poder imaginar cual es la probabilidad de ganar, dada esta posición en el tablero y entonces vamos a combinar la función de valor del aprendizaje de máquina más este algoritmo especial, el de la búsqueda del árbol de Monte Carlo, para que nos de una probabilidad total de ganar y así poder pensar en un respaldo la 2da cosa que vamos a hacer es que le vamos a permitir a la máquina que juegue contra sí misma durante mucho tiempo y en este proceso, denominado aprendizaje por refuerzo; tenemos a la computadora jugando 1 millón de juegos contra sí misma y actualizando en la forma en que todas estas probabilidades se pueden volver jugadas o estas probabilidades se pueden volver posiciones ganadoras y cuando la máquina juega contra sí misma muchas veces comenzando con el conocimiento humano, pero se actualiza a sí misma jugando y termina con un conocimiento similar al humano y al conocimiento de la compuradora y de hecho este procedimiento fue en ese juego de 4 a 1 que se jugó en 2016 hay 2 críticas importantes del programa original AlphaGo; 1 fue que era necesario contar con una base de conocimiento humana había que aprender de los jugadores profesionales de Go y mucha gente se preguntó si esto quería decir que estas técnicas solamente funcionan cuando tenemos sistemas expertos disponibles; hay muchos dominios que nos preocupan y a los que los humanos les dedican su vida, respondiendo a las preguntas específicas que ellos realizan; la 2da cosa de la que no hablé pero que es mi mayor preocupación con el algoritmo original de AlphaGo, es que tiene estas características de código escrito a mano, que son muy particulares del juego Go,pero que hacen muy difícil de comprenderlo y estos conocimientos que son específicos de un dominio que se usan para resolver problemas que son difíciles en el Go mi preocupación es que, es este mismo problema el que existe en el mundo real pero en el mundo real no sabemos como codificarlos en 2017 se lanzó el código de AlphaGo 0 que trata sobre estas críticas, en vez de empezar con la base de datos de conocimiento humano para correr las cosas del aprendizaje de máquina, sólo usaron el procedimiento de refuerzo, comenzaron con este terrible programa plano de Go y lo dejaron jugando contra sí mismo muchas veces y simplemente usando el aprendizaje por refuerzo en una forma muy inteligente que era nueva, terminaron por construir este programa y este programa nuevo de AlphaGo 0, donde 0 significa que tiene 0 conocimiento pudo ganarle al programa original de AlphaGo por 100 a 0 en 100 juegos y la 2da edición el AlphaGo Master fue derrotada 89 a 11; entonces para resumir toda esta sección del Go podemos ver al Go como un caso de tareas para el aprendizaje de máquina y nos gusta porque tiene estas restricciones sobre las movidas y porque sabemos que significa ganar y las computadoras durante mucho tiempo fueron muy malas haciendo eso y se sentía como si tuvieran estas propiedades que se necesitaban para poder construir un sistema inteligente, esto es no necesitamos buscar en todas las cosas que se pueden hacer, sino focalizarse en un par de cosas que parecen prometedoras y entonces aún cuando no podamos leer todo lo que va a suceder, tener algún sentido de que tipo de características son buenas y que tipo de características son malas y vimos que fuimos desde el 2015, perder con oponentes humanos aún cuando se pudieran hacer 5 jugadas al comienzo del juego para que de repente la máquina sea mejor que el mejor de los humanos y todo en el transcurso de un par de meses y todo esto fue hecho por el uso inteligente de poder transformar este problema en un problema de aprendizaje de máquina y tomando ese problema de aprendizaje de máquina y corriendo este algoritmo de aprendizaje por reforzamiento y al final pudimos construir el AlphaGo 0 que no usa ningún conocimiento humano