lunes, 17 de julio de 2017

Utilizando 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 este 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, es también capaz de inferir movimientos de ajedrez válidos (usando la notación algebraica) dado un estado cualquiera de tablero.

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 de todo es sin duda el hecho de comprender la potencia que tiene el modelo de Google para poder ser generalizado a cualquier tarea de mapeo que pueda ser tratada y representada de manera adecuada y de modo que podamos generar pares de entrada (source-target) para 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 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 igualmente 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 además 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., 2014Cho 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.

2 comentarios: