Was ist Key Padding Mask vs Attention Mask in PyTorch?
sobes.tech KI
Antwort von AI
In PyTorch, bei der Arbeit mit Transformatoren und Aufmerksamkeit (Attention) werden häufig Masken verwendet, um die korrekte Verarbeitung von Sequenzen unterschiedlicher Länge zu gewährleisten und unerwünschte Positionen zu vermeiden.
-
Key Padding Mask: ist eine Maske, die angibt, welche Positionen in der Sequenz Padding (Auffüllung) sind, damit das Modell diese bei der Berechnung der Aufmerksamkeit nicht berücksichtigt. Es ist in der Regel ein boolescher Tensor, bei dem True eine Padding-Position bedeutet. Diese wird auf die Schlüssel (keys) und Werte (values) im Attention-Mechanismus angewendet, um Padding-Tokens zu ignorieren.
-
Attention Mask: eine allgemeinere Maske, die steuert, welche Positionen die aktuelle Position bei der Berechnung der Aufmerksamkeit beeinflussen dürfen. Zum Beispiel wird bei der automatischen Textgenerierung eine Maske verwendet, die verhindert, dass nach vorne geschaut wird (futures tokens), um Informationslecks zu vermeiden. Diese Maske kann eine Dreiecks-Matrix sein, bei der bestimmte Verbindungen verboten sind.
Beispiel:
import torch
from torch.nn import MultiheadAttention
# Angenommen, wir haben eine Sequenz mit Padding
key_padding_mask = torch.tensor([[False, False, True, True]]) # True für Padding
# Attention-Maske, um Aufmerksamkeit auf zukünftige Tokens zu verhindern
attn_mask = torch.triu(torch.ones(4, 4), diagonal=1).bool() # Obere Dreiecksmatrix
mha = MultiheadAttention(embed_dim=8, num_heads=2)
query = torch.rand(4, 1, 8) # (seq_len, batch, embed_dim)
key = value = query
output, attn_weights = mha(query, key, value, attn_mask=attn_mask, key_padding_mask=key_padding_mask)
Auf diese Weise wird die Key Padding Mask verwendet, um Padding-Tokens zu ignorieren, und die Attention Mask, um die Struktur der Aufmerksamkeit zu steuern (z.B. Verhinderung der Aufmerksamkeit auf zukünftige Positionen).