viernes, 8 de diciembre de 2017

¡Más potencia!

«¡Es la guerra! ¡Traed madera! ¡Más madera!» 
(Los hermanos Marx)

Introducción.

El mundo de las ciencias de la computación están estos días de enhorabuena, un nievo hito histórico acaba de acontecer: hablamos por supuesto del casi milagroso desarrollo de Google DeepMind denominado AlphaZero, un modelo neuronal capaz de aprender de manera autónoma no supervisada (sin apoyo de datos etiquetados ofrecidos por el hombre) a jugar con capacidades sobrehumanas a varios juegos milenarios como el Go y el ajedrez (aquí podéis descargar el paper de este proyecto).

DeepMind acaba de demostrar así que la metodología que utilizaron para que un modelo neuronal aprendiera (con capacidades sobrehumanas) por sí misma sin apoyo de datos humanos el juego de Go, es generalizable a cualquier otro tipo de juego o situación. En el arriba comentado paper nos explican por ejemplo como en 4 horas (sí, sólo 4 horas), la red neuronal fue capaz de aprender a jugar al ajedrez (entre otros juegos) con una capacidad no sólo sobrehumana, sino superior a cualquier inteligencia artificial "clásica" creada por el hombre en estos juegos (con reglas de juego programadas y dictadas a mano con respaldo de una fuerza bruta computacional). Es decir, que la metodología que utilizaron hace unos meses en AlphaGo Zero ahora han demostrado que es fácilmente extensible a cualquier otra situación o juego (de ahí que al modelo mejorado ahora lo llamen AlphaZero a secas). De ahora en adelante ya sabemos que un modelo neuronal es capaz de aprender solo y sin supervisión humana alguna con sólo recibir de entrada el estado actual del juego y nada más (ya no hay que "explicar" ni programar a mano absolutamente nada para que una red neuronal pueda aprender y superar nuestras habilidades). Se puede decir que el ser humano ya sobra para conseguir que un modelo neuronal aprenda a ejecutar con éxito una gran variedad de situaciones.

Y por si esto no fuese suficiente para convencer al lector más escéptico, también hay que remarcar otro avance de Google realizado el mes pasado: AutoML (https://research.googleblog.com/2017/11/automl-for-large-scale-image.html). Se trata ni más ni menos que de un modelo neuronal capaz de generar (crear) por sí sólo otro modelo neuronal "hijo" orientado en la resolución de una tarea específica independiente. Y hay que remarcar dos cosas de AutoML: 1º) Es un modelo neuronal que es capaz de generar y crear de manera autónoma sin apoyo humano otro modelo neuronal, y 2º) El modelo neuronal "hijo" creado de esta manera autónoma es superior a cualquier modelo que haya sido capaz un ser humano de crear hasta la fecha a mano ajustando los parámetros de una red neuronal (al menos en la tarea de clasificar imágenes donde han comenzado a probar este prodigio). Google DeepMind también está estudiando esta aproximación en recientes publicaciones como en el trabajo "Population Based Training of Neural Networks", donde estudian un modo de mejorar la eficiencia de los desarrollos de machine learning eliminando la necesidad de que un ingeniero humano ajuste los parámetros de la red neuronal...y realmente consiguen resultados prometedores. De hecho superan el estado del arte en varias tareas gracias al simple hecho de borrar al hombre de la ecuación.

Todos estos casos (especialmente el de AlphaZero) suponen un innegable paso adelante hacia la consecución de una inteligencia artificial general, y demuestran además que la única limitación en este sentido ha sido (y será por un tiempo) la potencia de cálculo. Estos hitos históricos que venimos presenciando los últimos 5 años sólo han sido posible de hecho gracias al uso de enormes recursos de computación por parte de grandes compañías privadas. En cierto sentido los avances teóricos palidecen en comparación al avance que la ley de Moore nos ofrece en potencia computacional (Hardware).

Valga en este sentido comentar que Google DeepMind sólo ha podido alcanzar sus hitos más actuales gracias a las nuevas tarjetas gráficas dedicadas y especializadas al machine learning (las TPU). Tarjetas que son propiedad exclusiva de Google y que de momento nadie más puede adquirir en el mercado.

Un poco de humildad.

El factor que más peso tiene en aquellas personas que no creen que la inteligencia artificial general vaya a llegar (por no hablar de una consciencia artificial) es la falta de humildad. Pensar a priori y sin base empírica que nuestras capacidades humanas son diferentes o se basan en sustratos o principios no materiales, o materiales pero difícilmente replicables. Se trata de una evidente falacia que se puede rastrear como poco hasta tiempos de Descartes.

La ciencia ha demostrado que ningún sustrato no material da soporte a nuestra mente, y también desde Darwin que todo en el hombre; desde el dedo del pié hasta su cerebro, es producto de un gradual, acumulativo y lento proceso evolutivo. Ya no hay pues cabida para nada inmaterial ni tampoco para la aparición fisiológica o conductual de estructuras que no sean explicables por la mera evolución. Esto implica pues que nuestra mente y la consciencia deben ser productos materiales y evolucionados durante millones de años. En este sentido es de perogrullo concluir que es el cerebro y el sistema nervioso en general el responsable de toda nuestra conducta y subjetividad.

En este sentido me gustaría que vieseis conmigo a continuación esta breve sesión de neuroanatomía impartida por el profesor Leonard E. White (este vídeo forma parte de un completo curso que puedes seguir de manera gratuita en Coursera):



El sistema nervioso central es el encargado de procesar la información. Los nervios le llevan información desde los sentidos y también transmiten la salida del procesado a los músculos. Y este procesado de información de entrada y salida, junto con cierta retroalimentación interna de varias zonas y subredes neuronales, es todo lo necesario para explicar nuestra mente. No hay ni se requiere de ninguna res cogitans ni tampoco es admisible ningún agente o explicación que no quepa dentro de los límites evolutivos.

El algoritmo humano.

Uno de los fragmentos que más me han gustado del último libro de Yuval Noah Harari, "Homo Deus: Breve historia del mañana" ha sido el siguiente:


La conducta humana, toda ella; como bien indica Yuval Noah Harari, se reduce a complejos cálculos de probabilidades acontecidos en el sistema nervioso central. Un órgano evolucionado gradualmente durante millones de años. Todo en nosotros se reduce pues a la ejecución de intricados algoritmos ejecutados en el cerebro.

El poderío de la red neuronal biológica.

Pero, ¿cómo pudo la Naturaleza lograr semejante procesador de cálculos capaz de tener en cuenta tanta información externa y de manera simultánea? ¿Cómo es posible acaparar y filtrar tanta información y aún así ser capaz de generalizar y obtener patrones de entre todo ese caos sensorial? ¿Y cómo aplica con éxito luego esos necesarios cómputos probabilisticos capaces de lograr con éxito los fines evolutivos de supervivencia y reproducción? La respuesta son las redes neuronales biológicas.


La capacidad de cálculo que estas redes neuronales poseen son realmente asombrosas. Pueden aproximar funciones no-lineales y actuar de manera paralela con información llegada de muy diversas fuentes. El flujo de información eléctrica que recorren los billones de neuronas por entre el trillón de sinapsis en el cerebro del hombre suponen la explicación evidente de toda nuestra capacidad. No hay nada más a parte de este sustrato material evolutivo, tampoco hace falta introducir nada más en la ecuación. Las redes neuronales poseen el poder computacional necesario y suficiente para dar cuenta de nuestra conducta y subjetividad, y aunque aún nos quede mucho por aprender de este órgano, es de necios aprovechar este desconocimiento temporal para introducir postulados metafísicos, místicos o seudocientíficos (como eso de querer introducir a la mecánica cuántica como parte del fenómeno de la consciencia con calzador y sin evidencia ni soporte empírico alguno).

El poderío de la red neuronal artificial.

El poderío y la capacidad de cálculo no lineal de la red neuronal biológica es fácilmente replicable en un ordenador cualquiera. Es posible simular este comportamiento biológico, y es de hecho esta imitación la que está posibilitando TODOS y cada uno de los avances tecnológicos acontecidos en la última década en el terreno de la inteligencia artificial.



Si coges tu móvil y cuando le hablas es capaz de reconocer tu voz y transcribir lo que dices casi sin errores, debes saber que lo que tu móvil está haciendo es ejecutar una red neuronal artificial que simula el funcionamiento de parte de la red neuronal de nuestro propio cerebro encargado de esta tarea. Y esto mismo ocurre con los sistemas de traducción entre lenguas, con la voz sintética que nos habla, e incluso con las simpáticas aplicaciones que detectan nuestra cara en la cámara del móvil para pintarnos encima sombreros y otras cosas graciosas. Lo mismo que cuando nuestro coche es capaz de ayudarnos con los modernos sistemas de soporte que evitan que nos salgamos del carril en la carretera. En estos vehículos, una cámara recibe señales del asfalto, y una red neuronal artificial es la que decide si vamos bien o si nos vamos a salir del carril (corrigiendo en tal caso la trayectoria moviendo automáticamente el volante). Los ejemplos son ya en realidad innumerables.

La ley de Moore y la actual explosión de avances en inteligencia artificial.

Teóricamente hace ya varias décadas que se conoce el poder de la red neuronal artificial, pero hasta hace bien poco no se dispuso del Hardware necesario para dar soporte práctico a dicho potencial de simulación. Pero esto está cambiando gracias a la ley de Moore y al exponencial aumento de potencial de cálculo disponible cada año. Cada año el potencial de cálculo al alcance de los investigadores se duplica, y precisamente ahora estamos alcanzando el umbral que permite esta explotación práctica artificial del poder biológico oculto en las redes neuronales.

Como dijimos al principio, el gigantesco avance de estos últimos 5 años en IA no se deben tanto a los avances teóricos sino a los avances en el Hardware. Esto significa que el limitante no ha sido nunca la base teórica bien establecida desde hace muchos años, sino la ineficacia de nuestras máquinas a la hora de poder simular con la fidelidad suficiente la base natural biológica que da forma a nuestras habilidades mentales.

Al mismo tiempo este hecho supone que los logros que conseguiremos en años venideros seguirán creciendo a cada vez mejor ritmo conforme la ley de Moore siga duplicando nuestra capacidad de cómputo. Las tarjetas TPU de segunda generación Google son el doble de potentes que las de primera generación (un avance que ha necesitado de menos de un año), y nada impide que en 5 años tengamos un Hardware tan potente que haga palidecer a nuestro potencial actual.

Conclusión.

Si Google DeepMind ha necesitado esperar a la aparición de las TPU de 2ª generación para lograr el gran hito que ha supuesto AlphaZero, nada parece indicar que el ritmo de logros importantes y transcendentales en el mundo de la inteligencia artificial no continúe su curso conforme nuevo y más avanzado Hardware llegue a manos de los investigadores en las ciencias de la computación.

En última instancia, es perfectamente viable (e incluso probable), que conforme el poder de computación avance así ocurra con nuestra habilidad para simular e imitar nuestra propia red neuronal biológica hasta el punto de que finalmente el proceso acabe convergiendo en una inteligencia artificial general e incluso consciente (poseyendo nuestra misma subjetividad). Valga recalcar el hecho de que no existe ninguna evidencia física teórica o experimental capaz de negar formalmente la posibilidad de esta convergencia.

Bien parece que en el fondo el "Hard problem" de la consciencia se reduce simplemente a una limitación temporal de potencia. Así pues no desesperemos y estemos atento a que la ley de Moore nos siga ofreciendo cada año el doble de potencia. De eso parece que se trata todo, de ¡mas madera!

viernes, 24 de noviembre de 2017

Replicando el desarrollo de Google DeepMind: AlphaGo Zero

Previous versions of AlphaGo initially trained on thousands of human amateur and professional games to learn how to play Go. AlphaGo Zero skips this step and learns to play simply by playing games against itself, starting from completely random play. In doing so, it quickly surpassed human level of play and defeated the previously published champion-defeating version of AlphaGo by 100 games to 0.
If similar techniques can be applied to other structured problems, such as protein folding, reducing energy consumption or searching for revolutionary new materials, the resulting breakthroughs have the potential to positively impact society. 
(Profesor David Silver)

Hace unos meses Google DeepMind hizo público uno de sus resultados más asombrosos: una versión del modelo neuronal que fue capaz de derrotar al campeón del mundo de Go, solo que esta vez no necesitaron hacer uso de ningún aprendizaje supervisado de juegos entre humanos (hablé en este mismo blog en esta otra entrada con más profundidad sobre el asunto).

El modelo era capaz de aprender a jugar cual tabula rasa a partir exclusivamente de su propia experiencia jugando contra sí mismo una y otra vez. Pues bien, siguiendo esta línea de pensamiento he realizado por mi cuenta dos versiones de estas ideas para demostrar su validez (utilizando la librería Keras para Python). En primer lugar realicé una versión con un modelo neuronal capaz de aprender a jugar por sí solo al juego Conecta 4. El resultado ha sido espectacular (abajo encontrarás más información). En pocas horas una red neuronal aleatoria fue capaz de alcanzar un nivel de juego similar al de cualquier programa de IA tradicional...¡sólo que yo no tuve que explicarle ni indicarle ninguna estrategia de juego! La red neuronal se ajustó gradualmente conforme jugaba ella sola hasta el punto de superar mi propia capacidad de juego en muy poco tiempo.

El código fuente lo puedes descargar desde aquí: https://github.com/Zeta36/connect4-alpha-zeroTambién he realizado una versión de esta propuesta orientado al juego del ajedrez (https://github.com/Zeta36/chess-alpha-zero), aunque por motivos de falta de un Hardware lo suficientemente potente no he sido capaz de entrenar esta versión aún y no sé su capacidad real. Os dejo a continuación más información técnica sobre estos dos proyectos:

About

Connect4 reinforcement learning by AlphaGo Zero methods.
This project is based in two main resources:
  1. DeepMind's Oct19th publication: Mastering the Game of Go without Human Knowledge.
  2. The great Reversi development of the DeepMind ideas that @mokemokechicken did in his repo: https://github.com/mokemokechicken/reversi-alpha-zero

Environment

  • Python 3.6.3
  • tensorflow-gpu: 1.3.0
  • Keras: 2.0.8

Modules

Reinforcement Learning

This AlphaGo Zero implementation consists of three worker selfopt and eval.
  • self is Self-Play to generate training data by self-play using BestModel.
  • opt is Trainer to train model, and generate next-generation models.
  • eval is Evaluator to evaluate whether the next-generation model is better than BestModel. If better, replace BestModel.

Evaluation

For evaluation, you can play chess with the BestModel.
  • play_gui is Play Game vs BestModel using ASCII character encoding.

Data

  • data/model/model_best_*: BestModel.
  • data/model/next_generation/*: next-generation models.
  • data/play_data/play_*.json: generated training data.
  • logs/main.log: log file.
If you want to train the model from the beginning, delete the above directories.

How to use

Setup

install libraries

pip install -r requirements.txt
If you want use GPU,
pip install tensorflow-gpu

set environment variables

Create .env file and write this.
KERAS_BACKEND=tensorflow

Basic Usages

For training model, execute Self-PlayTrainer and Evaluator.

Self-Play

python src/connect4_zero/run.py self
When executed, Self-Play will start using BestModel. If the BestModel does not exist, new random model will be created and become BestModel.

options

  • --new: create new BestModel
  • --type mini: use mini config for testing, (see src/connect4_zero/configs/mini.py)

Trainer

python src/connect4_zero/run.py opt
When executed, Training will start. A base model will be loaded from latest saved next-generation model. If not existed, BestModel is used. Trained model will be saved every 2000 steps(mini-batch) after epoch.

options

  • --type mini: use mini config for testing, (see src/connect4_zero/configs/mini.py)
  • --total-step: specify total step(mini-batch) numbers. The total step affects learning rate of training.

Evaluator

python src/connect4_zero/run.py eval
When executed, Evaluation will start. It evaluates BestModel and the latest next-generation model by playing about 200 games. If next-generation model wins, it becomes BestModel.

options

  • --type mini: use mini config for testing, (see src/connect4_zero/configs/mini.py)

Play Game

python src/connect4_zero/run.py play_gui
When executed, ordinary chess board will be displayed in ASCII code and you can play against BestModel.

Tips and Memo

GPU Memory

Usually the lack of memory cause warnings, not error. If error happens, try to change per_process_gpu_memory_fraction in src/worker/{evaluate.py,optimize.py,self_play.py},
tf_util.set_session_config(per_process_gpu_memory_fraction=0.2)
Less batch_size will reduce memory usage of opt. Try to change TrainerConfig#batch_size in NormalConfig.

Model Performance

The following table is records of the best models.
best model generation
winning percentage to best model
Time Spent(hours)
note
1
-
-
 
2
100%
1

3
84,6%
1

4
78,6%
2
This model is good enough to avoid naive losing movements
5
100%
1
The NN learns to play always in the center when it moves first
6
100%
4
The model now is able to win any online Connect4 game with classic AI I've found

jueves, 19 de octubre de 2017

Sobre el modelo de red neuronal AlphaGo Zero (de Google DeepMind)

Previous versions of AlphaGo initially trained on thousands of human amateur and professional games to learn how to play Go. AlphaGo Zero skips this step and learns to play simply by playing games against itself, starting from completely random play. In doing so, it quickly surpassed human level of play and defeated the previously published champion-defeating version of AlphaGo by 100 games to 0.
If similar techniques can be applied to other structured problems, such as protein folding, reducing energy consumption or searching for revolutionary new materials, the resulting breakthroughs have the potential to positively impact society. 
(Profesor David Silver)

¡Realmente increíble las implicaciones que tiene este descubrimiento de DeepMind! Su modelo neuronal AlphaGo Zero es capaz de aprender SOLO sin necesitar de datos de ningún tipo (ya no necesita siquiera aprender de jugadas de humanos como su versión anterior); simplemente aprende jugando contra sí mismo. Los chicos de Google DeepMind hablan de un entrenamiento de "tabula rasa" mediante un proceso de Reinforce Learning autónomo (auto-sostenido). Este proceso de entrenamiento consiste en partir de una red neuronal profunda (similar a lo que sería un cerebro con sinapsis aleatorias), y mediante una iteración de entrenamiento autónomo mediante ensayo-error y pequeñas mutaciones esa tabula rasa (esa red neuronal con sinapsis aleatorias) poco a poco va ajustando su estructura hasta lograr sin ninguna ayuda algorítmica humana vencer al mejor jugador mundial de Go. Es decir, que a partir de eso que sería el equivalente computacional de neuronas unidas mediante sinapsis aleatorias, este modelo de red neuronal de DeepMind es capaz en pocas semanas de aprender y finalmente emular (y mejorar) la creatividad y la imaginación necesarias para jugar este juego milenario que ha necesitado de millones de años para su implantación cerebral en el hombre.

¡Además esta mejora de AlphaGo Zero supone que el programa ahora es capaz de vencer siempre (al 100%) a su versión predecesora (que ya era ella por cierto capaz de vencer al mejor jugador del mundo)! Es decir, que han conseguido una mejora no ya sobrehumana, sino exponencialmente mejor que su predecesora...¡y además han logrado disminuir (exponencialmente) los requisitos de hardware necesarios para su funcionamiento!



Realmente la IA general está despegando, y todo apunta a que no hace falta más que un modelo neuronal lo suficientemente grande y profundo, suficiente capacidad computacional, y un entrenamiento y modulación similar a la evolución natural.

Implicaciones reales del proyecto sobre el avance hacia una IA general.

Imagina que eres tú el que está jugando a Go: ¿cómo sabes qué movimiento hacer? Recuerda que en el Go la lógica no es fundamental: hay más jugadas disponibles que átomos en el Universo lo que hace que no sea posible racionalizar las jugadas, cosa que convierte en muy importante el proceso de creatividad, imaginación y sobre todo el instinto. De hecho, un gran maestro humano de Go juega  casi exclusivamente guiado por el instinto: mueve donde CREE que es más adecuado, pero NO sabe racionalmente por qué debe mover en cierto lugar concreto en lugar de en cualquier otro (algo que con el ajedrez por ejemplo NO pasa puesto que es mucho más asequible a la planificación racional).

Otro ejemplo: vas por la calle y ves pasar una chica (o un chico) y sientes atracción por ella (o por él): ¿por qué sientes realmente atracción por esa persona? No lo sabes, sólo sabes que sientes atracción por cierto estereotipo de persona y punto. Un ejemplo más: los artistas y su creatividad. Estos trabajos son frutos de ideas que le "salen" de dentro al artista, pero casi siempre de manera instintiva sin saberse bien cómo ni de donde (por eso hablan metafóricamente de la ayuda de su musa, que es en realidad parte de su subconsciente).

El ser humano tiene por lo tanto muchos comportamientos e ideas que son de origen inconscientes e instintivos, los cuales no tienen ni explicación ni soporte racional directo. Y son precisamente este tipo de comportamientos creativos e imaginativos los que DeepMind está logrando de momento simular con mucho éxito; demostrando  por ejemplo que AlphaGo Zero es capaz de adquirir tales habilidades instintivas con una capacidad sobrehumana (y sin soporte algorítmico humano). Se podría decir en cierta manera que; aunque por ahora sólo en el terreno del Go, este modelo neuronal es capaz de actuar con más creatividad, imaginación e instinto que cualquier jugador humano. Y eso es algo muy revelador del futuro que nos espera en IA.

lunes, 17 de julio de 2017

Usando el modelo de red neuronal de traducción de Google (GNMT)...¡para jugar al ajedrez!

Hace unos días, y para mi gran sorpresa, Google nos hizo el enorme regalo de hacer público el código fuente de su motor de traducción de lenguaje natural más moderno (GNMT): https://github.com/tensorflow/nmt

Así que decidí rápidamente hacer uso de esta maravilla, junto con las mejoras con la que la versión 1.2 de TensorFlow viene cargada, para programar las modificaciones necesarias para poder enfocar el modelo de Google a la traducción...¡de jugadas en el juego del ajedrez! Es decir; que el modelo (con modificaciones mínimas), en lugar de aprender a traducir por ejemplo de español a inglés, será capaz de inferir movimientos de ajedrez válidos (usando la notación algebraica) dado un estado de tablero cualquiera.

El resultado final lo podéis ver (y usar) en el siguiente repositorio de mi cuenta personal en GitHub: https://github.com/Zeta36/Using-Google-Neural-Machine-Translation-for-chess-movements-inference-TensorFlow-.

Pero lo realmente importante sin embargo, es sin duda el hecho de comprender la potencia que tiene el modelo de Google para ser generalizado a cualquier tarea de mapeo que pueda ser tratada y representada de la manera adecuada como para servir como pares de entrada source-target en el entrenamiento supervisado. En este sentido se puede decir que el mismo modelo neuronal que es capaz de traducir entre idiomas, es también capaz de aprender a inferir como realizar tareas que en principio parecen poco relacionadas con  la propia traducción de textos. 

Esto me hace pensar que en realidad con este hecho se está demostrando algo significativo pero ya a un nivel neuronal (humano). Es posible que resultados como el que se demuestran con este tipo de generalizaciones de aprendizaje (y memorización) bajo una misma estructura de red neuronal artificial, sean una pista del modo en que nuestro propio cerebro podría ser capaz de reutilizar una misma zona cerebral para realizar muy diversas tareas de procesamiento. En este sentido no es descabellado a la luz de lo observado que por ejemplo partes de nuestro cerebro que se utilicen para entender y traducir lenguaje natural, sea utilizado también para otras tareas de inferencias totalmente distintas de las lingüísticas (como aprender a jugar al ajedrez, o incluso comprender ciertas ideas matemáticas). Os dejo a continuación con un poco de más información técnica sobre el proyecto que he realizado:

Using (Google) Neural Machine Translation for chess movements inference

Somedays ago a free version of the source code of the GNMT (Google Neural Machine Translation) was release in: https://github.com/tensorflow/nmt by Thang Luong, Eugene Brevdo, Rui Zhao
 

Introduction

Sequence-to-sequence (seq2seq) models (Sutskever et al., 2014, Cho et al., 2014) have enjoyed great success in a variety of tasks such as machine translation, speech recognition, and text summarization.
I've used the release of this seq2seq to show the power of the model. Using a vocabulary with just de numbers and letters (the symbols) used for the chess algebraic notation, I was able to train a model to infer the movement a human would do given a table state.
The supervised learning uses then source-target pairs of the form:
Source: rnq1kb1r/pp11ppp1/11p11n11/1111111p/11111111/11111NPb/PPPP1P1P/RNBQR1KB b
Target: Bg4
The source is the state of the board, and the target the movement a human would do in this situation.
In this way the source vocabulary was:
w
/
1
p
r
n
b
q
k
P
R
N
B
Q
K
and the target vocabulary:
p
r
n
b
q
k
P
R
N
B
Q
K
x
+
O
-
1
2
3
4
5
6
7
8
a
c
d
e
f
g
h
=

Results

Using a NMT + GNMT attention (2 layers) the model was able to reach a good result with:
eval dev: perplexity 2.83 eval test: perplexity 3.07 global training step 72100 lr 0.868126 step-time 0.51s wps 9.57K ppl 2.76 bleu 20.64
This means that, given a board state whatever, the model can predict in a seq2seq way a valid (and usually human) chess movement.

miércoles, 12 de julio de 2017

La magnífica mejora en el sistema de traducción de Google (que ha pasado casi desapercibida)

"Alrededor de dos mil quinientos años atrás, un comerciante mesopotámico reunió arcilla, madera y juncos y cambió la humanidad para siempre. Con el tiempo, su ábaco permitiría a los comerciantes hacer un seguimiento de los bienes y reconciliar sus finanzas, permitiendo que la economía florezca.

Pero ese momento de inspiración también ilumina otra asombrosa habilidad humana: nuestra capacidad de recombinar conceptos existentes e imaginar algo completamente nuevo. El inventor desconocido habría tenido que pensar en el problema que querían resolver, el artefacto que podían construir y las materias primas que podían reunir para crearlo. La arcilla se podría moldear en una tableta, un palillo se podría utilizar para rasguñar las columnas y los juncos pueden actuar como contadores. Cada componente era familiar y distinto, pero juntos en esta nueva forma, formaron algo revolucionario.

Esta idea de "composicionalidad" está en el centro de las capacidades humanas como la creatividad, la imaginación y la comunicación basada en el lenguaje. Equipado con sólo un pequeño número de bloques de construcción conceptuales familiares, somos capaces de crear un gran número de nuevos sobre la marcha. Hacemos esto naturalmente colocando conceptos en jerarquías que van de específico a más general y luego recombinando diferentes partes de la jerarquía de maneras novedosas.

Pero lo que viene tan naturalmente a nosotros, sigue siendo un reto en la investigación de la IA.

En nuestro nuevo artículo , proponemos un nuevo enfoque teórico para abordar este problema. También se demuestra un nuevo componente de red neural denominado Symbol-Concept Association Network (SCAN), que puede, por primera vez, aprender una jerarquía de conceptos visuales conectados de manera que imita la visión humana y la adquisición de palabras, permitiéndole imaginar conceptos novedosos guiado por instrucciones de lenguaje.

Nuestro enfoque difiere de los trabajos previos en esta área, ya que está totalmente basado en los datos sensoriales y aprende de muy pocos pares de "imagen-palabra". Mientras que otros enfoques de aprendizaje profundo requieren miles de ejemplos de imágenes para aprender un concepto, SCAN aprende tanto las primitivas visuales como las abstracciones conceptuales principalmente de observaciones sin supervisión y con tan sólo cinco pares de una imagen y una etiqueta por concepto. Una vez entrenado, SCAN puede generar una lista diversa de conceptos que corresponden a una imagen en particular, e imaginar diversos ejemplos visuales que corresponden a un concepto particular, incluso si nunca ha experimentado el concepto antes.

Esta capacidad de aprender nuevos conceptos mediante la recombinación de los existentes a través de instrucciones simbólicas ha dado a los seres humanos capacidades asombrosas, lo que nos permite razonar sobre conceptos abstractos como el universo, el humanismo o - como fue el caso en Mesopotamia - economía. Mientras que nuestros algoritmos tienen un largo camino por recorrer antes de que puedan hacer tales saltos conceptuales, este trabajo demuestra un primer paso hacia tener algoritmos que pueden aprender de una manera en gran medida sin supervisión, y pensar en abstracciones conceptuales como las utilizadas por los seres humanos."

Este texto que acabo de pegar arriba es la asombrosa conclusión de un nuevo trabajo de Google DeepMind (publicado hoy). Se trata de una traducción parcial del siguiente artículo del blog oficial de la propia compañía de Google: https://deepmind.com/blog/imagine-creating-new-visual-concepts-recombining-familiar-ones/

Pero lo más destacado de todo esto no es quizás el trabajo comentado en sí mismo, sino el hecho de que el texto mostrado antes ha sido totalmente traducido de manera autónoma por el actual motor de IA de Google. No he necesitado hacer ni una sola modificación o corrección al texto devuelto, y si acaso lo que yo quizás pondría sería un "la" delante de donde dice "sobre conceptos abstractos como el universo, el humanismo o - como fue el caso en Mesopotamia - LA economía".

En fin, es evidente que rápidamente nos acostumbramos a lo bueno, y que pocos recuerdan ya las críticas hacia la traducción automática que hacíamos del traductor de Google hace apenas un año y pico. Pues bien, desde entonces Google ha mejorado MUCHO el sistema de traducción gracias a una innovación tecnológica que han denominado Neural Machine Translation:
https://research.googleblog.com/2016/09/a-neural-network-for-machine.html
https://research.googleblog.com/2016/11/zero-shot-translation-with-googles.html


El sistema aún no es perfecto (y su implantación tristemente casi ha pasado desapercibida en los medios de comunicación), pero si uno se fija y compara el tipo de traducciones automáticas de las que disponíamos hace apenas 5 años con las que tenemos hoy día, se puede ver claramente una mejora literalmente exponencial. Muy (muy) probablemente Google logrará una traducción con capacidades sobrehumanas en los próximos 5 años, amén de un sistema de reconocimiento de voz igualmente mejor que el del hombre medio. Vale unir a esto la síntesis autónoma de voz "end-to-end" de trabajos como los de WaveNet o Tacotron para poderse asegurar que en no más de un lustro dispondremos de aparatos (igual un simple móvil Android) capaces de oír (y transcribir el contenido de) una voz, detectar el lenguaje, traducir lo escuchado a otra lengua arbitraria, y dictar con una voz sintética indiferenciable de una humana dicho texto ya traducido. Esto de hecho ya hay dispositivos que "pueden" hacerlo, pero la cuestión es que en poco tiempo existirán proyectos capaces de realizar esta tarea siempre MEJOR (y más rápido) que cualquier persona.

Los traductores humanos serán posiblemente el primer gremio (mucho antes incluso que los taxistas y demás transportistas) en perder TODO su trabajo a manos de la automatización.

Un saludo, compañeros.

jueves, 3 de noviembre de 2016

Red neuronal enfocada en el aprendizaje supervisado del ajedrez

Enfocado en el reciente trabajo teórico de Google DeepMind (AlphaGo), he desarrollado e implementado una versión en TensorFlow de dicha arquitectura, pero realizando modificaciones para enfocar el diseño en el juego del ajedrez en lugar del Go (el paper original es: https://storage.googleapis.com/deepmind-media/alphago/AlphaGoNaturePaper.pdf).

El modelo ideado originalmente por DeepMind fue divulgado con detalle en este artículo: https://deepmind.com/research/alphago/, y mi implementation del mismo (con las modificaciones necesarias para enfocarlo todo en el juego del ajedrez), se encuentra en el siguiente repositorio de mi cuenta personal en GitHub: https://github.com/Zeta36/Policy-chess. Se trata como podéis ver, de un desarrollo Python usando el framework de Google, TensorFlow.

Os dejo a continuación toda la información técnica sobre mi trabajo, aunque siento no tener tiempo para traducirlo y simplemente copiaré a continuación la introducción que hice del mismo en inglés (prometo más adelante escribir una entrada dedicada a divulgar de manera más sencilla el potencial de esta red neuronal, y el indicio que puede contener sobre el modo en que nuestro propio cerebro biológico realiza ciertas tareas relacionadas con la generalización de conceptos, en este caso; aprender a clasificar con cierta habilidad y de manera "intuitiva" cual es una buena jugada de ajedrez de una mala):

A Policy Network in Tensorflow to classify chess moves

This work is inspired in the SL policy network used by Google DeepMind in the program AlphaGo (https://storage.googleapis.com/deepmind-media/alphago/AlphaGoNaturePaper.pdf).
The network models the probability for every legal chess move given a chess board based only in the raw state of the game. In this sense, the input s to the policy network is a simple representation of the board state using a tensor (batc_sizex8x8x8) with information of the chess board piece state, the number of the movement in the game, the current player, etc.
The SL policy network Pσ(a|s) alternates between convolutional layers with weights σ, and rectifier nonlinearities. A final softmax layer outputs a probability distribution over all legal moves a (labels).
The policy network is trained on randomly sampled state-action pairs (s, a), using stochastic gradient ascent to maximize the likelihood of the human move a selected in state.

Preparing the Data sets

We train the 3-layer policy network using any set of chess games stored as PGN files. To prepare the training and the validation data set, we just need to download many PGN file (more data means more accuracy after the training) and put them in the datasets folder (there is in the repository some pgn examples to use).
After that, we run in the console:
python pgn-to-txt.py
In this way, the PGN files will be reformated in the proper way, and chuncked in a tuple of (board state, human move). We the pgn-to-txt.py script finish, go into the datasets folder and copy almost all the "*.txt" files generated into a new folders called "data_train", and some text files into another folder called "data_validation".
Finally, you have to run
python pgn-to-label.py
And we will get the labels for the SL. This labels will be generated and saved in a labels.txt file inside the "labels" folder.

Training

Training is a easy step. Just run:
python train.py
You can adjust before if you wish some hyperparameters inside this python script.

Playing

Once the model is trained (and the loss has converged), you can play a chess game against the SL policy network. Just type:
python play.py
The machine moves will be generate by the policy network, and the human moves in the game will be asked to you to be type in the keyboard. In order to move, you have to know the san Algebraic notation(https://en.wikipedia.org/wiki/Algebraic_notation_(chess)).
The game board is printed in ASCII, but you can use any online chess board configuration (like this http://www.apronus.com/chess/wbeditor.php) to mimic the movements so you can see clearly the game.

Requirements

TensorFlow needs to be installed before running the training script. TensorFlow 0.10 and the current master version are supported.
In addition, python-chess must be installed for reading and writing PGN files, and for the play.py script to work.

Results

After some thousands of training steps, the model is able to generalize and play a reasonable chess game based only in the prediction of the human movements in the training process.