Transformers: Arquitectura del Decoder

El decoder funciona de manera similar al encoder, y al igual que el encoder también está compuesto de bloques que puede ser apilados, la estructura general es la siguiente:

fig 1: DECODER

Se puede apreciar que el encoder esta compuesto de:

  1. Capa de Masked multi-head attention
  2. Capa de multi-head attention
  3. Una capa de red neuronal feed-forward
  4. Capa lineal
  5. Capa de softmax

ahora te explico como funcionan:

Embedding de datos y matriz de posiciones:

Estas capas funcionan exactamente como en el encoder por lo que no nos detendremos aquí, puedes revisar el post sobre el encoder si lo necesitas.

Capa de Masked Multi-head Attention:

Para empezar el decoder recibe una secuencia de texto el cual se le añade tokens especiales <sos> y <eos>. y ¿para que se le añade el <sos>? pues ya que el decoder tiene que predecir la próxima palabra en una secuencia, este es la manera de indicar el inicio de un secuencia (sos significa start of sequence y eos significa end of sequence )

Esta capa, como su nombre lo indica se encarga de enmascarar (tapar) la palabra siguiente, de manera que el decoder pueda predecir sin conocer cuál es el resto de la secuencia de entrada.

ilustremos con un caso de uso del decoder,  suponga que usted desea crear un modelo de traducción automática, esto es, usted le da al modelo una oración en español y el modelo traducirá al inglés:

Fig 2: Encoder-Decoder

Como se ve es necesario agregar 2 tokens especiales que indican el inicio y el fin de una oración, es decir cuando empieza y termina la oración, estos token son <sos> y <eos>.

El encoder toma el <sos> y va prediciendo la próxima palabra hasta que encuentra un token de <eos> que indica el fin de la oración.

El mecanismo de auto-atención con máscara del decoder está pensado para que el transformer solo preste atención a las palabras que ya ha predicho.

Ok, pero ¿cómo funciona la masked auto-atención en el encoder?

  1. Similar al encoder, la masked auto-atención también tiene matrices Q, K y V, que funcionan de la misma manera, aplicando operaciones matriciales que ya hemos visto en el encoder.
  2. A la matriz de entrada, calculamos el Q.K’t
  3. Luego dividimos por la dimensión del vector, y se obtendrá una matriz como la siguiente :
Fig 3: matriz sin enmascarar

notese que los números que se colocan son aleatorios para propósitos de aprendizaje

4. Antes de aplicar el softmax, debemos enmascarar las palabras que siguen, para que no estén disponibles para el modelo, es decir obtendremos una matriz enmascarada como la siguiente:

Fig 4: matriz enmascarada

Como se puede observar se va enmascarando con el valor infinito negativo, el cual le indicará a la matriz de auto-atención que no le preste atención a la palabra siguiente, por ejemplo para el token <sos> no esta disponibles ninguna palabra ya que se enmascaran todas las palabras, para el token “I” se enmascaran las palabras “speak” e “inglés”, por lo que el modelo solo puede ver “<sos> I” y deberá aprender que palabra puede venir a continuación mediante la auto-atención, y así con el resto de la secuencia.

Por último esta matrix es la que introduciremos en la próxima capa: la capa de multi-head attention.

Capa de multi-head attention

Esta capa recibe como entrada 2 matrices: la matriz con los valores enmascaradas (masked self-atention) y la otra entrada es la salida que proviene del encoder, como se muestra en la figura 2.

Al igual que en las otras capas de atención, para esta capa es necesario crear 3 matrices Q, K y V.

La diferencia es que para esta capa la matriz Q, se crea de la multiplicación de la matriz de peso Wq y la matriz de atención enmascarada, y las matrices K y V se crean de la multiplicación de las matrices Wk y Wv por la salida de encoder (la representación numérica que proviene del encoder). tal como se muestra en la figura 5:

Fig 5: origen de las matrices Q,K y V

Recuerda que las matrices Wq, Wk y Wv son aleatoriamente inicializadas y sus valores son ajustados durante el entrenamiento (durante el backpropagation).

De esta manera la matriz Q contendrá la información de la secuencia que queremos obtener (I speak english), y las matrices K y V contendrán la información de la secuencia de entrada (yo hablo ingles).

Luego de generadas estas matrices, se sigue el proceso visto en el encoder, es decir:

. Calcular la matriz de scores mediante la multiplicación de Q.K’t (Q por la traspuesta de K),

. Escalar el resultado dividendo entre la raiz de 64.

. Obtener el softmax, esta matriz resultante es de la forma:

Fig 6: matriz de scores

obtenemos una matriz de scores que indica cómo están relacionadas las palabras entre si, es decir que tan similar es la palabra “I” con la palabra “yo” por ejemplo.

. Ahora obtenemos la matriz de atención, que nos indica a qué palabras debo prestar atención para realizar la predicción:

Fig 7: cálculo de la matriz de auto-atención

. Esta matriz de atencion Z, al igual que en el encoder, cada fila contendrá el vector de auto-atención de cada palabra, por ejemplo para la palabra “I”, el vector asociado tomando la matrices de ejemplo de la figura 7,

¿Como se interpreta? pues en este caso el modelo consigue que la palabra “I” en inglés contiene un 95% del vector de la palabra “yo”, un %2 de la palabra “hablo” y un 3% de la palabra “inglés”, con esto el modelo al ver la palabra “yo” como entrada la podría traducir como “I” que es su traducción en inglés.

Capa Feed-forward y de normalización:

El funcionamiento de estas es exactamente el mismo que el visto en el encoder y sirve para lograr un entrenamiento eficiente del modelo.

Capa Lineal y softmax

La capa lineal genera un vector del tamaño del vocabulario usado, es decir si solo entrenamos el modelo con 3 palabras el tamaño del vocabulario es 3, y la capa de softmax transforma este vector en probabilidades a fin de seleccionar las palabras más probables como predicción.

Palabras finales:

Esta arquitectura transformer encoder-decoder es entrenada utilizando cross entropía como función de pérdida.

Muchas veces se utilizan arquitecturas mixtas encoder-decoder, esto es usan BERT como encoder y otro tipo de arquitectura como decoder, como un GPT-2.

Ahora ya tienes una idea de como funciona el decoder, arquitecturas como GPT-2, GPT-3 toman una idea similar para entrenar sus encoders.

En este repositorio de github puedes conseguir el notebook con la implementación desde cero de un transformer.

En subsiguientes post aprenderemos como implementar modelos transformer en la práctica para distintos usos.

Suscribete para que te lleguen las notificaciones sobre nuevos post.

close

Recibe post semanales!

We don’t spam! Read our privacy policy for more info.

One thought on “Transformers: Arquitectura del Decoder

Leave a Reply

Your email address will not be published.

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top