Al inspeccionar una escena visual, nuestro nervio óptico recibe información del orden de $ 10 ^ 8 $ bits por segundo, superando con creces lo que nuestro cerebro puede procesar por completo.
Nuestros antepasados habían aprendido de la experiencia
(también conocidos como datos) que no todas las entradas sensoriales son iguales
.
A lo largo de la historia de la humanidad, la capacidad de dirigir la atención solo una fracción de la información de interés ha habilitado nuestro cerebro para asignar recursos de manera más inteligente.
señal no volitiva
(no voluntaria) como la señal volitiva
(voluntaria).Auto-atención visual
Fuente Dive into Deep learning
Auto-atención visual
Fuente Dive into Deep learning
queries
).atención conjunta
(pooling attention).valores
(values) en el contexto de los mecanismos de atención. valor
está emparejado con una clave
, que se puede pensar en la señal no volitiva de esa entrada sensorial.Diagrama de atención
Fuente Dive into Deep learning
Para mantener las cosas simples consideremos el siguiente problema de regresión: dado un conjunto de datos de pares de entrada-salida $\{(x_1, y_1), \ldots, (x_n, y_n)\}$, como enseñarle a $f$ a predecir la salida $\hat{y} = f(x)$ para cualquier entranada nueva $x$?
Aquí generamos un conjunto de datos artificial de acuerdo con la siguiente función no lineal con el término de ruido $\epsilon$:
$$y_i = 2\sin(x_i) + x_i^{0.8} + \epsilon,$$en donde $\epsilon$ obedece a una distribución normal con media cero y desviación estándar de 0,5. 50 ejemplos de entrenamiento y 50 ejemplos de prueba son generadas.
Comenzamos con quizás el estimador más "tonto" del mundo para este problema de regresión: utilizando la agrupación promedio para promediar todos los resultados entrenamiento:
$$f(x) = \frac{1}{n}\sum_{i=1}^n y_i,$$Aprendizaje automático con mecanismos de atención
Fuente Dive into Deep learning
Obviamente, la agrupación promedio omite las entradas $x_i$. Se propuso una mejor idea por Nadaraya y Watson para pesar las salidas $y_i$ de acuerdo con sus localizaciones de entrada:
$$f(x) = \sum_{i=1}^n \frac{K(x - x_i)}{\sum_{j=1}^n K(x - x_j)} y_i,$$en donde $K$ es un kernel. El estimador en la ecuación anterior se llama Regresión de kernel de Nadaraya-Watson. Para cualquier consulta, sus ponderaciones de atención sobre todos los pares clave-valor son una distribución de probabilidad válida: no son negativas y suman uno.
Desde la perspectiva de la atención, podemos reescribir esta ecuación en una forma de atención agrupada:
$$f(x) = \sum_{i=1}^n \alpha(x, x_i) y_i,$$Para obtener intuiciones de la atención conjunta, solo considere un kernel gaussiano definido como $K(u) = \frac{1}{\sqrt{2\pi}} \exp(-\frac{u^2}{2})$. Conectando el kernel gaussiano a las ecuaciones anteriores se obtiene
$$ f(x) =\sum_{i=1}^n \alpha(x, x_i) y_i = \sum_{i=1}^n \frac{\exp\left(-\frac{1}{2}(x - x_i)^2\right)}{\sum_{j=1}^n \exp\left(-\frac{1}{2}(x - x_j)^2\right)} y_i $$En esta última ecuación, una clave $x_i$ que es más cercana a la consulta y $x$ prestará más atención via un peso de atención más grande para el correspondiente valor $y_i$.
Aprendizaje automático con mecanismos de atención
Fuente Dive into Deep learning
A un nivel alto, podemos usar el algoritmo anterior para instanciar el marco de los mecanismos de atención.
Denotando una función de puntuación de atención por $\mathbf{a} $, la imagen ilustra cómo la salida de la atención agrupada se puede calcular como una suma ponderada de valores. Dado que los pesos de atención son una distribución de probabilidad, la suma ponderada es esencialmente un promedio ponderado.
Función de puntaje (score)
Fuente Dive into Deep learning
La maquinas de aprendizaje estadístico fueron durante mucho tiempo la tendencia dominate en el área de traducción automática. Modernamente, esas máquinas han sido remplazadas por máquinas neuronales de traducción
(neural machine translation o NMT). la NMT están basados en el framework seq2seq.
El framework seq2seq se basa en un autoencoder
. El encoder es una red neuronal recurrente que va leyendo las palabras de entrada una por una y construye representación vectorial de cada una de estas, del mismo tamaño (embedding). El decoder es otra red neural recurrente, que condicionada sobre las entradas va generando las palabras de salida una por una, Sequence to Sequence Learning with Neural Networks (Sutskever et. al, 2014).
seq2seq
es un modelo de aprendizaje que convierte una secuencia de entrada en una secuencia de salida. En este contexto, la secuencia es una lista de símbolos, correspondiente a las palabras en una oración. Modelo clásico seq2seq.
Fuente: Attn: Illustrated Attention
El modelo consta escencialmente de las siguientes capas:
Estructura autoencoder de un modelo seq2seq de *pregunta/respuesta*.
Modelo conceptual de atención.
El mecanismo de atención se enfoca sobre diferentes palabras asignando a cada palabra un puntaje (score
). Estos puntajes son transformados con la función softmax
, lo cual asigna un peso cada palabra. Con estos puntajes los estados ocultos del encoder son agregados mediante una suma pesada de los estados ocultos usando tales pesos. La construcción de una capa atencional puede subdividirse en cuatro pasos.
Primero se preparan todos los estados ocultos del encoder y el primer estado oculto del decoder. En la imagen los estos ocultos del encoder son los círculos en verde y el primer estado oculto del decoder se muestra en color rojo.
Modelo de atención. Paso 0. preparación de los estados ocultos
El puntaje asociado para cada estado oculto del encoder se obtiene mediante el producto escalar entre el valor del estado oculto y el valor del primer estado oculto del decoder. Si $hd_1 = (y_{11},\ldots, y_{1m})$ es el vector que representa el primer estado oculto del decoder y $he_i = (x_{i1},\ldots, x_{im})$ representa el i-ésimo estado oculto del encoder, entoces el puntaje asociado al estado oculto $i$ es dado por
$$ \text{score}_{i1} =<hd_1, he_i> = y_{11}x_{i1}+ \ldots + y_{1m}x_{im}, i =1,\cdots, m $$Model de atención. Paso 1. Puntajes para cada estado oculto del encoder
Recurede que con esta transfromación todos los puntajes quedan en el intervalo $[0, 1]$ y suman 1.
Modelo de atención. Paso 2. Los puntajes para cada estado oculto del encoder se transforman a la escala softmax
El resultado se llama vector de alineación (alignment vector
) o vector de anotación (annotation vector
). Este el momento exácto en el cual ocurre la alineación entre la entrada y la salida.
Modelo de atención. Paso 3. Vectores de alineación (softmax)
encoder | puntaje | softmax | alineación |
---|---|---|---|
[0, 2, 5] | 13 | 0 | [0, 0, 0] |
[3, 5, 4] | 30 | 1 | [3, 5, 4] |
[2, 1, 0] | 5 | 0 | [0, 0, 0] |
[1, 1, 0] | 6 | 0 | [0, 0, 0] |
context = [3, 5, 4] = [0, 0, 0] + [3, 5, 4] + [0, 0, 0] + [0, 0, 0]
Modelo de atención. Paso 4. vector de contexto
La forma como se haga esto depende de la arquitectura de diseño. Vamos a ver algunas de estas arquitecturas en las siguientes secciones.
Modelo de atención. Paso 5. Alimenta el decodificador con el vector de contexto
La siguiente imagen muestra el proceso completo en la capa de atención.
Capa de atención completa
Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation (Wu et. al, 2016). Debido a que la mayoría de nosotros debe haber usado Google Translate de una forma u otra, parece imperativo hablar sobre el NMT de Google, que se implementó en 2016. GNMT es una combinación de los 2 ejemplos anteriores que hemos visto (muy inspirados en el primero).
NMT. Google. Las conexiones de salto se indican mediante flechas curvas. Tenga en cuenta que las celdas LSTM solo muestran el estado oculto y la entrada; no muestra la entrada del estado de la celda.
¿Qué tienen en común BERT, RoBERTa, ALBERT, SpanBERT, DistilBERT, SesameBERT, SemBERT, SciBERT, BioBERT, MobileBERT, TinyBERT y CamemBERT?. NO es propiamente BERT.
Respuesta: auto-atención (self-attention
)🤗. El modelado moderno de tareas de comprensión del lenguaje confían por completo en los mecanismos de auto-atención para generar dependencias globales entre entradas y salidas.
La auto-atención similar a la atención. Un mecanismo de atención siguen el siguiente algoritmo.
clave
(key), consulta
(query) y valor
(value).valores
valores ponderados
para obtener la Salida 1Las entradas correponden a una secuencia de palabras sumergidas (embebidas) en un sumergimiento (embbeding) que vamos a supone que es de tamaño 4. Para el ejemplo supondremos que que la secuencia consta de 3 palabras. Entonces tenemos 3 entradas de tamaña 4.
Auto-atención: Entradas.
Fuente: Illustrated self attention
En el ejemplo tenemos tres entradas.
Matricialmente escribimos
$$ E = \begin{pmatrix} 1 & 0 & 1 & 0\\ 0 & 2 & 0 & 2\\ 1 & 1 & 1 &1 \end{pmatrix}= \begin{pmatrix} e_1\\ e_2\\ e_3\\ \end{pmatrix}. $$Cada una de las entradas se transforman en tres diferentes vectores de algún tamaño. Para ello se cosntruyen tres transfomaciones lineales (o afines), digamos $W_k$, $W_q$ y $W_v$. Esta matrices son parámetros de la red neuronal que son inicializados aleatoriamente, o con algún procedimiento estándar de inicialización de pesos.
Para esta ilustración, supondremos que las matrices de pesos son dadas por
$$ W_k = \begin{pmatrix} 0 & 0 &1\\ 1 & 1 &0\\ 0 & 1 &0\\ 1 & 1 &0 \end{pmatrix}, \quad W_v = \begin{pmatrix} 0 & 2 &0\\ 0 & 3 &0\\ 1 & 0 &3\\ 1 & 1 &0 \end{pmatrix}, \quad W_q = \begin{pmatrix} 1 & 0 &1\\ 1 & 0 &0\\ 0 & 0 &1\\ 0 & 1 &1 \end{pmatrix}. $$Auto-atención: Obtención de claves consultas y valores.
Fuente: Illustrated self attention
Ilustramos aquí como se calculan los puntajes de auto-atención para la entrada 1. Los puntajes de auto-atención para las demás entradas se calculan de la misma manera con el cambio obvio.
Como se muestra en la siguiente ilustración, se toma la consulta obtenida para la primera entrada, que en el ejemplo es $e_1 =[1, 0, 2]$. Los pesos de auto-atención son una medida de similaridad, entre la consulta y cada una de las claves, como se ha estudiado en las lecciones atención. La función de auto-atención se denotará $a$ . En este caso el resultado se obtiene haciendo el producto escalar (producto punto) entre la consulta asociada a $e_1$, es decir, $q_1$ y cada una de las claves, es decir $a(q_1, c_i)= <q_1, c_i>, i =1,2,3$.
Escrito en forma matricial, los pesos de auto-atención para la entrada 1 se calcula como
$$ p_1 = q_1 \times K^T = [1, 0, 2]\begin{pmatrix} 0 & 4 & 2 \\ 1 & 4 & 3 \\ 1 & 0 & 1 \\ \end{pmatrix} =[2, 4, 4]. $$Los pesos de auto-atención completos se calculan mediante
$$ P = Q \times K^T = \begin{pmatrix} 1 & 0 &2\\ 2 & 2 &2 \\ 2 & 1 &3 \\ \end{pmatrix} \times \begin{pmatrix} 0 & 4 & 2 \\ 1 & 4 & 3 \\ 1 & 0 & 1 \\ \end{pmatrix}= \begin{pmatrix} 2 & 4 & 4 \\ 4 & 16 & 12 \\ 4 & 12 & 10 \\ \end{pmatrix} = \begin{pmatrix} p_1\\ p_2\\ p_3\\ \end{pmatrix} $$Auto-atención: Obtención de puntajes de auto-atención.
Fuente: Illustrated self attention
Transformamos los puntajes a la escala softmax. Por ejemplo softmax([2, 4, 4]) = [0.06, 0.47, 0.47]. Observe que softmax define una distribución discreta de probabilidad.
Para la consulta 1 se tiene
Para la consulta 2
Para la consulta 3
Cada sal
Cada salida se obtiene como la suma de los vectores pesados asociados a cada consulta así:
El siguiente gif muestra el modelo completo de auto-atención. Los valores se redondearon.
Auto-atención: Cálculo completo de las últimas dos salidas
Fuente: Illustrated self attention