Sobes.tech
Middle — Senior

Cos'è la maschera di padding della chiave rispetto alla maschera di attenzione in PyTorch?

sobes.tech AI

Risposta dell'AI

In PyTorch, lavorando con trasformatori e attenzione (attention), si utilizzano spesso maschere per gestire correttamente sequenze di lunghezze diverse e per evitare l'attenzione a posizioni indesiderate.

  • Key Padding Mask: è una maschera che indica quali posizioni nella sequenza sono padding (riempimenti), in modo che il modello non le consideri nel calcolo dell'attenzione. Di solito, è un tensore booleano dove True indica una posizione di padding. Viene applicata alle chiavi (keys) e ai valori (values) nel meccanismo di attenzione per ignorare i token di padding.

  • Attention Mask: una maschera più generale che controlla quali posizioni possono influenzare la posizione corrente nel calcolo dell'attenzione. Ad esempio, nei compiti di generazione automatica di testo, si usa una maschera che impedisce di guardare avanti (tokens futuri) per evitare perdite di informazione. Questa maschera può essere una matrice triangolare, dove alcune connessioni sono vietate.

Esempio:

import torch
from torch.nn import MultiheadAttention

# Supponiamo di avere una sequenza con padding
key_padding_mask = torch.tensor([[False, False, True, True]])  # True per padding

# Maschera di attenzione per impedire attenzione ai token futuri
attn_mask = torch.triu(torch.ones(4, 4), diagonal=1).bool()  # Maschera triangolare superiore

mha = MultiheadAttention(embed_dim=8, num_heads=2)
query = torch.rand(4, 1, 8)  # (lunghezza sequenza, batch, dimensione embedding)
key = value = query

output, attn_weights = mha(query, key, value, attn_mask=attn_mask, key_padding_mask=key_padding_mask)

In questo modo, la key padding mask viene usata per ignorare i token di padding, mentre la attention mask controlla la struttura dell'attenzione (ad esempio, impedendo l'attenzione alle posizioni future).