Redes Neuronales Recurrentes

Rubén Rodríguez Abril

La introducción de bucles y flujos de información retroalimentados dota a las redes neuronales recurrentes de nuevas capacidades inalcanzables para los modelos unidireccionales que hemos visto hasta ahora.

Redes Neuronales Recurrentes

Hasta ahora, en esta serie de artículos hemos analizado exclusivamente las redes alimentadas hacia adelante (feed-forward networks), en las que la información fluye de una manera unidireccional desde las neuronas de entrada hacia las de salida, desde la neurona aferente hacia la eferente, sin permitir que los impulsos puedan dirigirse de vuelta hacia atrás, desde las capas posteriores hacia las anteriores.

En esta nueva contribución haremos referencia a aquellas redes neuronales en las que sí existe la posibilidad de que dos neuronas, o dos partes de una red neuronal, puedan interaccionar y transmitirse información recíprocamente, en lugar de unidireccionalmente, formando con ello bucles de retroalimentación (feedback). Este tipo de redes reciben el nombre de redes neuronales recurrentes, y encuentran aplicación en la actualidad en múltiples áreas, como el procesamiento natural del lenguaje.

Red Neuronal Recurrente con bucles de retroalimentación

En azul se describe el flujo de información «hacia adelante» de una red neuronal desde las células de entrada (a la izquierda) a las de salida (a la derecha), pasando por las capas ocultas. En magenta se representan los flujos de información «hacia atrás», que provocan la formación de bucles de retroalimentación.

A nuestro juicio, dos son las características clave que distinguen a las redes neuronales recurrentes de las demás: La existencia de retroalimentación, y el añadido de una dimensión temporal al aprendizaje profundo.

El factor tiempo en la redes neuronales

Retroalimentación en computación

Con respecto a la retroalimentación, el creador de esta expresión, Norbert Wiener, hizo notar ya en su clásica obra, Cibernética (1948) que la corteza cerebral podía ser interpretada como un sistema interactivo, en el que el 90% de los estímulos de la corteza cerebral, y en el que existía un intercambio masivo de mensajes entre las diferentes partes del cerebro que permitía contener temporalmente el incremento inexorable de entropía.

Warren McCulloch y Walter Pitts constataron además en su trabajo de 1943 que la existencia de circuitos de neuronas (que ellos llamaban ciclos) en una red neuronal aumenta su poder computacional y permite la circulación de información indefinidamente a través de la red, creando con ello una suerte de memoria temporal.

Estados desplegados en eL tiempo

Esto enlaza con la segunda característica a la que hacíamos referencia: El despliegue del estado la red a través del tiempo. En una red neuronal alimentada hacia adelante, su estado depende tan sólo de los datos de entrada que se le proporcionen en un momento determinado. Por el contrario, el estado de una red neuronal recurrente no sólo depende de los datos de entrada, sino también del estado interno de red inmediatamente anterior. Esto permite que los patrones de excitación de la red sean capaces de memorizar cadenas de datos de entradas, como sucede en el caso de los sistemas de procesado natural del lenguaje, en los que la red neuronal va leyendo, paso a paso, cada uno de los caracteres del texto.

Ejemplo de Red Neuronal Recurrente

Las redes neuronales recurrentes son capaces, pues, de admitir secuencias de vectores de entrada (un vector de entrada es el conjunto de valores de activación de las neuronas de la capa de entrada) para producir secuencias de vectores de salida.

Supongamos que construimos una red básica cuyo objeto es el de traducir palabras del inglés al español. Su capa de entrada vendría constituida por 40 células correspondientes a las letras del alfabeto inglés, los dígitos del 0 al 9 y los signos de puntuación. La capa de salida vendría constituída por 50 células, con una función de activación softmax, que representarían las letras del alfabeto español, las vocales acentuadas, los dígitos del 0 al 9 y los signos de puntuación. En cada momento, la red lee una letra de la cadena de entrada. Cuando alcanza el carácter “_”, comienza a escribir la cadena de salida, con un carácter a cada momento.

Esquema temporal de una Red Neuronal Recurrente
A diferencia de lo que sucede con las redes neuronales ordinarias, en las que existe un sólo estado de máquina correspondiente a un único instante de tiempo, en esta red temporal se suceden seis estados de red diferentes. En los cuatro primeros, la red lee, mientras que en los dos últimos, la red emite su salida. Durante la fase de lectura, la red almacena información en su estado interno que luego es utilizada para componer la salida.

Existen tres grandes tipos de redes neuronales recurrentes utilizados en más del 90% de los sistemas de los sistemas de aprendizaje profundo existentes en la actualidad: las redes de Elman, LSTM, GNU.

Redes de Elman

Las redes de Elman son el modelo más simple de Red Neuronal Recurrente (en adelante, RNN). Tienen la misma estructura que las redes neuronales alimentadas hacia adelante, salvo por una única circunstancia: se permite que cada neurona se retroalimente a sí misma.

En este modelo, cada neurona de capa oculta tiene como función de activación la tangente hiperbólica (tanh). El valor de esta última es el estado de la neurona. Cada célula recibe como entrada su propio valor de salida en el instante inmediatamente anterior (t-1), amén de las salidas de las neuronas de la capa anterior, tal y como se indica en la siguiente ecuación:

x = w_{i}d_{i} + b + Uh_{t-1}
h_{t} = tanh(w_{i}d_{i} + b + Uh_{t-1})

Donde h_{t} es el estado de la neurona en el momento t, h_{t – 1} su estado en el momento inmediatamente anterior; w_{i} representa los pesos sinápticos, d_{i} los valores de activación de las neuronas de la capa anterior y b el sesgo. Como vemos, existe un término extra Uh_{t-1} que no existe en el caso de las redes no recurrentes, y que en este caso permite que cada neurona se excite a sí misma. El valor de activación en el momento anterior h_{t – 1} contribuye a la suma total de excitaciones de la célula (x), a través del coeficiente U. Este coeficiente funcionará de forma equivalente a un peso sináptico.

Neurona de Elman
En las neuronas del modelo de Elman se forma un pequeño bucle de retroalimentación, mediante el cual el axón la neurona excita una de sus propias dendritas. El peso sináptico de esta conexión de retroalimentación es U.

Algoritmos de aprendizaje

En las redes neuronales recurrentes, los algoritmos de aprendizaje y adaptación de los pesos sinápticos son algo más complejos, toda vez que hemos de incluir a la dimensión temporal. En los años 90 se desarrolló un algoritmo de aprendizaje para las RNN denominado retropropagación a través del tiempo (Backpropagation through time, BPTT), en cuya virtud, es necesario calcular el gradiente de la función de pérdida respecto al peso sináptico en cada instante de tiempo. El gradiente total, a partir del cual se calcula la tasa de modificación del peso sináptico, es la suma total de los valores del gradiente en cada uno de los instantes:

\frac{∂E}{∂w_{ij}}= ∑\frac{∂E_{t}}{∂w_{ij}}

El sumatorio tiene lugar a través de todos los instantes de tiempo, desde 0 hasta T.

w_{ij} = w_{ij} + α\frac{∂E}{∂w_{ij}}

Donde E_{t} es la función de pérdida en el momento t, w_{ij} es el valor del peso sináptico, \frac{∂E}{∂w_{ij}} es el gradiente en el tiempo t, α es la tasa de aprendizaje y T la amplitud temporal de la red (parametriza cuán larga es la secuencia temporal utilizada para el cálculo de los nuevos pesos sinápticos). Cuanto más grande sea T, mayor será el intervalo temporal que puede recordar la red.

Despliegue en el tiempo

La retropropagación a través del tiempo tiene la peculiaridad de que para calcular el gradiente (\frac{∂E_{t}}{∂w_{ij}}) en cada estado t, es necesario conocer los valores de dicho gradiente en los estados anteriores ( \frac{∂E_{t – 1}}{∂w_{ij}}, \frac{∂E_{t – 2}}{∂w_{ij}}, etc…). De este modo, se produce una suerte de propagación del gradiente desde los instantes pasados hacia los futuros. El comportamiento de una red recurrente a través del tiempo puede visualizarse desenrollando (unrolling) a la misma a lo largo del tiempo.

Desenrolle temporal de una Red Neuronal Recurrente
En esta imagen se representa el comportamiento de una red neuronal de tres neurona, utilizando dos dimensiones. La dimensión vertical representa el flujo de información a través de las tres células, desde la entrada hacia la salida. La dimensión horizontal representa los diferentes estados en que se encuentran las tres neuronas a lo largo del tiempo. Como vemos, para calcular los gradientes en el instante t, es necesario computarlos previamente en los estados anteriores.

Problema de la desaparición del gradiente

El algoritmo retropropagación a través del tiempo tiene el inconveniente de que, dado que se introduce una nueva dimensión temporal, se agrava el problema de la desaparición del gradiente (vanishing gradient problem), particularmente para los primeros instantes de tiempo.

En artículos previos de esta serie habíamos señalado que el gradiente de la función de pérdida se propagaba desde la capa de salida hacia las de entrada. Así, en las primeras capas de la red, el gradiente tendía rápidamente a cero. Esto ocasionaba que las neuronas de estas capas eran apenas veían sus pesos sinápticos alterados y por tanto, no tenía lugar ningún aprendizaje/entrenamiento. En las redes neuronales recurrentes este fenómeno se da también en la dimensión temporal y provoca que los gradientes correspondientes a los últimos instantes de tiempo apenas se vena influidos matemáticamente por los de los primeros instantes. La red pues no memoriza. Sólo es capaz de recordar con eficiencia los instantes de tiempo más recientes y con ello, su capacidad de procesar largas secuencias se ve mermada. La desaparición del gradiente provoca que la memoria de la red sea tan sólo corto plazo.

Para solucionar este problema, se han introducido dentro de las redes recurrentes nuevas estructuras como las memorias largas a corto plazo (Long Short-Term Memories, LSTM) y las unidades recurrentes con puerta (Gated Recurrent Unit, GRU).

Memoria Larga a Corto Plazo (LSTM)

Los investigadores alemanes Jürgen Schmidhuber y Sepp Hochreiter propusieron en los años 90 la creación de unidades complejas compuestas de varias neuronas. A partir de estas unidades se ensamblarían las diferentes capas de la red.

Cada unidad está compuesta por cinco neuronas: una célula de actualización (update cell), una célula de memoria (memory cell), y las tres puertas de control (control gates) de esta última. Las tareas de cada una de ellas son las siguientes:

 – célula de memoria (c_{t}): Se encarga de custodiar y almacenar información a lo largo del tiempo.

 – célula de actualización (u_{t}): Se encarga de recibir información nueva procedente de la capa anterior.

 – puerta de entrada (i_{t}): Determina cuánta cantidad información procedente de la célula de actualización (u_{t}) se incorpora a la célula de memoria (c_{t}).

 – puerta de salida (o_{t}): Determina cuánta información de la célula de memoria es transmitida a la capa siguiente. El estado de la unidad al completo h(t) se determina haciendo multiplicar el valor de la puerta de salida por el de la célula de memoria (ct). Dicho estado total se transmite a las neuronas de la capa posterior.

 – puerta de olvido (f_{t}): Determina cuánta información debe olvidar la célula de memoria en el instante t.

Funcionamiento de las LSTM

Neurona Long Short-Term Memory (LSTM)
Los símbolos de suma y producto representan operaciones aritméticas. El estado previo h_{t-1} y el input d_{t} son vectores que se concatenan, una operación representada como un punto. Este vector de entrada será el argumento de las tres puertas y la célula de actualización de la LSTM.

La función de activación de las células de actualización y memoria es la tangente hiperbólica (tanh). La de las tres puertas de control es la función logística (sigmoide σ).

Las tres puertas de control reciben como entrada los valores de la capa anterior (x_{t}) así como el estado total de la unidad (ht-1) en el instante inmediatamente anterior (t – 1). Existe, pues una suerte de bucle de retroalimentación, en cuya virtud, los valores de salida de la unidad al completo alimentan a cada una de las tres puertas de control.

Funcionalidad de las LSTM

Las LSTMs han encontrado un gran uso en los sistemas de procesamiento natural de lenguaje. El célebre artículo de Andrej Karpathy The Unreasonable Effectiveness of Recurrent Neural Networks muestra cómo es posible, con una red neuronal relativamente simple construir textos que imitan las estructuras lingüísticas de obras literarias como Guerra y Paz o las comedias de Shakespeare.

El autor, analizando los patrones de excitación de LSTMs individuales escogidas al azar, encontró que algunas de ellas se activaban cuando encontraban determinadas tipos de cadenas de texto, como URLs. Particularmente, una LSTM del modelo se excitaba extraordinariamente cuando encontraba los tres caracteres “://”, y dejaba de excitarse en cuanto leía de nuevo otro caracter “/”. Los valores de activación (ht) de esa LSTM indicaban, pues, al resto de la red, que lo que se estaba leyendo en ese momento era un URL

Unidad Recurrente con Puerta

En el año 2014 el investigador Kyunghyun Cho y su equipo introdujeron una versión simplificada de las LSTMs a la que denominaron Unidad Recurrente con Puerta (Gated Recurrent Unit, GRU). Esta unidad de compone cuatro células: una de ellas es la célula de estado candidato (candidate state cell, u_{t}, similar a la célula de actualización de las LSTMs), y las otras dos son puertas de control (entrada, z_{t}, y olvido, r_{t}) de la primera. La principal diferencia con las LSTMs es que las GRUs carecen de puerta de salida.

La activación de este tipo de unidades requiere de menores recursos computacionales que las LSTM. A pesar de ello, se ha encontrado que el rendimiento de las GRUs es similar o superior en caso de bases de datos pequeñas.

Conclusión

Tal y como hemos visto a lo largo de este artículo, la introdución de bucles de retroalimentación temporal en una red neuronal permite que esta última procese secuencias de datos a lo largo del tiempo. Sin embargo, esto tiene el inconveniente de agravar el problema de la desaparición del gradiente. Para prevenirlo se han ideado unidades complejas, compuestas de varias neuronas, como las LSTMs y las GRUs. Son estas unidades, y no las neuronas individuales, las que sirven de “ladrillos” con las que se construyen las diferentes capas de la red.

Lecturas recomendadas

 – Cabessa, J. y Villa, A. E. P. (2015) Recurrent Neural Networks and Super-Turing Interactive Computation.

 – Merrill, W.  es al. (2020) A Formal Hierarchy of RNN Architectures.

Aprende a programar redes neuronales desde cero.

La Máquina Oráculo utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies