Какво е key padding mask спрямо attention mask в PyTorch?
sobes.tech AI
Отговор от AI
В PyTorch, при работа с трансформатори и внимание (attention), често се използват маски за правилна обработка на последователности с различна дължина и за предотвратяване на внимание към нежелани позиции.
-
Key Padding Mask: това е маска, която указва кои позиции в последователността са пълнеж (padding), така че моделът да не ги взема предвид при изчисляване на вниманието. Обикновено е булев тензор, където True означава позиция на пълнеж. Тази маска се прилага към ключовете (keys) и стойностите (values) в механизма на вниманието, за да игнорира токените на пълнеж.
-
Attention Mask: по-обща маска, която контролира кои позиции могат да влияят на текущата позиция при изчисляване на вниманието. Например, при автоматично генериране на текст, се използва маска, която забранява гледане напред (futures tokens), за да се предотврати изтичане на информация. Тази маска може да бъде триъгълна матрица, където определени връзки са забранени.
Пример:
import torch
from torch.nn import MultiheadAttention
# Да предположим, че имаме последователност с пълнеж
key_padding_mask = torch.tensor([[False, False, True, True]]) # True за пълнеж
# Маска за внимание, която забранява гледане напред
attn_mask = torch.triu(torch.ones(4, 4), diagonal=1).bool() # Горна триъгълна маска
mha = MultiheadAttention(embed_dim=8, num_heads=2)
query = torch.rand(4, 1, 8) # (дължина на последователността, партида, размер на вграждането)
key = value = query
output, attn_weights = mha(query, key, value, attn_mask=attn_mask, key_padding_mask=key_padding_mask)
По този начин, key padding mask се използва за игнориране на токените на пълнеж, а attention mask — за контрол на структурата на вниманието (например, предотвратяване на внимание към бъдещи позиции).