Wat is key padding mask versus attention mask in PyTorch?
sobes.tech AI
Antwoord van AI
In PyTorch, bij het werken met transformers en aandacht (attention), worden vaak maskers gebruikt om correct te verwerken van sequences met verschillende lengtes en om aandacht te voorkomen voor ongewenste posities.
-
Key Padding Mask: is een masker die aangeeft welke posities in de sequence padding (vulling) zijn, zodat het model deze niet meeneemt bij het berekenen van de aandacht. Het is meestal een booleaanse tensor waarbij True een padding-positie betekent. Het wordt toegepast op de sleutels (keys) en waarden (values) in het aandachtmechanisme om padding tokens te negeren.
-
Attention Mask: een meer algemene masker die controleert welke posities invloed kunnen hebben op de huidige positie bij het berekenen van de aandacht. Bijvoorbeeld, bij automatische tekstgeneratie wordt een masker gebruikt dat vooruit kijken (futuren tokens) verhindert om informatielekken te voorkomen. Dit masker kan een driehoeksmatrix zijn, waarbij bepaalde verbindingen verboden zijn.
Voorbeeld:
import torch
from torch.nn import MultiheadAttention
# Stel dat we een sequence met padding hebben
key_padding_mask = torch.tensor([[False, False, True, True]]) # True voor padding
# Attention masker om vooruit kijken te voorkomen
attn_mask = torch.triu(torch.ones(4, 4), diagonal=1).bool() # Bovenste driehoek masker
mha = MultiheadAttention(embed_dim=8, num_heads=2)
query = torch.rand(4, 1, 8) # (sequence lengte, batch, embed dim)
key = value = query
output, attn_weights = mha(query, key, value, attn_mask=attn_mask, key_padding_mask=key_padding_mask)
Op deze manier wordt de key padding mask gebruikt om padding tokens te negeren, en de attention mask om de structuur van de aandacht te controleren (bijvoorbeeld, voorkomen dat aandacht wordt gegeven aan toekomstige posities).