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