Última actualización el 5 de octubre de 2021
A medida que crece la popularidad de la atención en el aprendizaje automático, también lo hace la lista de arquitecturas neuronales que incorporan un mecanismo de atención.
En este tutorial, descubrirá las arquitecturas neuronales más destacadas que se han utilizado junto con la atención.
Después de completar este tutorial, obtendrá una mejor comprensión de cómo se incorpora el mecanismo de atención en diferentes arquitecturas neuronales y con qué propósito.
Empecemos.
Descripción general del tutorial
Este tutorial se divide en cuatro partes; son:
- La arquitectura del codificador-decodificador
- El transformador
- Graficar redes neuronales
- Redes neuronales con memoria aumentada
La arquitectura del codificador-decodificador
La arquitectura de codificador-decodificador se ha aplicado ampliamente a tareas de secuencia a secuencia (seq2seq) para el procesamiento del lenguaje. Ejemplos de tales tareas, dentro del dominio del procesamiento del lenguaje, incluyen la traducción automática y los subtítulos de imágenes.
El primer uso de la atención fue como parte del marco codificador-decodificador basado en RNN para codificar oraciones de entrada largas [Bahdanau et al. 2015]. En consecuencia, la atención se ha utilizado más ampliamente con esta arquitectura.
– Una encuesta atenta de modelos de atención, 2021.
Dentro del contexto de la traducción automática, tal tarea seq2seq implicaría la traducción de una secuencia de entrada, $ I = {A, B, C,
Para una arquitectura de codificador-decodificador basada en RNN sin atención, desenrollar cada RNN produciría el siguiente gráfico:
Aquí, el codificador lee la secuencia de entrada una palabra a la vez, actualizando cada vez su estado interno. Se detiene cuando encuentra el símbolo
El decodificador genera la secuencia de salida una palabra a la vez, tomando la palabra en el paso de tiempo anterior ($ t $ – 1) como entrada para generar la siguiente palabra en la secuencia de salida. Un símbolo
Como hemos mencionado anteriormente, el problema con la arquitectura del codificador-decodificador sin atención surge cuando las secuencias de diferente longitud y complejidad están representadas por un vector de longitud fija, lo que potencialmente da como resultado que el decodificador pierda información importante.
Para evitar este problema, una arquitectura basada en la atención introduce un mecanismo de atención entre el codificador y el descodificador.
Aquí, el mecanismo de atención ($ phi $) aprende un conjunto de pesos de atención que capturan la relación entre los vectores codificados (v) y el estado oculto del decodificador (h), para generar un vector de contexto (c) a través de un valor ponderado. suma de todos los estados ocultos del codificador. Al hacerlo, el decodificador tendría acceso a toda la secuencia de entrada, con un enfoque específico en la información de entrada que es más relevante para generar la salida.
El transformador
La arquitectura del transformador también implementa un codificador y decodificador, sin embargo, a diferencia de las arquitecturas que hemos revisado anteriormente, no se basa en el uso de redes neuronales recurrentes. Por esta razón, revisaremos esta arquitectura y sus variantes por separado.
La arquitectura del transformador prescinde de cualquier recurrencia y, en cambio, se basa únicamente en un auto-atención (o intra-atención) mecanismo.
En términos de complejidad computacional, las capas de auto-atención son más rápidas que las capas recurrentes cuando la longitud de secuencia n es menor que la dimensionalidad de representación d…
– Aprendizaje profundo avanzado con Python, 2019.
El mecanismo de auto-atención se basa en el uso de consultas, teclas y valores, que se generan multiplicando la representación del codificador de la misma secuencia de entrada con diferentes matrices de peso. El transformador utiliza producto escalar (o multiplicativo) atención, donde cada consulta se compara con una base de datos de claves mediante una operación de producto punto, en el proceso de generar los pesos de atención. Estos pesos se multiplican luego a los valores para generar un vector de atención final.
De manera intuitiva, dado que todas las consultas, claves y valores se originan en la misma secuencia de entrada, el mecanismo de auto atención captura la relación entre los diferentes elementos de la misma secuencia, destacando aquellos que son más relevantes entre sí.
Dado que el transformador no depende de los RNN, la información posicional de cada elemento en la secuencia se puede conservar aumentando la representación del codificador de cada elemento con codificación posicional. Esto significa que la arquitectura del transformador también se puede aplicar a tareas en las que la información no necesariamente esté relacionada secuencialmente, como las tareas de visión por computadora de clasificación, segmentación o subtítulos de imágenes.
Los transformadores pueden capturar dependencias globales / de largo alcance entre la entrada y la salida, admitir el procesamiento en paralelo, requerir sesgos inductivos mínimos (conocimiento previo), demostrar escalabilidad a grandes secuencias y conjuntos de datos y permitir el procesamiento independiente del dominio de múltiples modalidades (texto, imágenes, voz) utilizando bloques de procesamiento similares.
– Una encuesta atenta de modelos de atención, 2021.
Además, varias capas de atención se pueden apilar en paralelo en lo que se ha denominado como atención de múltiples cabezas. Cada cabezal trabaja en paralelo sobre diferentes transformaciones lineales de la misma entrada, y las salidas de los cabezales se concatenan para producir el resultado de atención final. El beneficio de tener un modelo de múltiples cabezas es que cada cabeza puede atender diferentes elementos de la secuencia.
Algunas variantes de la arquitectura del transformador que abordan las limitaciones del modelo vainilla son:
- Transformer-XL: introduce la recurrencia para que pueda aprender la dependencia a largo plazo más allá de la longitud fija de las secuencias fragmentadas que se utilizan normalmente durante el entrenamiento.
- XLNet: un transformador bidireccional que se basa en Transfomer-XL mediante la introducción de un mecanismo basado en permutación, donde el entrenamiento se lleva a cabo no solo en el orden original de los elementos que componen la secuencia de entrada, sino también en diferentes permutaciones del orden de la secuencia de entrada.
Graficar redes neuronales
Un gráfico se puede definir como un conjunto de nodos (o vértices) que están vinculados mediante conexiones (o bordes).
Un gráfico es una estructura de datos versátil que se adapta bien a la forma en que se organizan los datos en muchos escenarios del mundo real.
– Aprendizaje profundo avanzado con Python, 2019.
Tomemos, por ejemplo, una red social donde los usuarios pueden ser representados por nodos en un gráfico y sus relaciones con amigos por bordes. O una molécula, donde los nodos serían los átomos y los bordes representarían los enlaces químicos entre ellos.
Podemos pensar en una imagen como un gráfico, donde cada píxel es un nodo, conectado directamente a sus píxeles vecinos …
– Aprendizaje profundo avanzado con Python, 2019.
De particular interés son los Redes de atención de gráficos (GAT) que emplean un mecanismo de auto-atención dentro de una red convolucional gráfica (GCN), donde esta última actualiza los vectores de estado realizando una convolución sobre los nodos del gráfico. La operación de convolución se aplica al nodo central y los nodos vecinos mediante un filtro ponderado, para actualizar la representación del nodo central. Los pesos de los filtros en un GCN pueden ser fijos o aptos para aprender.
En comparación, un GAT asigna ponderaciones a los nodos vecinos utilizando puntuaciones de atención.
El cálculo de estas puntuaciones de atención sigue un procedimiento similar al de los métodos para las tareas seq2seq revisados anteriormente: (1) las puntuaciones de alineación se calculan primero entre los vectores de características de dos nodos vecinos, a partir de los cuales (2) las puntuaciones de atención se calculan aplicando un softmax operación, y finalmente (3) un vector de características de salida para cada nodo (equivalente al vector de contexto en una tarea seq2seq) se puede calcular mediante una combinación ponderada de los vectores de características de todos los vecinos.
La atención de múltiples cabezales también se puede aplicar aquí, de una manera muy similar a como se propuso en la arquitectura del transformador que hemos visto anteriormente. A cada nodo del gráfico se le asignarían varios cabezales y sus resultados se promediarían en la capa final.
Una vez que se ha producido el resultado final, este se puede utilizar como entrada para una capa posterior específica de la tarea. Las tareas que pueden resolverse mediante gráficos pueden ser la clasificación de nodos individuales entre diferentes grupos (por ejemplo, al predecir a cuál de varios clubes una persona decidirá convertirse en miembro); o la clasificación de bordes individuales para determinar si existe un borde entre dos nodos (por ejemplo, para predecir si dos personas en una red social pueden ser amigos); o incluso la clasificación de un gráfico completo (por ejemplo, para predecir si una molécula es tóxica).
Redes neuronales con memoria aumentada
En las arquitecturas basadas en la atención del codificador-decodificador que hemos revisado hasta ahora, el conjunto de vectores que codifican la secuencia de entrada se puede considerar como memoria externa, en la que escribe el codificador y desde la que lee el decodificador. Sin embargo, surge una limitación porque el codificador solo puede escribir en esta memoria y el decodificador solo puede leer.
Las redes neuronales de memoria aumentada (MANN) son algoritmos recientes que tienen como objetivo abordar esta limitación.
La máquina de Turing neuronal (NTM) es un tipo de MANN. Consiste en un controlador de red neuronal que toma una entrada para producir una salida y realiza operaciones de lectura y escritura en la memoria.
La operación realizada por el cabezal de lectura es similar al mecanismo de atención empleado para las tareas seq2seq, donde un peso de atención indica la importancia del vector en consideración en la formación de la salida.
Un cabezal de lectura siempre lee la matriz de memoria completa, pero lo hace atendiendo a diferentes vectores de memoria con diferentes intensidades.
– Aprendizaje profundo avanzado con Python, 2019.
La salida de una operación de lectura se define entonces mediante una suma ponderada de los vectores de memoria.
El cabezal de escritura también hace uso de un vector de atención, junto con un vector de borrar y sumar. Se borra una ubicación de memoria en función de los valores de los vectores de atención y borrado, y la información se escribe mediante el vector de adición.
Los ejemplos de aplicaciones para MANN incluyen la respuesta a preguntas y los bots de chat, donde una memoria externa almacena una gran base de datos de secuencias (o hechos) que la red neuronal aprovecha. El papel del mecanismo de atención es crucial en la selección de hechos de la base de datos que son más relevantes que otros para la tarea en cuestión.
Otras lecturas
Esta sección proporciona más recursos sobre el tema si desea profundizar.
Libros
Documentos
Resumen
En este tutorial, descubrió las arquitecturas neuronales más destacadas que se han utilizado junto con la atención.
Específicamente, obtuvo una mejor comprensión de cómo se incorpora el mecanismo de atención en diferentes arquitecturas neuronales y con qué propósito.
¿Tiene usted alguna pregunta?
Haga sus preguntas en los comentarios a continuación y haré todo lo posible para responder.