Co je to maska padding klíče vs maska pozornosti v PyTorch?
sobes.tech AI
Odpověď od AI
V PyTorch při práci s transformátory a pozorností (attention) se často používají masky pro správné zpracování sekvencí různých délek a zabránění pozornosti na nežádoucí pozice.
-
Key Padding Mask: je maska, která označuje, které pozice v sekvenci jsou padding (doplnění), aby model je při výpočtu pozornosti nezohledňoval. Obvykle je to booleovský tensor, kde True znamená pozici paddingu. Tato maska se aplikuje na klíče (keys) a hodnoty (values) v mechanismu pozornosti, aby se ignorovaly padding tokeny.
-
Attention Mask: je obecnější maska, která řídí, které pozice mohou ovlivnit aktuální pozici při výpočtu pozornosti. Například u úloh automatické generace textu se používá maska, která zakazuje pohled dopředu (futuristické tokeny), aby se zabránilo úniku informací. Tato maska může být trojúhelníková matice, kde jsou zakázány určité spojení.
Příklad:
import torch
from torch.nn import MultiheadAttention
# Předpokládejme, že máme sekvenci s paddingem
key_padding_mask = torch.tensor([[False, False, True, True]]) # True pro padding
# Maska pozornosti, která zakazuje pohled dopředu
attn_mask = torch.triu(torch.ones(4, 4), diagonal=1).bool() # Horní trojúhelníková maska
mha = MultiheadAttention(embed_dim=8, num_heads=2)
query = torch.rand(4, 1, 8) # (délka sekvence, batch, embed dim)
key = value = query
output, attn_weights = mha(query, key, value, attn_mask=attn_mask, key_padding_mask=key_padding_mask)
Tímto způsobem se key padding mask používá k ignorování padding tokenů, zatímco attention mask k řízení struktury pozornosti (například zabránění pozornosti na budoucí pozice).