# Atención (aprendizaje automático)

En las redes neuronales artificiales, la atención es una técnica que pretende imitar la atención cognitiva. Este efecto realza algunas partes de los datos de entrada mientras que disminuye otras. La motivación es que la red debe dedicar más atención a las partes importantes de los datos, aunque puedan ser una pequeña porción de una imagen o una frase. El aprendizaje de qué parte de los datos es más importante que otra depende del contexto, y se entrena mediante descenso del gradiente.
Los mecanismos similares a la atención se introdujeron en los años 90 con nombres como módulos multiplicativos, unidades sigma pi, e hiperredes[. La flexibilidad de estos modelos proviene de la introducción de pesos "blandos" que pueden cambiar durante el tiempo de ejecución, en contraste con los pesos estándar que deben permanecer fijos en tiempo de ejecución. Entre los usos de la atención se incluyen la memoria en controladores de pesos rápidos, máquinas de Turing neuronales, tareas de razonamiento en ordenadores neuronales diferenciables, procesamiento del lenguaje en transformadores y LSTM, y procesamiento de datos multisensoriales (sonido, imágenes, vídeo y texto) en perceptores.

## Resumen

Correlacionar las distintas partes de una frase o una imagen puede contribuir a captar su estructura. El esquema de atención brinda una oportunidad a la red neuronal para lograrlo. Por ejemplo, en la frase "See that girl run." (en español: Mira a esa chica correr), cuando la red procesa "that" (en español: esa) queremos que sepa que esa palabra se refiere a "girl" (en español: chica). El siguiente diagrama muestra cómo una red correctamente entrenada puede conseguirlo.
* Esquema de autoatención utilizado en el entrenamiento no supervisado de un modelo de lenguaje (Esquema nº 4 de la sección Variantes, que aparece abajo). La frase de entrada se divide en 3 vías de procesamiento (izquierda) y se fusiona al final en el vector Context (derecha), que puede ser alimentado a otra capa neuronal para predecir la siguiente palabra o hacer otras tareas. Para facilitar la notación, tomamos un tamaño de incrustación de palabras de 300 y un número de neuronas de 100 en cada subred de la cabeza de atención.
* - X es la matriz de entrada de incrustaciones de palabras, de tamaño 4 x 300. x es el vector de palabras para "that" (en español: esa).
* - La cabeza de atención consta de 3 redes neuronales a entrenar. Cada una tiene 100 neuronas con una matriz de pesos de tamaño 300 x 100.
* - (*) este cálculo es softmax( qK$^T$ / sqrt(100) ), sin V. Reescalando por sqrt(100) evita una gran variación en qK$^T$ que permitiría que una sola palabra dominara excesivamente el softmax, lo que daría lugar a que sólo se prestara atención a una palabra, como haría un hard max discreto.
* Notación: En este caso, la fórmula softmax por filas comúnmente escrita asume que los vectores son filas, lo que contradice la notación matemática estándar de vectores columna. Lo más correcto sería tomar la transposición del vector contextual y utilizar la fórmula softmax por columnas, lo que daría como resultado la forma más correcta.
* Context = (XV$_W$)$^T$ * softmax( (K$_W$ X$^T$) * (xQ$_w$)$^T$ / sqrt(100) ).
La estructura de los datos de entrada se captura en las ponderaciones Qw y Kw, y las ponderaciones Vw expresan esa estructura en términos de características más significativas para la tarea para la que se está entrenando. Por este motivo, los componentes de la cabeza de atención se denominan Query (Q), Key (K) y Value (V), una analogía poco precisa y posiblemente engañosa con los sistemas de bases de datos relacionales.
Podemos acelerar enormemente los cálculos paralelizando lo anterior. Tenga en cuenta que el vector de contexto de "that" no depende de los vectores de contexto de las demás palabras; por tanto, podemos calcular todos los vectores de contexto a la vez utilizando simplemente la matriz X de word embedding apiladas en lugar de x en la fórmula anterior. Ahora, el softmax debe interpretarse como un softmax matricial que actúa sobre filas separadas. Esto supone una enorme ventaja sobre las redes recurrentes, que deben operar secuencialmente.

## Ejemplo de traducción

Para construir una máquina que traduzca del inglés al francés, se injerta una unidad de atención en el codificador-decodificador básico (diagrama de abajo). En el caso más sencillo, la unidad de atención consiste en productos de puntos de los estados recurrentes del codificador y no necesita entrenamiento. En la práctica, la unidad de atención consta de 3 capas de red neuronal entrenadas y totalmente conectadas denominadas query (consulta), key (clave) y value (valor).
Codificador-decodificador con atención. La parte izquierda (líneas negras) es el codificador-decodificador, la parte central (líneas naranjas) es la unidad de atención y la parte derecha (en gris y colores) son los datos calculados. Las regiones grises de la matriz H y el vector w son valores cero. Los subíndices numéricos indican el tamaño de los vectores, mientras que los subíndices i e i - 1 indican los pasos temporales.
Leyenda :
| Etiqueta | Descripción |
| 100 | Longitud máxima de la oración |
| 300 | Tamaño del embedding (dimensión de la palabra) |
| 500 | Longitud del vector oculto |
| 9k, 10k | Tamaño del diccionario de los idiomas de entrada y salida respectivamente. |
| x, Y | 9k y 10k vectores del diccionario 1-hot. x → x implementado como una tabla de búsqueda en lugar de una multiplicación vectorial. Y es el maximizador 1-hot de la capa D del decodificador lineal; es decir, toma el argmax de la salida de la capa lineal de D. |
| x | Vector de word embedding de 300 caracteres. Los vectores suelen calcularse previamente a partir de otros proyectos como GloVe o Word2Vec. |
| h | Vector oculto del codificador de 500 palabras. En cada momento, este vector resume todas las palabras anteriores. La h final puede considerarse un vector "frase", o un vector pensamiento, como lo llama Hinton. |
| s | Vector de estado oculto de 500 decodificadores de largo. |
| E | Codificador RNN de 500 neuronas. 500 salidas. El recuento de entradas es de 800-300 del embedding de origen + 500 de las conexiones recurrentes. El codificador alimenta directamente al decodificador sólo para inicializarlo, pero no posteriormente; de ahí que esa conexión directa se muestre muy tenue. |
| D | Descodificador de 2 capas. La capa recurrente tiene 500 neuronas y la capa lineal totalmente conectada tiene 10k neuronas (el tamaño del vocabulario objetivo). Sólo la capa lineal tiene 5 millones (500 × 10k) de ponderaciones, unas 10 veces más que la capa recurrente. |
| score | Puntuación (en inglés: score) de alineación de 100 caracteres |
| w | Peso de atención vectorial de 100 caracteres. Se trata de pesos "suaves" que cambian durante el avance, en contraste con los pesos neuronales "duros" que cambian durante la fase de aprendizaje. |
| A | Módulo de atención: puede ser un producto de puntos de estados recurrentes o las capas totalmente conectadas query-key-value. La salida es un vector w de 100 caracteres. |
| H | 500×100. 100 vectores ocultos h concatenados en una matriz |
| c | Vector de contexto de 500 caracteres = H * w. c es una combinación lineal de h vectores ponderados por w. |
Vistos como una matriz, los pesos de atención muestran cómo la red ajusta su enfoque según el contexto.
| | I | love | you |
| je | 0.94 | 0.02 | 0.04 |
| t' | 0.11 | 0.01 | 0.88 |
| aime | 0.03 | 0.95 | 0.02 |
Esta visión de los pesos de atención aborda el problema de la "explicabilidad" de las redes neuronales. Las redes que realizan traducciones literales sin tener en cuenta el orden de las palabras mostrarían las puntuaciones más altas a lo largo de la diagonal (dominante) de la matriz. La dominancia fuera de la diagonal muestra que el mecanismo de atención es más sofisticado. En la primera pasada por el descodificador, el 94% del peso de la atención recae en la primera palabra inglesa "I", por lo que la red ofrece la palabra "je". En la segunda pasada por el descodificador, el 88% del peso de la atención está en la tercera palabra inglesa "you", por lo que ofrece "t'". En la última pasada, el 95% de la atención se centra en la segunda palabra inglesa "love", por lo que ofrece "aime".

## Variantes

Muchas variantes de la atención aplican pesos suaves, como por ejemplo
* "focos internos de atención" generados por programadores de pesos rápidos o controladores de pesos rápidos (1992) (también conocidos como transformadores con "autoatención linealizada"). Una red neuronal lenta aprende por descenso de gradiente a programar los pesos rápidos de otra red neuronal a través de productos externos de patrones de activación autogenerados llamados "FROM" y "TO" ("DESDE" y "HACIA") que en terminología de transformadores se denominan "key" y "value". Este "mapeo de atención" de pesos rápidos se aplica a las queries (consultas).
* Atención de Bahdanau, también denominada atención aditiva,
* Atención de Luong que se conoce como atención multiplicativa, construida sobre la atención aditiva,
* autoatención altamente paralelizable introducida en 2016 como atención descomponible y utilizada con éxito en transformadores un año después.
Para las redes neuronales convolucionales, los mecanismos de atención pueden distinguirse por la dimensión sobre la que operan, en concreto: atención espacial, atención de canal, o combinaciones.
Estas variantes recombinan las entradas del lado del codificador para redistribuir esos efectos a cada salida objetivo. A menudo, una matriz de productos de puntos de tipo correlación proporciona los coeficientes de reponderación.
| 1. producto por puntos codificador-decodificador | 2. QKV codificador-decodificador | 3. producto por puntos sólo codificador | 4. QKV sólo codificador | 5. Tutorial de Pytorch |
| Para calcular la atención se necesitan tanto un codificador como un descodificador. | Para calcular la atención se necesitan tanto un codificador como un descodificador. | El decodificador no se utiliza para calcular la atención. Con sólo 1 entrada en corr, W es una autocorrelación de productos de puntos. w$_{ij}$ = x$_i$ x$_j$ | El decodificador no se utiliza para calcular la atención. | Se utiliza una capa totalmente conectada para calcular la atención en lugar de la correlación punto-producto. |
Leyenda :
| Etiqueta | Descripción |
| Variables X, H, S, T | Las variables en mayúsculas representan toda la frase, y no sólo la palabra actual. Por ejemplo, H es una matriz del estado oculto del codificador: una palabra por columna. |
| S, T | S, estado oculto del decodificador; T, embedding de la palabra objetivo. En la fase de entrenamiento de la variante Tutorial de Pytorch, T alterna entre 2 fuentes dependiendo del nivel de teacher forcing utilizado. T puede ser el embedding de la palabra de salida de la red, es decir, embedding(argmax(FC output)). Alternativamente, con el teacher forcing, T podría ser el embedding de la palabra correcta conocida, que puede ocurrir con una probabilidad de forzamiento constante, como 1/2. |
| X, H | H, estado oculto del codificador; X, word embedding de entrada. |
| W | Coeficientes de atención |
| Qw, Kw, Vw, FC | Matrices de pesos para query, key, vector respectivamente. FC es una matriz de pesos totalmente conectada. |
| ⊕, ⊗ | ⊕, concatenación de vectores; ⊗, multiplicación de matrices. |
| corr | Softmax por columnas (matriz de todas las combinaciones de productos de puntos). Los productos por puntos son x$_i$* x$_j$ en la variante #3, h$_i$* s$_j$ en la variante 1, y column $_i$ ( Kw* H )* column $_j$ ( Qw* S ) en variante 2, y column $_i$ (Kw* X)* column $_j$ (Qw* X) en la variante 4. La variante 5 utiliza una capa totalmente conectada para determinar los coeficientes. Si la variante es QKV, los productos escalares se normalizan por el factor sqrt(d), donde d es la altura de las matrices QKV. |