Sobes.tech
Middle — Senior

Маски пэддинги калид ва маски диққат дар PyTorch чист?

sobes.tech AI

Ҷавоб аз AI

Дар PyTorch, ҳангоми кор бо трансформаторҳо ва диққат (attention), одатан маскҳо барои дуруст коркарди пайдарпайиҳо бо дарозии гуногун ва пешгирии диққат ба ҷойҳои нолозим истифода мешаванд.

  • Key Padding Mask: маскаест, ки нишон медиҳад, ки кадом ҷойҳо дар пайдарпайӣ padding (пуркунӣ) мебошанд, то модел онҳоро ҳангоми ҳисоб кардани диққат ба назар нагирад. Одатан, ин тензор бо логикӣ аст, ки дар он True маънои ҷойи padding-ро дорад. Ин маска ба калидҳо (keys) ва арзишҳо (values) дар механизми диққат татбиқ мешавад, то токенҳои padding-ро нодида гирад.

  • Attention Mask: маскаи умумӣ аст, ки назорат мекунад, ки кадом ҷойҳо метавонанд ба ҷойи ҳозир таъсир расонанд ҳангоми ҳисоб кардани диққат. Масалан, дар вазифаҳои автоматии тавлиди матн, маска истифода мешавад, ки пеши назаргирии токенҳои оянда (future tokens) гирифта шавад, то аз сироят кардани маълумот пешгирӣ шавад. Ин маска метавонад як матрицаи trianguar бошад, ки дар он пайвастагиҳо манъ шудаанд.

Масалан:

import torch
from torch.nn import MultiheadAttention

# Гумон мекунем, ки мо пайдарпайӣ бо padding дорем
key_padding_mask = torch.tensor([[False, False, True, True]])  # True барои padding

# Маскаи диққат барои манъ кардани назар ба оянда
attn_mask = torch.triu(torch.ones(4, 4), diagonal=1).bool()  # Маскаи trianguar болоӣ

mha = MultiheadAttention(embed_dim=8, num_heads=2)
query = torch.rand(4, 1, 8)  # (дарозии пайдарпайӣ, batch, embed_dim)
key = value = query

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

Ин тариқ, маскаи padding-ро барои нодида гирифтани токенҳои padding истифода мебаранд, ва маскаи диққат барои назорати сохтори диққат (масалан, пешгирӣ аз диққат ба ҷойҳои оянда).