Ako je transformátor zložen a aké sú jeho hlavné bloky?
sobes.tech AI
Odpoveď od AI
Transformátor je architektúra neurónovej siete, ktorá sa široko používa na spracovanie sekvencií, napríklad textu. Hlavná myšlienka transformátora je využitie mechanizmu pozornosti (attention) na váženie významnosti rôznych častí vstupných dát bez rekurentných alebo konvolučných vrstiev.
Hlavné bloky transformátora:
-
Vstupné zobrazenie (Embedding) — prevádza vstupné tokeny na vektorové reprezentácie.
-
Pozíčné kódovanie (Positional Encoding) — pridáva informácie o pozícii tokenov v sekvencii, pretože mechanizmus pozornosti nezohľadňuje poradie.
-
Mechanizmus pozornosti (Self-Attention) — vypočíta váhové koeficienty pre každý token voči všetkým ostatným, čo umožňuje modelu sústrediť sa na relevantné časti vstupu.
-
Viachlavová pozornosť (Multi-Head Attention) — paralelne aplikuje niekoľko mechanizmov pozornosti na zachytenie rôznych aspektov závislosti.
-
Normalizácia a reziduálne spojenia (Layer Normalization a Residual Connections) — pomáhajú stabilizovať tréning a zlepšiť tok gradientov.
-
Plne prepojené vrstvy (Feed-Forward Network) — aplikujú sa na každý prvok sekvencie samostatne na nelineárnu transformáciu.
-
Výstupná vrstva — pre úlohy generovania alebo klasifikácie.
Príklad zjednodušenej štruktúry jednej vrstvy transformátora:
class TransformerLayer(nn.Module):
def __init__(self, d_model, nhead):
super().__init__()
self.self_attn = nn.MultiheadAttention(d_model, nhead)
self.linear1 = nn.Linear(d_model, d_model*4)
self.linear2 = nn.Linear(d_model*4, d_model)
self.norm1 = nn.LayerNorm(d_model)
self.norm2 = nn.LayerNorm(d_model)
def forward(self, x):
attn_output, _ = self.self_attn(x, x, x)
x = self.norm1(x + attn_output)
ff_output = self.linear2(F.relu(self.linear1(x)))
x = self.norm2(x + ff_output)
return x
Takto je transformátor zostavený z opakujúcich sa vrstiev, čo umožňuje efektívne modelovanie závislostí v dátach.