AI-For-Beginners/translations/es/lessons/5-NLP/16-RNN/README.md

9.1 KiB
Raw Blame History

Redes Neuronales Recurrentes

Cuestionario previo a la clase

En secciones anteriores, hemos estado utilizando representaciones semánticas ricas del texto y un clasificador lineal simple sobre las incrustaciones. Lo que hace esta arquitectura es capturar el significado agregado de las palabras en una oración, pero no toma en cuenta el orden de las palabras, ya que la operación de agregación sobre las incrustaciones eliminó esta información del texto original. Debido a que estos modelos no pueden modelar el orden de las palabras, no pueden resolver tareas más complejas o ambiguas, como la generación de texto o la respuesta a preguntas.

Para capturar el significado de la secuencia de texto, necesitamos utilizar otra arquitectura de red neuronal, que se llama red neuronal recurrente, o RNN. En una RNN, pasamos nuestra oración a través de la red un símbolo a la vez, y la red produce algún estado, que luego pasamos a la red nuevamente con el siguiente símbolo.

RNN

Imagen del autor

Dada la secuencia de entrada de tokens X0,...,Xn, la RNN crea una secuencia de bloques de red neuronal y entrena esta secuencia de extremo a extremo utilizando retropropagación. Cada bloque de red toma un par (Xi,Si) como entrada y produce Si+1 como resultado. El estado final Sn o (salida Yn) entra en un clasificador lineal para producir el resultado. Todos los bloques de red comparten los mismos pesos y se entrenan de extremo a extremo utilizando un pase de retropropagación.

Debido a que los vectores de estado S0,...,Sn se pasan a través de la red, es capaz de aprender las dependencias secuenciales entre las palabras. Por ejemplo, cuando la palabra not aparece en algún lugar de la secuencia, puede aprender a negar ciertos elementos dentro del vector de estado, resultando en negación.

Dado que los pesos de todos los bloques RNN en la imagen anterior se comparten, la misma imagen puede representarse como un bloque (a la derecha) con un bucle de retroalimentación recurrente, que pasa el estado de salida de la red de vuelta a la entrada.

Anatomía de una Celda RNN

Veamos cómo está organizada una celda RNN simple. Acepta el estado anterior Si-1 y el símbolo actual Xi como entradas, y tiene que producir el estado de salida Si (y, a veces, también estamos interesados en alguna otra salida Yi, como en el caso de las redes generativas).

Una celda RNN simple tiene dos matrices de pesos en su interior: una transforma un símbolo de entrada (llamémosla W), y otra transforma un estado de entrada (H). En este caso, la salida de la red se calcula como σ(W×Xi+H×Si-1+b), donde σ es la función de activación y b es un sesgo adicional.

Anatomía de la Celda RNN

Imagen del autor

En muchos casos, los tokens de entrada se pasan a través de la capa de incrustación antes de entrar en la RNN para reducir la dimensionalidad. En este caso, si la dimensión de los vectores de entrada es emb_size, y el vector de estado es hid_size - el tamaño de W es emb_size×hid_size, y el tamaño de H es hid_size×hid_size.

Memoria a Largo y Corto Plazo (LSTM)

Uno de los principales problemas de las RNN clásicas es el problema de los gradientes que desaparecen. Debido a que las RNN se entrenan de extremo a extremo en un solo pase de retropropagación, tienen dificultades para propagar el error a las primeras capas de la red, y por lo tanto, la red no puede aprender relaciones entre tokens distantes. Una de las formas de evitar este problema es introducir gestión de estado explícita mediante el uso de lo que se llama puertas. Hay dos arquitecturas bien conocidas de este tipo: Memoria a Largo y Corto Plazo (LSTM) y Unidad de Relé con Puerta (GRU).

Imagen que muestra un ejemplo de celda de memoria a largo y corto plazo

Fuente de la imagen TBD

La Red LSTM está organizada de manera similar a la RNN, pero hay dos estados que se pasan de capa a capa: el estado actual C y el vector oculto H. En cada unidad, el vector oculto Hi se concatena con la entrada Xi, y ellos controlan lo que sucede con el estado C a través de puertas. Cada puerta es una red neuronal con activación sigmoide (salida en el rango [0,1]), que se puede considerar como una máscara a nivel de bits cuando se multiplica por el vector de estado. Hay las siguientes puertas (de izquierda a derecha en la imagen anterior):

  • La puerta de olvido toma un vector oculto y determina qué componentes del vector C necesitamos olvidar y cuáles pasar.
  • La puerta de entrada toma cierta información de los vectores de entrada y ocultos e inserta en el estado.
  • La puerta de salida transforma el estado a través de una capa lineal con activación tanh, luego selecciona algunos de sus componentes utilizando un vector oculto Hi para producir un nuevo estado Ci+1.

Los componentes del estado C se pueden considerar como algunas banderas que pueden activarse y desactivarse. Por ejemplo, cuando encontramos un nombre Alice en la secuencia, podemos querer suponer que se refiere a un personaje femenino y activar la bandera en el estado de que tenemos un sustantivo femenino en la oración. Cuando encontramos más adelante las frases and Tom, levantaremos la bandera de que tenemos un sustantivo plural. Así, manipulando el estado, supuestamente podemos hacer un seguimiento de las propiedades gramaticales de las partes de la oración.

Un recurso excelente para entender los entresijos de LSTM es este gran artículo Understanding LSTM Networks de Christopher Olah.

RNNs Bidireccionales y Multicapa

Hemos discutido redes recurrentes que operan en una dirección, desde el comienzo de una secuencia hasta el final. Esto parece natural, ya que se asemeja a la forma en que leemos y escuchamos el habla. Sin embargo, dado que en muchos casos prácticos tenemos acceso aleatorio a la secuencia de entrada, podría tener sentido realizar cálculos recurrentes en ambas direcciones. Tales redes se llaman RNNs bidireccionales. Al tratar con una red bidireccional, necesitaríamos dos vectores de estado oculto, uno para cada dirección.

Una red recurrente, ya sea unidireccional o bidireccional, captura ciertos patrones dentro de una secuencia y puede almacenarlos en un vector de estado o pasarlos a la salida. Al igual que con las redes convolucionales, podemos construir otra capa recurrente sobre la primera para capturar patrones de nivel superior y construir a partir de patrones de bajo nivel extraídos por la primera capa. Esto nos lleva a la noción de una RNN multicapa que consiste en dos o más redes recurrentes, donde la salida de la capa anterior se pasa a la siguiente capa como entrada.

Imagen que muestra una RNN multicapa de memoria a largo y corto plazo

Imagen de esta maravillosa publicación de Fernando López

✍️ Ejercicios: Incrustaciones

Continúa tu aprendizaje en los siguientes cuadernos:

Conclusión

En esta unidad, hemos visto que las RNNs se pueden utilizar para la clasificación de secuencias, pero de hecho, pueden manejar muchas más tareas, como la generación de texto, la traducción automática y más. Consideraremos esas tareas en la próxima unidad.

🚀 Desafío

Lee algo de literatura sobre LSTMs y considera sus aplicaciones:

Cuestionario posterior a la clase

Revisión y Autoestudio

Asignación: Cuadernos

Descargo de responsabilidad:
Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o malas interpretaciones que surjan del uso de esta traducción.