Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Cómo Implementar la Atención Multi-Cabeza | Construcción de Componentes de Transformers
Transformers para Procesamiento de Lenguaje Natural

bookCómo Implementar la Atención Multi-Cabeza

Desliza para mostrar el menú

12345678910111213141516171819202122232425262728293031323334353637383940
import numpy as np # Toy input: 3 tokens, embedding size 6 x = np.array([ [0.1, 0.2, 0.3, 0.4, 0.5, 0.6], [0.6, 0.5, 0.4, 0.3, 0.2, 0.1], [0.2, 0.1, 0.4, 0.3, 0.6, 0.5], ]) # Multi-head attention parameters num_heads = 2 embed_size = x.shape[1] head_dim = embed_size // num_heads # Random weights for queries, keys, and values for each head np.random.seed(42) W_q = np.random.randn(num_heads, embed_size, head_dim) W_k = np.random.randn(num_heads, embed_size, head_dim) W_v = np.random.randn(num_heads, embed_size, head_dim) attention_outputs = [] for head in range(num_heads): # Linear projections Q = x @ W_q[head] K = x @ W_k[head] V = x @ W_v[head] # Scaled dot-product attention scores = Q @ K.T / np.sqrt(head_dim) attention_weights = np.exp(scores) / np.sum(np.exp(scores), axis=-1, keepdims=True) head_output = attention_weights @ V attention_outputs.append(head_output) # Concatenate outputs from all heads multi_head_output = np.concatenate(attention_outputs, axis=-1) print("Output from head 0:\n", attention_outputs[0]) print("Output from head 1:\n", attention_outputs[1]) print("Concatenated multi-head output:\n", multi_head_output)
copy

La atención multi-cabeza funciona aplicando el mismo mecanismo de auto-atención de forma independiente y en paralelo en varias cabezas. Cada cabeza utiliza su propio conjunto de matrices de pesos para consultas, claves y valores (W_q, W_k y W_v), proyectando la entrada en subespacios de menor dimensión. La entrada x en este ejemplo contiene tres tokens, cada uno con un tamaño de embedding de 6, y se divide en dos cabezas.

Para cada cabeza, el código repite los pasos estándar de auto-atención: calcula las matrices de consulta (Q), clave (K) y valor (V), calcula las puntuaciones de atención tomando el producto punto de Q y K.T (escalado apropiadamente), y utiliza una función softmax para obtener los pesos de atención. Estos pesos se usan para combinar los vectores de valor, produciendo la salida de cada cabeza.

No existe un mecanismo nuevo aquí, la atención multi-cabeza es simplemente el proceso de auto-atención realizado en paralelo para cada cabeza. Después de procesar todas las cabezas, sus salidas se concatenan a lo largo de la última dimensión. Este enfoque permite que el modelo capture relaciones diversas en los datos, ya que cada cabeza puede enfocarse en diferentes aspectos de la entrada. Los resultados impresos ilustran cómo ejecutar el mismo mecanismo de auto-atención varias veces y combinar los resultados proporciona una representación más rica para cada token.

question mark

¿Cómo se combinan las salidas de las diferentes cabezas de atención en la atención multi-cabeza?

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 2

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 2. Capítulo 2
some-alt