Sobes.tech
Middle — Senior

Čo je to key padding mask vs attention mask v PyTorch?

sobes.tech AI

Odpoveď od AI

V PyTorch-e, pri práci s transformátormi a pozornosťou (attention) sa často používajú masky na správne spracovanie sekvencií rôznych dĺžok a na zabránenie pozornosti na neželané pozície.

  • Key Padding Mask: je maska, ktorá označuje, ktoré pozície v sekvencii sú padding (výplň), aby model ich pri výpočte pozornosti nezohľadňoval. Zvyčajne je to booleovský tensor, kde True znamená pozíciu paddingu. Táto maska sa aplikuje na kľúče (keys) a hodnoty (values) v mechanizme pozornosti, aby sa ignorovali padding tokeny.

  • Attention Mask: je všeobecnejšia maska, ktorá riadi, ktoré pozície môžu ovplyvniť aktuálnu pozíciu pri výpočte pozornosti. Napríklad, pri automatickej generácii textu sa používa maska, ktorá zakazuje pozrieť sa dopredu (future tokens), aby sa predišlo úniku informácií. Táto maska môže byť trojuholníková matica, kde sú určité spojenia zakázané.

Príklad:

import torch
from torch.nn import MultiheadAttention

# Predpokladajme, že máme sekvenciu s paddingom
key_padding_mask = torch.tensor([[False, False, True, True]])  # True pre padding

# Maska pozornosti, ktorá zakazuje pozrieť sa dopredu
attn_mask = torch.triu(torch.ones(4, 4), diagonal=1).bool()  # Horná trojuholníková maska

mha = MultiheadAttention(embed_dim=8, num_heads=2)
query = torch.rand(4, 1, 8)  # (dĺžka sekvencie, 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 spôsobom sa key padding mask používa na ignorovanie padding tokenov, zatiaľ čo attention mask na riadenie štruktúry pozornosti (napríklad, zabránenie pozornosti na budúce pozície).