Sobes.tech
Middle — Senior

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).