Ejercicio B — la atención son dos contracciones
La atención responde la pregunta 5 del ejercicio del pipeline de video: ¿qué partes de una secuencia importan más?
scores = np.einsum('bid,bjd->bij', Q, K) / np.sqrt(dim) # (4, 12, 12)
weights = softmax(scores, axis=-1)
output = np.einsum('bij,bjd->bid', weights, V) # (4, 12, 16)
mask = np.zeros((seq_len, seq_len)); mask[:, -3:] = -np.inf
weights_masked = softmax(scores + mask, axis=-1) # las posiciones rellenadas reciben peso 0
scores es el producto punto del capítulo 2; output es la combinación lineal del capítulo 2. La atención son dos contracciones construidas con ideas que ya has leído.
Y la máscara resuelve el problema de longitud variable de la Parte II: es cómo los modelos reales manejan secuencias y videos de distinta longitud.