Los Transformers en Deep Learning son un tipo de arquitectura de red neuronal diseñada para procesar secuencias de datos, especialmente en tareas de procesamiento del lenguaje natural (NLP). Fueron introducidos en el artículo "Attention Is All You Need" (2017) por Vaswani et al.
Principales características
Mecanismo de Atención (Self-Attention)
En lugar de procesar datos de manera secuencial (como en las RNNs), los Transformers analizan todas las palabras de una secuencia al mismo tiempo. Usan self-attention para asignar pesos a cada palabra según su relevancia en el contexto.
Arquitectura basada en capas
Incluye capas de Multi-Head Self-Attention, Normalización, y Feed-Forward. Se compone de un encoder (procesa la entrada) y un decoder (genera la salida).
Uso de Positional Encoding
Como no son secuenciales, usan positional encodings para conservar el orden de las palabras en una oración.
Escalabilidad y Paralelización
A diferencia de las RNNs, los Transformers pueden procesar grandes cantidades de datos en paralelo, acelerando el entrenamiento.
Mecanismo de Atención
Una red neuronal estándar consta de una serie de capas de transformación no lineal, donde cada capa produce una representación oculta de dimensión fija. Para tareas con espacios de entrada grandes, este paradigma dificulta el control de la interacción entre los componentes. Por ejemplo, en la traducción automática, la fuente consiste en una oración completa y la salida es una predicción para cada palabra en la oración traducida. El uso de una red estándar conduce a un cuello de botella de información, donde una capa oculta debe codificar toda la oración fuente. La atención proporciona un enfoque alternativo.
Una red de atención mantiene un conjunto de representaciones ocultas que escalan con el tamaño de la fuente. El modelo utiliza un paso de inferencia interna para realizar una selección suave sobre estas representaciones. Este método permite que el modelo mantenga una memoria de longitud variable y ha demostrado ser de importancia crucial para el escalado de sistemas para muchas tareas.
En otras palabras lo que implica es que estos mecanismos logran extraer mejor el siginificado de las palabras de acuerdo a las palabras que le rodean. Es decir, que en cierto grado logran capturar el sigfinicado de acuerdo a su contexto.
Definición
Formalmente como se descibe en el artículo Structured Attention Networks. Sea
El objetivo es producir un contexto
La atención de esta forma se puede aplicar a cualquier tipo de entrada, sin embargo, la función de anotación y la distribución de atención se parametrizan con redes neuronales, y el contexto producido es un vector que se alimenta a una red descendente.
Ejemplo
Consideremos el caso de la traducción automática neuronal basada en la atención introducida en Neural Machine Translation by Jointly Learning to Align and Translate (uno de los primeros artículos o sino el primero donde se menciona los mecanismos de atención.) Allí las secuencias de entrada
En resumen, interpretamos el mecanismo de atención como tomar la expectativa de una función de anotación
Self-Attention
A veces también llamado intra-atención, es un mecanismo de atención que relaciona diferentes posiciones de una sola secuencia para calcular una representación de la secuencia.
Una función de atención se puede describir como la asignación de una consulta y un conjunto de pares clave-valor a una salida, donde la consulta, las claves, los valores y la salida son todos vectores. La salida se calcula como una suma ponderada de los valores, donde el peso asignado a cada valor se calcula mediante una función de compatibilidad de la consulta con la clave correspondiente.
Scaled Dot-Product Attention
Atención del producto punto escalado. Las entradas consisten de consultas y claves de dimensión
En la práctica, se calcula la función de atención en un conjunto de consultas simultáneamente, empaquetadas juntas en una matriz
Si bien para valores pequeños de
Multi-Head Attention
En lugar de realizar una única función de atención con claves, valores y consultas de dimensiones
La atención de múltiples cabezas permite que el modelo preste atención de manera conjunta a la información de diferentes subespacios de representación en diferentes posiciones. Con una sola cabeza de atención, el promedio inhibe esto.
¿Cómo se usa la atención en este modelo?
En las capas de "atención del codificador-decodificador", las consultas provienen de la capa decodificadora anterior, y las claves y valores de memoria provienen de la salida del codificador. Esto permite que cada posición en el decodificador preste atención a todas las posiciones en la secuencia de entrada. Esto imita los mecanismos de atención del codificador-decodificador típicos en los modelos de secuencia a secuencia.
El codificador contiene capas de self-atention o autoatención. En una capa de autoatención, todas las claves, valores y consultas provienen del mismo lugar, en este caso, de la salida de la capa anterior del codificador. Cada posición del codificador puede atender a todas las posiciones de la capa anterior del codificador.
De manera similar, las capas de autoatención en el decodificador permiten que cada posición en el decodificador preste atención a todas las posiciones en el decodificador hasta esa posición inclusive. Necesitamos evitar el flujo de información hacia la izquierda en el decodificador para preservar la propiedad autorregresiva. Implementamos esto dentro de la atención del producto escalado enmascarando (estableciendo en
Position-wise Feed-Forward Networks
Además de las subcapas de atención, cada una de las capas de nuestro codificador y decodificador contiene una Feed-Forward Network totalmente conectada, que se aplica a cada posición por separado y de manera idéntica. Esta consta de dos transformaciones lineales con una activación ReLU entre ellas.
Positional Encoding
Dado que nuestro modelo no contiene recurrencia ni convolución, para que el modelo haga uso del orden de la secuencia, debemos inyectar alguna información sobre la posición relativa o absoluta de los tokens en la secuencia. Para ello, añadimos "codificaciones posicionales" a las incrustaciones (embeddings) de entrada en la parte inferior de las pilas del codificador y del decodificador. Las codificaciones posicionales tienen la misma dimensión
También se experimentó con el uso de incrustaciones posicionales aprendidas y descubrieron que las dos versiones produjeron resultados casi idénticos. Se tomo la versión sinusoidal porque puede permitir que el modelo se extrapole a longitudes de secuencia más largas que las encontradas durante el entrenamiento.