la última vez, hablamos de como representar un tablero de Go como una lista de números que representan las posiciones del tablero y traduciendo eso a en un problema de aprendizaje supervisado planteando que la entrada es esta lista de números y la salida es la siguiente jugada que queremos realizar hoy vamos a hablar acerca de como tomar esa intuición y transformala en un sistema general para un buen juego; la 1ra cosa que debemos notar es que en un juego de tablero no hay solamente 1 problema de aprendizaje supervisado, ok? no es como la clasificación de imágenes donde hay una sola respuesta para esa imagen, cuando jugamos a un juego de tablero hay muchas movidas para realizar, es como una serie conectada de problemas de aprendizaje supervisado; la 1ra cosa en la que tenemos que pensar para los juegos de tablero es si podemos explotar esa propiedad una idea es acerca de la noción que se llama árbol de búsqueda y es algo que uno hace si quiere jugar al juego, lo cual está ok; entonces voy a ir hacia la izquierda y entonces mi oponente va a ir hacia la izquierda y luego voy a la derecha y entonces gano, genial; pero esperá un momento, si mi oponente va hacia la derecha, de repente todo se vuelve malo para mi, así que esperemos; entonces puede que no tenga que ir hacia la izquierda, capaz que tenga que ir hacia la derecha primero y esa es la idea, la de pensar en un par de jugadas hacia adelante viendo si esa posición es buena o mala para mi y luego trabajando de nuevo para darnos cuenta si eso es algo que realmente queremos hacer y esta es la noción de árbol de búsqueda sobre la que vamos a construir si estamos haciendo algo como el ta-te-ti podemos en verdad escribir una lista de, ok me voy a mover acá y luego, si mi oponente va para allá, entonces me voy a mover acá y si va para allá, me voy a mover para acá y se puede escribir un programa de computadora que sea una serie de comandos "if", entonces si hago esto y ellos hacen aquello entonces yo hago esto y es un hecho, si recuerdan de lo que vimos hace 2 clases como era que funcionaba el programa original de ta-te-ti, lo cual fue un gran avance para 1952, pero no es muy interesante hoy en día, debido a que todo lo que hicimos es escribir esta lista de comandos "if" que le dicen lo que tiene que hacer el problema es que esto no funciona para juegos más grandes como el ajedrez y el go el ta-te-ti tiene alrededor de 6000 posiciones en el tablero mientras que el ajedrez tiene 10^45 y el go tiene 10^171 y si tenemos que escribir 6000 comandos de "if", eso no es tan malo, pero si tenemos que escribir los suficientes comandos "if" para cubrir todos los átomos que hay en el universo y encima más que eso, entonces se vuelve físicamente imposible de hacer, por lo que no podemos codificar un programa que pueda salir campeón de Go de la misma forma en que lo hacemos con un programa de ta-te-ti que pueda salir campeón hay una nota divertida, se escribe con tantos lugares para los decimales para el Go, debido a que de hecho sabemos la cantidad exacta de posiciones legales en el tablero de Go; un valor que se obtuvo en 2016 entonces si no podemos escribir esta larga serie de comandos y el árbol es demasiado grande para recorrerlo todo como para ganar o perder, de qué forma podemos en verdad construir un programa una forma de hacerlo es la forma en que Deep Blue trabaja, que es usando la inteligencia humana para codificar algo que se llama una función de valor esto es, todo lo que podemos decir es: está bueno tener a mi reina, mi reina vale muchos puntos, si mi oponente tiene su propia reina, entonces vale la misma cantidad de puntos, pero si pierde su reina eso implica muchos puntos para mi para hacerlo más concreto lo que podemos hacer es que cada pieza en el tablero vale una cantidad de puntos y una posición es buena si obtengo más puntos que los que obtiene mi oponente y por último podemos agregar algo como el jaque mate si puedo ganar, entonces vale 200 puntos, lo que implica incentivar aquellas posiciones en las que se puede ganar al comienzo del juego, por ejemplo, tenemos la misma cantidad de material y eso implica una posición pareja en 0, entonces cuando construí este gráfico y cuando intenté jugar con un programa de ajedrez muy bueno y luego de un par de jugadas, terminé perdiendo y mi posición en el tablero era -17, del valor del material, la posición era realmente mala para mi y luego golpeé el botón y usando el material que tenía, pude vencer al programa de ajedrez y pude obtener una posición de jaque mate que valía 200 puntos esto les da una idea de como podemos tomar una posición del ajedrez, mapearla a un valor, que no es lo mismo que ganar o perder, pero es algo que nos dice que esta clase de posición es buena o que esta clase de posición es mala y que nos deja esto? no tenemos que pensar bajando por todo el árbol hasta que el juego se define en una pérdida o en una ganancia; en vez de eso, podemos bajar hasta abajo de todo en el árbol y pensar en algunas movidas hacia adelante y podemos ver ahora, que si hago esto, ellos hacen lo otro y si puedo pensar en un par de jugadas hacia adelante, eso me lleva a una buena posición y de hecho esta es la forma en que funciona deep blue, usa una función de valor codificada por un humano con toda su inteligencia y luego hace lo que las computadoras hacen mejor que es fijarse en millones y millones de posiciones, para ver que rama del árbol es la mejor para la computadora y ese estilo de programas fue suficiente para ganarle a Gary Kasparov y que se transforme en la nueva campeona de ajedrez Los humanos intentaron con la misma estrategia para el Go, entonces lo que vamos a hacer es tomar esa posición en el tablero, evaluamos cuales de estas figuras son buenas o malas y convertimos eso en un número nuevamente, por ejemplo esta es una posición a+4 o esta es una posición a-6 desgraciadamente esta estrategia no funcionó; uno de los problemas es que uno puede imaginar que cada piedra del Go no vale mucho por sí misma, podría incluso valer puntos negativos si es que está por ser capturada; el poder de las piedras del Go viene de las formas, de las que hablamos en la última clase y estas formas son buenas o son malas, pero son buenas o malas en relación a las formas del oponente y los jugadores profesionales de Go piensan en esto y realizan estas evaluaciones pero que son muy difíciles para codificar en un conjunto de reglas, en un conjunto de comandos "if" para que pueda ser usado por un programa de computadora, en particular podemos ver en esta diapositiva un ejemplo real y muy extremo de esto, donde el Go muestra lo que se llama efectos no locales, podemos ver en la parte superior izquierda que es la misma forma exacta con las blancas haciendo exactamente la misma movida pero por razones que son complicadas de explicar ahora, en la posición del tablero de la izquierda, esta es una jugada muy mala para hacer, pero si las blancas tuvieran una piedra más en la esquina opuesta del tablero, de repente esta jugada se transforma en una muy buena y pueden ver que esta clase de posiciones hacen que sea muy difícil de codificar como una función de valor el 2do gran problema con el Go es que el Go tiene un espacio de acción que es mucho más grande que en el ajedrez, es decir cuantas jugadas se pueden hacer en un momento determinado en ajedrez la 1ra jugada que se puede hacer contiene 20 cosas diferentes, todos los 8 peones pueden ir hacia adelante 1 o 2 casilleros y cada caballo puede ir a 1 o 2 lugares, mientras que en el Go, en la 1ra jugada hay 361 jugadas diferentes que se pueden hacer y entonces si están pensando en algunas jugadas adelante, este efecto se complementa y hace verdaderas diferencias; en el ajedrez para que cada persona pueda hacer 3 jugadas, eso implica 9 millones de posiciones, esas son un montón de posiciones pero no tantas para una computadora, en cambio en el Go esas 3 jugadas implican 58 trillones de jugadas es 1 millón de veces más que en el ajedrez entonces el árbol de Go se expande mucho lo que hace muy difícil para una computadora poder pensar en esas jugadas hacia adelante la próxima vez vamos a hablar de estos problemas del Go, de lo difícil que es poder tener una función de valor y de cuan grande es en verdad el árbol y vamos a hablar de como podemos usar el aprendizaje de máquina para construir un jugador que pueda ser campeón de Go