Aprendizaje Profundo¶

Atención y auto-atención
¶

All you need is attention!

Profesores¶

  1. Alvaro Mauricio Montenegro Díaz, ammontenegrod@unal.edu.co
  2. Daniel Mauricio Montenegro Reyes, dextronomo@gmail.com

Asesora Medios y Marketing digital¶

  1. Maria del Pilar Montenegro, pmontenegro88@gmail.com

Referencias¶

  1. Aprendizaje Profundo-Diplomado
  2. Aprendizaje Profundo-PLN
  3. Ashish Vaswani et al., Attention Is All You Need, diciembre 2017.
  4. Dennis Rothman, Transformers for Natural Language processing, enero 2021.
  5. Varios,Dive into deep learning, enero 2021

Introducción al concepto de atención
¶

Contenido atención¶

  • Introducción al concepto de atención
    • Señales de atención en Biología
    • Consultas, claves y valores
    • Atención agrupada. Regresión kernel de Nadaraya-Watson
    • Funciones de puntuación de atención
  • Mecanismos de Atención en Aprendizaje Profundo
    • Introducción a mecanismos de atención
    • Modelo seq2seq
    • Atención y alineación
    • Modelos seq2seq y atención

Introducción¶

Gracias por su atención a esta presentación.
¶

La atención es un recurso escaso
  • En la era de la economía de la atención, donde el cuidado humano es tratado como un bien limitado, valioso y escaso que se puede intercambiar, numerosos modelos de negocio se han desarrollado para capitalizarlo.
  • 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ñales de atención en Biología¶

  • Estas ideas se remontan a William James en la década de 1890.
  • Llos sujetos dirigen selectivamente el foco de atención usando tanto la señal no volitiva(no voluntaria) como la señal volitiva (voluntaria).
  • La señal no volitiva se basa en la prominencia y la visibilidad de los objetos en el entorno.

Auto-atención visual

Fuente Dive into Deep learning

Señales de atención en Biología II¶

  • Después de tomar café, usted está cafeinado y quiere leer un libro. Entonces gira la cabeza, reenfoca sus ojos.
  • En este caso dependiente de la tarea, selecciona el libro en control cognitivo y volitivo.

Auto-atención visual

Fuente Dive into Deep learning

Consultas, claves y valores¶

  • Lo que fija los mecanismos de atención la inclusión de las señales volitivas. En el contexto de los mecanismos de atención, nos referimos a las señales volitivas como consultas(queries).
  • Dada cualquier consulta, los mecanismos de atención sesgan la atención sobre las entradas sensoriales (por ejemplo, representaciones de características intermedias) a través de atención conjunta (pooling attention).
  • Estas entradas sensoriales se denominan valores (values) en el contexto de los mecanismos de atención.
  • Más generalmente, cada 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

Aprendizaje automático con mecanismos de atención¶

  • El modelo de regresión kernel de Nadaraya-Watson propuesto en 1964 es un ejemplo simple pero completo para demostrar el aprendizaje automático con mecanismos de atención.

Generación de un conjunto de datos¶

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.

Agrupación promedio. Average Pooling¶

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

Atención agrupada no-paramétrica¶

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,$$

Regresión Kernel Nadaraya-Watson¶

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

Funciones de puntuación de atención¶

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

Introducción a mecanismos de atención¶

  • 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).

Modelo seq2seq¶

  • El modelo de secuencia a secuencia 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.
  • Todas estas tareas pueden considerarse como la tarea de aprender un modelo que convierte una secuencia de entrada en una secuencia de salida. La imagen muestra la arquitectura general del modelo.

Modelo clásico seq2seq.

Fuente: Attn: Illustrated Attention

Componentes del modelo seq2seq¶

El modelo consta escencialmente de las siguientes capas:

  • capa de incrustación de codificador, capa recurrente del codificador, capa de incrustación de decodificador, capa recurrente del decodificador, capa de salida del decodificador.

Estructura autoencoder de un modelo seq2seq de *pregunta/respuesta*.

Fuente: Write a Sequence to Sequence (seq2seq) Model

Atención y alineación ¶

  • Atención es un mecanismo que se introduce entre el codificador y el decodificador. El decodificador sigue recibiendo el estado oculto final de la secuencia de entrada como antes, mientras que el mecanismo de atención se basa en las predicciones intermedias en el estado oculto.
  • En este contexto, alineación significa hacer coincidir segmentos de la entrada con segmento de la traducción, Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation (Wu et. al, 2016).

Modelo conceptual de atención.

Fuente: Write a Sequence to Sequence (seq2seq) Model

Modelos seq2seq y 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.

Paso 0. Preparación de los estados ocultos¶

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

Fuente: Write a Sequence to Sequence (seq2seq) Model

Paso 1. Obtener un puntaje para cada estado oculto del encoder¶

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

Fuente: Write a Sequence to Sequence (seq2seq) Model

Paso 2. Transformar todos los puntajes mediante la función softmax¶

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

Fuente: Write a Sequence to Sequence (seq2seq) Model

Paso 3. Multiplica cada estado oculto del encoder por su puntaje softmax: vectores de alineación¶

$$ he_i \leftarrow score_i * he_i , i =1,\cdots, m $$

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)

Fuente: Write a Sequence to Sequence (seq2seq) Model

Paso 4. Suma los vectores de alineación: vector de contexto¶

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

Fuente: Write a Sequence to Sequence (seq2seq) Model

Paso 5. Alimenta el decodificador con el vector de contexo¶

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

Fuente: Write a Sequence to Sequence (seq2seq) Model

La siguiente imagen muestra el proceso completo en la capa de atención.

Capa de atención completa

Fuente: Write a Sequence to Sequence (seq2seq) Model

Ejemplo: Traducción automática neuronal de Google (GNMT)¶

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).

  1. El codificador consta de una pila de 8 LSTM, donde el primero es bidireccional (cuyas salidas están concatenados), y existe una conexión residual entre las salidas de capas consecutivas (a partir de la 3ª capa). El decodificador es una pila separada de 8 LSTM unidireccionales.
  2. La función de puntuación utilizada es el aditivo / concat, como en [1].
  3. Nuevamente, como en Neural Machine Translation by Jointly Learning to Align and Translate (Bahdanau et. al, 2015), la entrada al siguiente paso del decodificador es la concatenación entre la salida del paso de tiempo del decodificador anterior (rosa) y el vector de contexto del paso de tiempo actual (verde oscuro).

Traducción automática neuronal de Google¶

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.

Fuente: Write a Sequence to Sequence (seq2seq) Model

Introducción a los mecanismos de auto-atención
¶

Contenido Auto-atención¶

  • Introducción a los mecanismos de auto-atención
    • Introducción a auto-atención

Introducción a auto-atención¶

¿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.

  1. Preparar entradas
  2. Inicializar los pesos
  3. Obtener clave (key), consulta (query) y valor (value).
  4. Calcule las puntuaciones de atención para la entrada 1.
  5. Calcular softmax de las puntuaciones.
  6. Multiplica las puntuaciones softmax con los valores
  7. Sumar valores ponderados para obtener la Salida 1
  8. Repite los pasos 4 a 7 para la entrada 2 y la entrada 3

Paso 1. Preparar las entradas¶

Las 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.

  1. entrada 1: $e_1=[1, 0, 1, 0]$
  2. entrada 2: $e_2=[0, 2, 0, 2]$
  3. entrada 3: $e_3=[1, 1, 1, 1]$

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}. $$

Paso 2. Inicializar los pesos¶

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}. $$

Paso 3. Obtener claves, consultas y valores¶

Claves (keys)¶

$$ \small{ K = E \times W_k = \begin{pmatrix} 1 & 0 &1 &0\\ 0 & 2 &0 &2\\ 1 & 1 &1 &1\\ \end{pmatrix} \times \begin{pmatrix} 0 & 0 &1\\ 1 & 1 &0\\ 0 & 1 &0\\ 1 & 1 &0 \end{pmatrix} = \begin{pmatrix} 0 & 1 &1\\ 4 & 4 &0 \\ 2 & 3 &1 \\ \end{pmatrix}= \begin{pmatrix} k_1\\ k_2\\ k_3\\ \end{pmatrix}. } $$

Valores (values)¶

$$ \small{ V = E \times W_v = \begin{pmatrix} 1 & 0 &1 &0\\ 0 & 2 &0 &2\\ 1 & 1 &1 &1\\ \end{pmatrix} \times \begin{pmatrix} 0 & 2 &0\\ 0 & 3 &0\\ 1 & 0 &3\\ 1 & 1 &0 \end{pmatrix} = \begin{pmatrix} 1 & 2 &3\\ 2 & 8 &0 \\ 2 & 6 &3 \\ \end{pmatrix}= \begin{pmatrix} v_1\\ v_2\\ v_3\\ \end{pmatrix}. } $$

Consultas (queries)¶

$$ \small{ Q = E \times W_q = \begin{pmatrix} 1 & 0 &1 &0\\ 0 & 2 &0 &2\\ 1 & 1 &1 &1\\ \end{pmatrix} \times \begin{pmatrix} 1 & 0 &1\\ 1 & 0 &0\\ 0 & 0 &1\\ 0 & 1 &1 \end{pmatrix} = \begin{pmatrix} 1 & 0 &2\\ 2 & 2 &2 \\ 2 & 1 &3 \\ \end{pmatrix}= \begin{pmatrix} q_1\\ q_2\\ q_3\\ \end{pmatrix}. } $$

Auto-atención: Obtención de claves consultas y valores.

Fuente: Illustrated self attention

Paso 4. Cálculo de los puntajes de auto-atención para las entradas¶

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

Paso 5. Cálculo del puntaje softmax¶

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.

Paso 6. Multiplica los puntajes softmax con los valores para cada consulta.¶

$$ S = \begin{pmatrix} \text{softmax}(p_1)\\ \text{softmax}(p_2)\\ \text{softmax}(p_3) \end{pmatrix} = \begin{pmatrix} 0.06 & 0.47 &0.47\\ 0.00 & 0.98 &0.02 \\ 0.00 & 0.88 &0.12 \\ \end{pmatrix} = \begin{pmatrix} s_1\\ s_2\\ s_3 \end{pmatrix} $$

Para la consulta 1 se tiene

  • 0.06 * [1, 2, 3] = [0.06, 0.13, 0.19]
  • 0.47 * [2, 8, 0] = [0.94, 3.75, 0.00]
  • 0.47 * [2, 6, 3] = [0.94, 2.81, 1.40]

Para la consulta 2

  • 0.00 * [1, 2, 3] = [0.00, 0.00, 0.00]
  • 0.98 * [2, 8, 0] = [1.96, 7.86, 0.00]
  • 0.02 * [2, 6, 3] = [0.04, 0.11, 0.05]

Para la consulta 3

  • 0.00 * [1, 2, 3] = [0.00, 0.00, 0.00]
  • 0.88 * [2, 8, 0] = [1.76, 7.04, 0.00]
  • 0.12 * [2, 6, 3] = [0.24, 0.72, 0.36]

Paso 7. Suma pesada de valores para conseguir las salidas¶

Cada sal

Cada salida se obtiene como la suma de los vectores pesados asociados a cada consulta así:

  • salida 1: [0.06, 0.13, 0.19] + [0.94, 3.75, 0.00] + [0.94, 2.81, 1.40] = [1.94, 6.68, 1.60]
  • salida 2: [0.00, 0.00, 0.00] + [1.96, 7.86, 0.00] + [0.04, 0.11, 0.05] = [2.00, 7.96, 0.05]
  • salida 3: [0.00, 0.00, 0.00] + [1.76, 7.04, 0.00] + [0.24, 0.72, 0.36] = [2.00, 7.76, 0.36]

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