Kuinka pinota transformer-lohkoja
Pyyhkäise näyttääksesi valikon
123456789101112131415161718192021222324252627282930313233343536373839404142434445import torch import torch.nn as nn class EncoderBlock(nn.Module): def __init__(self, embed_dim, num_heads, ff_dim): super().__init__() self.attn = nn.MultiheadAttention(embed_dim, num_heads, batch_first=True) self.norm1 = nn.LayerNorm(embed_dim) self.ff = nn.Sequential( nn.Linear(embed_dim, ff_dim), nn.ReLU(), nn.Linear(ff_dim, embed_dim) ) self.norm2 = nn.LayerNorm(embed_dim) def forward(self, x): attn_output, _ = self.attn(x, x, x) x = self.norm1(x + attn_output) ff_output = self.ff(x) x = self.norm2(x + ff_output) return x class StackedEncoder(nn.Module): def __init__(self, num_layers, embed_dim, num_heads, ff_dim): super().__init__() self.layers = nn.ModuleList([ EncoderBlock(embed_dim, num_heads, ff_dim) for _ in range(num_layers) ]) def forward(self, x): for layer in self.layers: x = layer(x) return x # Example usage: stack 4 encoder blocks for input text embeddings embed_dim = 64 num_heads = 4 ff_dim = 256 num_layers = 4 stacked_encoder = StackedEncoder(num_layers, embed_dim, num_heads, ff_dim) input_tensor = torch.rand(2, 10, embed_dim) # batch_size=2, seq_len=10 output = stacked_encoder(input_tensor) print("Stacked encoder output shape:", output.shape)
Tekstin käsittelyssä Transformer-mallilla käytetään usein useita kooderi- tai dekooderilohkoja pinottuna päällekkäin. Yllä olevassa koodissa näytetään, kuinka voit luoda pinon kooderilohkoja käyttäen PyTorchia. Jokainen EncoderBlock sisältää monipääisen itsehuomion, syötteen läpivientiverkon ja kerrosnormalisoinnin. StackedEncoder-luokka rakentaa näistä lohkoista sarjan, jossa yhden lohkon ulostulo toimii seuraavan lohkon syötteenä. Tämä pinoaminen mahdollistaa mallin oppia yhä monimutkaisempia tekstin esityksiä jokaisella kerroksella. NLP-tehtävissä, kuten tekstin luokittelu tai käännös, lohkojen pinoaminen auttaa havaitsemaan syvempiä suhteita ja kontekstia datassa. Alkuperäinen syöte – tekstistä muunnetut upotukset – kulkee jokaisen kooderilohkon läpi, ja jokainen lohko tarkentaa esitystä sekä syötteen että aiemmissa kerroksissa opitun kontekstin perusteella.
Transformer-arkkitehtuurit voidaan jakaa kolmeen päätyyppiin, jotka soveltuvat erilaisiin NLP-tehtäviin:
Vain kooderi -mallit
- Rakenne: Koostuu pinosta kooderilohkoja.
- Tyypilliset käyttötapaukset: Nämä mallit soveltuvat tekstin ymmärtämiseen tai analysointiin. Yleisiä sovelluksia ovat tekstin luokittelu, sentimenttianalyysi ja nimettyjen entiteettien tunnistus. Tunnettu esimerkki tästä tyypistä on BERT.
Vain dekooderi -mallit
- Rakenne: Koostuu pinosta dekooderilohkoja.
- Tyypilliset käyttötapaukset: Nämä mallit on suunniteltu tekstin tuottamiseen, kuten kielimallinnukseen ja koodin täydennystehtäviin. GPT on tunnettu esimerkki vain dekooderi -mallista.
Kooderi-dekooderi -mallit
- Rakenne: Yhdistää kooderilohkot, jotka käsittelevät syötteen, ja dekooderilohkot, jotka tuottavat ulostulon, tieto kulkee kooderista dekooderiin.
- Tyypilliset käyttötapaukset: Näitä käytetään sekvenssi-sekvenssi-tehtäviin, joissa sekä syöte että ulostulo ovat sekvenssejä. Sovelluksia ovat konekäännös, tiivistäminen ja kysymys-vastaus -tehtävät. T5 ja alkuperäinen Transformer ovat esimerkkejä kooderi-dekooderi -arkkitehtuureista.
Yhteenvetona: arkkitehtuurin valinta määrittää, millaisia NLP-ongelmia voidaan ratkaista: vain kooderi -mallit analyysiin, vain dekooderi -mallit generointiin ja kooderi-dekooderi -mallit tehtäviin, joissa täytyy muuntaa yksi sekvenssi toiseksi.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme