Introducción a las Redes Neuronales Recurrentes
En este primer post de la serie “Redes Neuronales Recurrentes” haremos una introducción general a esta importante arquitectura del Deep Learning, hablaremos de sus principales características y veremos algunos ejemplos de aplicación.
¡Así que listo, comencemos!
Tabla de contenido
Video
Como siempre, en el canal de YouTube se encuentra el video de este post:
Introducción
Las Redes Neuronales Recurrentes son una de las principales arquitecturas del Machine Learning, muy usadas por ejemplo en los sistemas de reconocimiento de voz o en el análisis video, o en el procesamiento del lenguaje natural.
Anteriormente hemos visto que las Redes Neuronales o las Redes Convolucionales permiten procesar un solo dato a la vez (como un sonido o una imagen), pero si tenemos una secuencia de sonidos (una conversación) o de imágenes (un video), este tipo de arquitecturas no estarán en capacidad de procesar este tipo de secuencias.
Las Redes Neuronales Recurrentes resuelven este inconveniente, pues son capaces de procesar diferentes tipos de secuencias (como videos, conversaciones, texto) y, a diferencia de las redes neuronales o convolucionales, no se utilizan para clasificar un dato en particular sino que también están en capacidad incluso de generar nuevas secuencias.
Las Redes Neuronales Recurrentes vs. otras arquitecturas
La diferencia entre una red recurrente y otras arquitecturas como las Redes neuronales o Convolucionales, radica en el tipo de datos que pueden analizar. Las Redes Recurrentes están en capacidad de analizar secuencias de datos, las otras dos arquitecturas no:
Veamos en detalle en qué consiste esta diferencia.
Si a una Red Neuronal o Convolucional se le presenta, por ejemplo, una imagen o una palabra, con el entrenamiento adecuado estas arquitecturas lograrán clasificar un sinnúmero de datos logrando a la vez una alta precisión:
¿Pero qué pasa si en lugar de una única imagen o palabra, se introduce a la red una secuencia de imágenes (un video) o una secuencia de palabras (una conversación)?
En este caso, ninguna de las redes será capaz de procesar los datos.
En primer lugar porque estas arquitecturas están diseñadas para que los datos de entrada y de salida siempre tengan el mismo tamaño. Sin embargo, un video o una conversación se caracterizan por ser un tipo de dato con un tamaño variable: una cantidad variable de frames, en el caso del video, o una cantidad variable de palabras en el caso de la conversación.
En segundo lugar, en un video o en una conversación los datos están correlacionados. Esto quiere decir que la siguiente palabra pronunciada, o la siguiente imagen en la secuencia de video, dependerá de la palabra o imagen anterior. E incluso estas palabras e imágenes estarán relacionadas con aquellas que se presenten más adelante en la secuencia.
Una Red Neuronal o Convolucional no está en capacidad de analizar la relación entre varias palabras/imágenes de la secuencia:
Las Redes Neuronales Recurrentes no presentan este inconveniente, y por tanto son capaces de analizar secuencias.
Para entender cómo funcionan estas Redes Neuronales Recurrentes necesitamos primero entender qué es una secuencia.
Pero, ¿qué es una secuencia?
Una secuencia es por ejemplo un texto escrito: para comprender su contenido no basta con que leamos cada palabra de manera individual, pues realmente nuestro cerebro concatena todas las palabras leídas hasta el momento permitiéndonos comprender la idea central de dicho texto:
Así, una secuencia es una serie de datos (imágenes, palabras, notas musicales, sonidos) que siguen un orden específico y tienen únicamente significado cuando se analizan en conjunto y no de manera individual:
Por ejemplo, la palabra “secuencia” está conformada por diferentes caracteres (“s”-“e”-“c”-“u”-“e”-“n”-“c”-“i”-“a”). Dichos caracteres, analizados de forma individual o en un orden diferente (por ejemplo, “n”-“s”-“e”-“i”-“c”-“c”-“u”-“a”), carecen de significado:
Es evidente que una secuencia no tiene un tamaño predefinido, pues no podemos saber con antelación el número de palabras pronunciadas por una persona en una conversación, ni tampoco garantizar que un texto escrito tenga siempre un número fijo de palabras/caracteres.
Las Redes Neuronales Recurrentes resuelven precisamente este inconveniente, pues pueden procesar, tanto a la entrada como a la salida, secuencias sin importar su tamaño y además teniendo en cuenta la correlación existente entre los diferentes elementos de la secuencia.
Así que veamos su principio de funcionamiento.
Las Redes Neuronales Recurrentes: principio básico de funcionamiento
Para lograr procesar una secuencia, las Redes Neuronales Recurrentes usan el concepto de recurrencia: para generar la salida, que en adelante llamaremos activación, la red usa no solo la entrada actual sino la activación generada en la iteración previa. En pocas palabras, las Redes Neuronales Recurrentes usan un cierto tipo de “memoria” para generar la salida deseada.
Tipos de Redes Neuronales Recurrentes
Las Redes Neuronales Recurrentes vienen en varios sabores. Veamos los principales.
One-to-many
En primer lugar tenemos las Redes Neuronales Recurrentes “one to many” en donde la entrada es un único dato y la salida es una secuencia.
Un ejemplo de esta arquitectura es el “image captioning” en donde la entrada es una imagen y la salida es una secuencia de caracteres (un texto) que describe el contenido de la imagen:
Many-to-one
Una segunda arquitectura son las Redes Neuronales Recurrentes “many to one”, en donde la entrada es una secuencia y la salida es por ejemplo una categoría.
Un ejemplo de esto es la clasificación de sentimientos en donde por ejemplo la entrada es un texto que contiene una crítica a una película y la salida es una categoría indicando si la película le gusto al crítico o no:
Many-to-many
También existe la arquitectura “many to many” en donde tanto a la entrada como a la salida se tienen secuencias.
Un ejemplo de este tipo de red recurrente son los traductores automáticos. En este caso la secuencia de salida no se genera al mismo tiempo que la secuencia de entrada, pues para poder traducir, por ejemplo, una frase del Inglés al Español se requiere primero conocer la totalidad del texto en Inglés:
Y desde luego, en esta misma arquitectura “many to many” podemos encontrar los conversores de voz-a-texto o texto a voz, que son Redes Neuronales Recurrentes cuya entrada y salida es también una secuencia.
Para finalizar, veamos algunos ejemplos realmente interesantes del potencial que tienen las redes recurrentes.
Algunas aplicaciones de las Redes Neuronales Recurrentes
Image captioning
Una de las primeras aplicaciones es el image captioning, en donde se usan dos modelos en conjunto: una Red Convolucional seguida por una Red Neuronal Recurrente. El resultado: el modelo entrenado es capaz de generar automáticamente texto que describe el contenido de la imagen.
Reconocimiento de escritura
Recientemente Google desarrolló un módulo, ya disponible en los dispositivos Android, que permite el reconocimiento de escritura: le permite al usuario escribir directamente sobre la pantalla táctil de su dispositivo móvil, y el sistema es capaz de reconocer lo que la persona está escribiendo.
Este sistema usa una arquitectura conocida como LSTM (Long-Short-Term memory), una variante de las Redes Neuronales Recurrentes de la cual hablaremos en detalle más adelante en otro post de esta serie.
Comprensión del lenguaje
Microsoft también ha desarrollado aplicaciones que permiten entender el lenguaje humano, y tomar decisiones con base en el contenido de una conversación.
Esto tiene aplicaciones en las áreas de automatización e internet de las cosas.
Análisis de sentimientos
También es posible realizar el análisis de sentimientos: a partir de una conversación o texto, el sistema es capaz de determinar si lo que intenta expresar la persona es positivo, negativo o neutral.
Para ello, el modelo basado en Redes Recurrentes detecta palabras clave dentro del texto o conversación, que permiten luego asociar a las mismas un sentimiento en particular.
Generación de música
También es posible usar las Redes Neuronales Recurrentes para generar música, como en este demo desarrollado por Google, en donde el usuario introduce algunas notas y el sistema automáticamente es capaz de generar la melodía correspondiente.
Detección de modificaciones en el ADN
Incluso en las áreas de la genética, la biología y la medicina se han desarrollado aplicaciones haciendo uso de las Redes Neuronales Recurrentes.
Un ejemplo de esto es la detección de modificaciones en la secuencia de ADN con una precisión cercana al 99%, lo que facilitará el análisis modificaciones en el ADN en diversas especies.
Conclusión
Bien, en este primer post de la serie hemos visto una introducción general a las Redes Neuronales Recurrentes, una arquitectura que (a diferencia de las redes neuronales y convolucionales) permite el procesamiento de secuencias.
El potencial de esta arquitectura es inmenso, pues gran cantidad de los datos que existen en la actualidad son precisamente secuencias. Así, esta arquitectura ofrece la posibilidad de analizar otros tipos de datos, como videos, o imágenes, texto, conversaciones e incluso secuencias de ADN.
En el siguiente post de la serie veremos en detalle cómo es la estructura interna de una red neuronal recurrente y cómo se realiza el proceso de entrenamiento.
Si tienes alguna duda de este artículo o tienes alguna sugerencia no dudes en contactarme diligenciando el siguiente formulario: