Sobes.tech
Middle — Senior

Ce este masca de padding a cheii față de masca de atenție în PyTorch?

sobes.tech AI

Răspuns de la AI

În PyTorch, atunci când lucrați cu transformatoare și atenție, se folosesc adesea măști pentru a procesa corect secvențele de diferite lungimi și pentru a preveni atenția asupra pozițiilor nedorite.

  • Key Padding Mask: este o mască care indică ce poziții din secvență sunt padding (umplere), astfel încât modelul să nu le ia în considerare la calculul atenției. De obicei, este un tensor boolean în care True indică o poziție de padding. Se aplică cheilor (keys) și valorilor (values) în mecanismul de atenție pentru a ignora token-urile de padding.

  • Attention Mask: o mască mai generală care controlează ce poziții pot influența poziția curentă la calculul atenției. De exemplu, în sarcinile de generare automată a textului, se folosește o mască care împiedică privirea înainte (tokens viitori) pentru a preveni scurgerea de informații. Această mască poate fi o matrice triunghiulară, unde anumite conexiuni sunt interzise.

Exemplu:

import torch
from torch.nn import MultiheadAttention

# Presupunem că avem o secvență cu padding
key_padding_mask = torch.tensor([[False, False, True, True]])  # True pentru padding

# Mască de atenție pentru a preveni atenția asupra token-urilor viitoare
attn_mask = torch.triu(torch.ones(4, 4), diagonal=1).bool()  # Masca triunghiulară superioară

mha = MultiheadAttention(embed_dim=8, num_heads=2)
query = torch.rand(4, 1, 8)  # (lungimea secvenței, lot, dimensiunea embed)
key = value = query

output, attn_weights = mha(query, key, value, attn_mask=attn_mask, key_padding_mask=key_padding_mask)

Astfel, key padding mask este folosit pentru a ignora token-urile de padding, iar attention mask pentru a controla structura atenției (de exemplu, prevenind atenția asupra pozițiilor viitoare).