Aprende a construir y manejar Redes Neuronales Recurrentes con Keras

Tuesday, September 25, 2018

Aprende a construir y manejar Redes Neuronales Recurrentes con Keras

Escrito por Enrique Blanco y Fran Ramírez, investigadores del equipo de Ideas Locas CDO de Telefónica.

En este artículo vamos a hacer una introducción a las Redes Neuronales Recurrentes (RNN), una clase de redes que tienen la capacidad de predecir datos pertenecientes a secuencias o series temporales. Este tipo de redes tiene múltiples aplicaciones en la actualidad: desde predecir la evolución del precio de la acción en el mercado bursátil hasta en los sistemas de conducción autónomos, permitiendo la anticipación de trayectorias de automóvil para ayudar a evitar accidentes. 
De manera más general, pueden funcionar en secuencias de longitudes arbitrarias, en lugar de con inputs de tamaño fijo, como ocurría con todas las redes que hemos discutido en los artículos anteriores. Por ejemplo, se pueden introducir oraciones, documentos o fragmentos de audio, por lo que este tipo de redes también resultan cruciales para el Procesamiento del Lenguaje Natural (NLP), presentes en sistemas de traducción automática, transcripción de discurso a texto o análisis de sentimientos; por ejemplo, leer reseñas de películas y ser capaz de evaluar la sensación del usuario sobre las mismas.

 Neuronas.
Figura 1: Neuronas.


En anteriores artículos, realizamos una introducción al manejo de la librería TensorFlow para Deep Learning:

una vez asimilados los conceptos básicos asociados al manejo de esta librería y de otras como Keras, os proponemos dos ejercicios de clasificación con algunos datasets no tan habituales en el aprendizaje de técnicas de Machine Learning

La progresión que se vaticina para las redes neuronales recurrentes es enorme, y sin duda en un futuro muy próximo verá refinado su funcionamiento y extendido su campo de aplicabilidad.

En este post nos centraremos en hacer uso de un tipo de bloque recurrente llamado LSTM (Long Short-Term Memory). Este tipo de celda fue propuesto por Sepp Hochreiter y Jürgen Schmidhuber en 1973 (podéis ver la publicación original aquí). Esta propuesta de celda fue refinada con los años por varios investigadores como Alex Graves, Haşim Sak y Wojciech Zaremba. Con las LSTM, el entrenamiento converge más rápido y detecta dependencias a largo plazo en los datos, aspecto que no estaba del todo cubierto con las RNNs. Para profundizar más en el funcionamiento de una LSTM y en las operaciones soportadas por ellas, recomendamos visitar el siguiente enlace.

Vamos a mostrar cómo realizar predicción de texto y clasificación de texto haciendo uso de LSTM con la librería Keras. Esta librería es una biblioteca de aprendizaje profundo de código abierto escrita en Python. Es capaz de ejecutarse sobre TensorFlow, Microsoft Cognitive Toolkit o Theano. Diseñado para permitir una rápida experimentación con redes neuronales profundas, es fácil de usar, modular y extensible.

En el siguiente Jupyter Notebook mostramos cómo generar texto haciendo uso de celdas LSTM. Para ello nos descargaremos un texto de muestra sobre el que entrenar nuestro modelo. A pesar de que el modelo es bastante simple, tarda algunas horas en entrenar. En el caso de que no dispongáis del tiempo suficiente, tenéis disponible en este enlace el checkpoint del modelo entrenado sobre el texto indicado en la introducción del cuaderno.


La clasificación de secuencias es un problema de modelado predictivo en el que se tiene una secuencia de entradas sobre el espacio o el tiempo con la finalidad de predecir una categoría para la secuencia. Lo que hace que este problema sea difícil es que las secuencias pueden variar en longitud, estar compuestas de un vocabulario muy grande, tener símbolos de entrada y pueden requerir que el modelo aprenda el contexto a largo plazo o las dependencias entre símbolos en la secuencia de entrada.

En este cuaderno veremos cómo se pueden desarrollar modelos de redes neuronales recurrentes LSTM para problemas de clasificación de secuencias en Python utilizando la biblioteca de aprendizaje profundo Keras.


Arriba hemos abordado distintas arquitecturas de clasificación con la estructura Embedding + LSTM, así como un preprocesado de t-SNE del vocabulario de las reseñas que se deseaban clasificar. Al igual que con el Jupyter Notebook anterior, el entrenamiento puede ser bastante extenso, por lo que también tenéis disponible los checkpoints de los modelos para acelerar las pruebas que deseéis realizar.

No te pierdas ninguno de nuestros post. Suscríbete a LUCA Data Speaks.

Para mantenerte al día con LUCA visita nuestra página web, y no olvides seguirnos en TwitterLinkedIn YouTube.

No comments:

Post a Comment