Los 3 trucos que hicieron que AlphaGo Zero funcione

Hubo muchos avances en Aprendizaje profundo e Inteligencia artificial en 2017, pero pocos generaron tanta publicidad e interés como AlphaGo Zero de DeepMind. Este programa fue realmente un avance sorprendente: no solo superó a la versión anterior de AlphaGo, el programa que venció al 17 veces campeón mundial Lee Sedol solo un año y medio antes – 100-0, sino que fue entrenado sin datos de humanos reales. juegos. Xavier Amatrain lo llamó "más [significativo] que nada … en los últimos 5 años" en Machine Learning.

Entonces, ¿cómo lo hizo DeepMind? En este ensayo, trataré de dar una idea intuitiva de las técnicas que utilizó AlphaGo Zero, qué las hizo funcionar y cuáles son las implicaciones para futuras investigaciones sobre la IA. Comencemos con el enfoque general que tanto AlphaGo como AlphaGo Zero llevaron a jugar a Go.

Enfoque general de DeepMind

Tanto AlphaGo como AlphaGo Zero evaluaron el tablero Go y eligieron movimientos usando una combinación de dos métodos:

  1. Amaestrado “Búsqueda hacia delante” de búsqueda: mirando hacia adelante varios movimientos por los juegos de simulación, y por lo tanto viendo que es más probable que conduzca a una posición de “bueno” en el futuro movimiento actual.
  2. La evaluación de las posiciones se basa en una " intuición ", de si una posición es "buena" o "mala", es decir, que puede dar lugar a una victoria o una pérdida.

AlphaGo y AlphaGo Zero trabajaron combinando hábilmente estos dos métodos. Veamos cada uno a su vez:

Método Go-Playing # 1: "Lookahead"

Go es un juego lo suficientemente complejo como para que las computadoras no puedan simplemente buscar todos los movimientos posibles usando un enfoque de fuerza bruta para encontrar el mejor (de hecho, ni siquiera pueden acercarse ).

El árbol de posibles posiciones en Go. Fuente

Los mejores programas de Go anteriores a AlphaGo lo superaron al usar " Monte Carlo Tree Search " o MCTS. En un nivel alto, este método implica inicialmente explorar muchos movimientos posibles en el tablero, y luego enfocar esta exploración en el tiempo ya que ciertos movimientos tienen más probabilidades de generar victorias que otros.

Tanto AlphaGo como AlphaGo Zero usan una versión relativamente sencilla de MCTS para su "lookahead", simplemente usando muchas de las mejores prácticas enumeradas en la página de Wikipedia Monte Carlo Tree Search para gestionar adecuadamente la compensación entre explorar nuevas secuencias de movimiento o explorar más profundamente ya -secuencias exploradas (para obtener más información, consulte los detalles en la sección "Buscar" en "Métodos" en el documento AlphaGo original publicado en Nature ).

Sin embargo, MCTS había sido el núcleo de todos los programas Go exitosos antes de AlphaGo, fue la combinación inteligente de DeepMind de esta técnica con una "intuición" basada en redes neuronales que le permitió superar el rendimiento humano.

Método Go-Playing # 2: "Intuición"

La mayor innovación de DeepMind con AlphaGo fue utilizar redes neuronales profundas para comprender el estado del juego, y luego usar esta comprensión para guiar inteligentemente la búsqueda del MCTS. Más específicamente: entrenaron redes que podían mirar

  1. La posición actual de la junta
  2. Qué jugador estaba jugando,
  3. La secuencia de movimientos recientes (necesaria para descartar ciertos movimientos como ilegales)

Dada esta información, las redes neuronales podrían recomendar:

  1. Qué jugada debería jugarse
  2. Si el jugador actual era probable que ganara o no.

¿Cómo entrenó DeepMind a las redes neuronales para hacer esto? Aquí, AlphaGo y AlphaGo Zero utilizaron enfoques muy diferentes; comenzaremos primero con AlphaGo's:

"Intuición" de AlphaGo: red de políticas y red de valores

AlphaGo tenía dos redes neuronales entrenadas por separado.

Las dos redes neuronales en el núcleo de AlphaGo. Fuente

  1. La primera red neuronal (inicializada al azar) fue entrenada para imitar el juego de los expertos humanos al mostrar 30 millones de movimientos de una gran base de datos de juegos reales. Resolver esto fue un problema de reconocimiento de patrones difícil pero directo del tipo en que las redes neuronales profundas se destacan ; y de hecho, una vez entrenado, esta red aprendió a recomendar movimientos similares a los que observó a los expertos humanos jugando en sus juegos.
  2. DeepMind no solo quería que AlphaGo imitara a los jugadores humanos: también querían que ganara. Para aprender a jugar movimientos que con más probabilidad llevarían a ganar en lugar de perder, la red -que había sido entrenada para jugar como un experto humano- jugó contra sí misma. Los movimientos fueron luego muestreados al azar de estos juegos de "autoaprendizaje"; si un movimiento dado sucedió en un juego en el cual el jugador actual terminó ganando, la red se entrenó para ser más probable que jugara movimientos como ese en el futuro, y viceversa.

DeepMind luego combinó estas dos redes neuronales con MCTS, es decir, la "intuición" del programa con su búsqueda de "búsqueda anticipada" de fuerza bruta, de una manera muy inteligente: utilizó la red que había sido entrenada para predecir movimientos para guiar qué ramas del árbol de juego para buscar y utilizó la red que se había entrenado para predecir si un puesto estaba "ganando" para evaluar las posiciones que encontró durante su búsqueda. Esto permitió a AlphaGo buscar inteligentemente las próximas jugadas y finalmente le permitió vencer a Lee Sedol.

Monte Carlo Tree Search en AlphaGo, guiado por redes neuronales. Fuente

AlphaGo Zero, sin embargo, llevó esto a un nivel completamente nuevo.

Los tres trucos que hicieron funcionar AlphaGo Zero

En un nivel alto, AlphaGo Zero funciona de la misma manera que AlphaGo: específicamente, reproduce Go utilizando la búsqueda de búsqueda anticipada basada en MCTS, guiada de forma inteligente por una red neuronal.

Sin embargo, la red neuronal de AlphaGo Zero, su "intuición", se entrenó de forma completamente diferente a la de AlphaGo:

Truco n. ° 1: Cómo entrenar tu AlphaGo Zero, parte 1

Digamos que tienes una red neuronal que está intentando "entender" el juego de Go: es decir, para cada posición de tablero, está utilizando una red neuronal profunda para generar evaluaciones de cuáles son los mejores movimientos. Lo que DeepMind se dio cuenta es que no importa cuán inteligente sea esta red neuronal, ya sea que esté completamente desorientada o sea un maestro Go, sus evaluaciones siempre pueden mejorarse con MCTS .

Fundamentalmente, MCTS realiza el tipo de búsqueda anticipada que imaginamos que haría un maestro humano si se le proporciona el tiempo suficiente: adivina inteligentemente qué variaciones (secuencias de movimientos futuros ) son más prometedoras, simula esas variaciones, evalúa qué tan buenas son en realidad , y actualiza sus evaluaciones de sus mejores movimientos actuales en consecuencia.

Una ilustración de esto está abajo. Supongamos que tenemos una red neuronal que lee el tablero y determina que un movimiento dado resulta en un juego parejo, con una evaluación de 0.0. Luego, la red inteligentemente anticipa algunos movimientos y encuentra una secuencia de movimientos que puede forzarse desde la posición actual que termina dando como resultado una evaluación de 0.5. Luego puede actualizar su evaluación de la posición actual de la junta para reflejar que conduce a una posición más favorable en el futuro.

Cómo MCTS siempre puede mejorar continuamente las evaluaciones de los programas.

Esta búsqueda anticipada, por lo tanto, siempre puede brindarnos datos mejorados sobre cuán buenos son los diversos movimientos en la posición actual que está evaluando la red neuronal. Esto es así ya sea que nuestra red neuronal se esté reproduciendo a nivel amateur o experto: siempre podemos generar mejores evaluaciones al mirar hacia adelante y ver cuáles de sus opciones actuales realmente conducen a mejores posiciones.

Truco # 1 (continuación): Cómo entrenar a tu AlphaGo Zero, Parte 2

Además, al igual que en AlphaGo, también deseamos que nuestra red neuronal sepa qué movimientos conducirán a victorias. Por lo tanto, también como antes, nuestro agente, utilizando sus evaluaciones MCTS-mejoradas y el estado actual de su red neuronal, podría jugar contra sí mismo, ganar algunos y perder otros.

Auto-juego en AlphaGo Zero. Diagrama cortesía de DeepMind .

Esta información, generada puramente mediante búsqueda anticipada y autoaprendizaje, es lo que DeepMind utilizó para entrenar AlphaGo Zero. Más específicamente:

  1. La red neuronal fue entrenada para reproducir movimientos que reflejaban las evaluaciones mejoradas de realizar la búsqueda de "anticipación".
  2. La red neuronal se ajustó de modo que era más probable que jugara movimientos similares a los que llevaron a ganar y menos probable que jugaran movimientos similares a los que llevaron a pérdidas durante los juegos de autoaprendizaje.

Mucho se hizo del hecho de que no se usaron juegos entre humanos para entrenar a AlphaGo Zero, y este primer "truco" fue la razón por la cual: para un estado dado de un agente Go, siempre puede hacerse más inteligente realizando búsquedas basadas en MCTS y usar los resultados de esa anticipación para mejorar el agente. Así es como AlphaGo Zero pudo mejorar continuamente, desde cuando era amateur hasta cuando era mejor que los mejores jugadores humanos.

El segundo truco fue una nueva estructura de red neuronal que llamaré el "Monstruo de dos cabezas".

Truco # 2: El monstruo de dos cabezas

AlphaGo Zero's era su arquitectura de red neuronal, una arquitectura de "dos cabezas". Sus primeras 20 capas más o menos eran "bloques" de capas de un tipo que se ve a menudo en las redes neuronales modernas. Estas capas fueron seguidas por dos "cabezas" : una cabeza que tomó la salida de las primeras 20 capas y produjo probabilidades de que el agente Go hiciera ciertos movimientos, y otra que tomó la salida de las primeras 20 capas y emitió una probabilidad de la corriente jugador ganador

La arquitectura de red neuronal de dos cabezas de AlphaGo Zero. Diagrama cortesía de DeepMind .

Esto es bastante inusual En casi todas las aplicaciones, las redes neuronales producen un único resultado fijo, como la probabilidad de que una imagen contenga un perro o un vector que contenga las probabilidades de una imagen que contenga uno de los 10 tipos de objetos. ¿Cómo puede una red aprender si recibe dos conjuntos de señales: una sobre cuán buenas son sus evaluaciones del tablero, y otra qué tan buenas son las jugadas específicas que está seleccionando?

La respuesta es simple: recuerde que las redes neuronales son fundamentalmente funciones matemáticas con un conjunto de parámetros que determinan las predicciones que hacen; los "enseñamos" mostrándoles repetidamente "respuestas correctas" y pidiéndoles que actualicen sus parámetros para que las respuestas que producen coincidan más con estas respuestas correctas.

Entonces, cuando usamos la red neural de dos cabezas para hacer una predicción usando Head # 1, simplemente actualizamos los parámetros que llevaron a hacer esa predicción, concretamente los parámetros en "Body" y en "Head # 1". De manera similar, cuando hacemos una predicción usando Head # 2, actualizamos los parámetros en "Body" y en "Head # 2".

Entrenando a la red neuronal de dos cabezas, una cabeza a la vez.

Así es como DeepMind entrenó su red neuronal única, de "dos cabezas" que solía guiar al MCTS durante su búsqueda, tal como lo hizo AlphaGo con dos redes neuronales separadas. Este truco representó la mitad del aumento de AlphaGo Zero en la fuerza de juego sobre AlphaGo.

(Este truco se conoce más técnicamente como aprendizaje de tareas múltiples con el uso compartido de parámetros duros. Sebastian Ruder tiene una gran visión general aquí ).

La otra mitad del aumento en la fuerza de juego simplemente vino de actualizar la arquitectura de la red neuronal con los últimos avances en el campo:

Truco # 3: Redes "residuales"

AlphaGo Zero utilizó una arquitectura de red neuronal más "vanguardista" que AlphaGo. Específicamente, usaron una arquitectura de red neuronal "residual" en lugar de una arquitectura puramente "convolucional". Las redes residuales fueron iniciadas por Microsoft Research a finales de 2015 , justo cuando el trabajo en la primera versión de AlphaGo habría terminado, por lo que es comprensible que DeepMind no las haya utilizado en el programa AlphaGo original.

Diagrama que compara arquitecturas residuales con convolucionales, del documento original "ResNet". Fuente

Curiosamente, como muestra el siguiente gráfico, cada uno de estos dos trucos relacionados con la red neuronal -cambiar de arquitectura convolucional a residual y utilizar la arquitectura de red neuronal "Two Headed Monster" en lugar de redes neuronales separadas- habría resultado en aproximadamente la mitad del aumento en la fuerza de juego como se logró cuando ambos se combinaron.

Improvmenet de AlphaGo Zero – que usaba una arquitectura de red neuronal "Dual-Residual" – sobre AlphaGo, que usaba una arquitectura "Convolucional separada". Gráfico cortesía de DeepMind .

Resumen de trucos

Estos tres trucos son los que permitieron a AlphaGo Zero lograr su rendimiento increíble que explotó incluso Alpha Go:

  1. Usando las evaluaciones proporcionadas por Monte Carlo Tree Search, "búsqueda inteligente", para mejorar continuamente la evaluación de la red neuronal de las posiciones de la placa, en lugar de utilizar juegos humanos.
  2. Utilizando una red neuronal: el "Monstruo de dos cabezas" que aprende de forma simultánea qué movimientos movería la "observación inteligente" recomendaría y qué movimientos conducirían probablemente a la victoria, en lugar de dos redes neuronales separadas.
  3. Usar una arquitectura de red neuronal más avanzada: una arquitectura "residual" en lugar de una arquitectura "convolucional".

un comentario

Vale la pena señalar que AlphaGo no utilizó ningún concepto de aprendizaje de refuerzo clásico o incluso "de vanguardia": sin Deep Q Learning, Asynchronous Actor-Critic Agents, o cualquier otra cosa que normalmente asociamos con el refuerzo de aprendizaje. Simplemente usó simulaciones para generar datos de entrenamiento para sus redes neuronales para luego aprender de forma supervisada. Denny Britz resume bien esta idea en este Tweet desde el momento en que se lanzó el documento AlphaGo Zero:

Sigue a Denny aquí .

Los números: Entrenamiento AlphaGo Zero, paso a paso

Aquí hay una línea de tiempo "paso a paso" de cómo se entrenó AlphaGo Zero:

  1. Inicializa la red neuronal.
  2. Juegue juegos de autoaprendizaje, usando 1,600 simulaciones MCTS por movimiento (lo que toma aproximadamente 0,4 segundos).

Una iteración de MCTS en AlphaGo Zero. Diagrama cortesía de DeepMind .

3. A medida que se desarrollen estos juegos de autoaprendizaje, muestree 2,048 posiciones de los últimos 500,000 juegos, junto con si el juego fue ganado o perdido. Para cada movimiento, registre tanto A) los resultados de las evaluaciones MCTS de esas posiciones – cuán "buenos" fueron los distintos movimientos en estas posiciones en función de la anticipación – y B) si el jugador actual ganó o perdió el juego.

4. Entrene a la red neuronal, utilizando tanto A) las evaluaciones de movimiento producidas por la búsqueda anticipada de MCTS y B) si el jugador actual ganó o perdió.

5. Finalmente, cada 1,000 iteraciones de los pasos 3-4, evalúa la red neuronal actual contra la mejor versión anterior; si gana al menos el 55% de los juegos, comenzar a utilizarlo para generar juegos de auto-play en lugar de la versión anterior.

Repite los pasos 3-4 700,000 veces, mientras se juegan continuamente los juegos de autoaprendizaje. ¡Después de tres días, tendrás un AlphaGo Zero!

Implicaciones para el resto de la IA

Hay muchas implicaciones del increíble logro de DeepMind para el futuro de la investigación en IA. Aquí hay un par de claves:

Primero, el hecho de que los datos de autoaprendizaje generados a partir de simulaciones fueran "lo suficientemente buenos" para poder entrenar la red sugiere que los datos autoejecutables simulados pueden entrenar a los agentes para superar el rendimiento humano en tareas extremadamente complejas, incluso comenzando completamente desde cero . generado por expertos humanos puede no ser necesario.

En segundo lugar, el truco del "Monstruo de dos cabezas" parece ayudar significativamente a los agentes a aprender a realizar varias tareas relacionadas en muchos dominios , ya que parece impedir que los agentes adapten su comportamiento a cualquier tarea individual. Parece que a DeepMind realmente le gusta este truco, y lo ha utilizado y versiones más avanzadas para construir agentes que pueden aprender múltiples tareas en varios dominios diferentes .

La IA de DeepMind aprende a resolver laberintos, utilizando el marco "Distral" para el aprendizaje de refuerzo multitarea. Fuente

Muchos proyectos en robótica, especialmente en el floreciente campo del uso de simulaciones para enseñar a los agentes robóticos a usar sus extremidades para realizar tareas, están usando estos dos trucos con gran efecto. La reciente conferencia de NIPS de Pieter Abbeel destaca muchos resultados nuevos e impresionantes que utilizan estos trucos junto con muchas técnicas de aprendizaje de refuerzo de reflujo. De hecho, la locomoción parece un caso de uso perfecto para el truco del "Monstruo de dos cabezas" en particular: por ejemplo, los agentes robóticos podrían entrenarse simultáneamente para golpear una pelota de béisbol con un bate y lanzar un golpe para golpear un objetivo en movimiento, ya que los dos las tareas requieren aprender algunas habilidades comunes (por ejemplo, equilibrio, rotación del torso).

Los trucos que DeepMind usó para entrenar AlphaGo Zero ya se han aplicado a la locomoción. Fuente

AlphaGo Zero de DeepMind fue uno de los avances más intrigantes en AI y Deep Learning en 2017. ¡No puedo esperar a ver qué trae 2018!

Texto original en inglés.