Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele How to Generate Sinimuotoisen Sijaintikoodauksen | Transformer-Perusteiden Ymmärtäminen
Transformerit Luonnollisen Kielen Käsittelyssä

bookHow to Generate Sinimuotoisen Sijaintikoodauksen

Pyyhkäise näyttääksesi valikon

Sinimuotoinen positionaalikoodaus mahdollistaa transformer-mallin tunnistaa sanojen järjestyksen ja sijainnin, vaikka se ei käytä rekursiota tai järjestystietoisia kerroksia. Jokainen sijainti esitetään yksilöllisellä sini- ja kosiniarvojen yhdistelmällä, jotka jakautuvat upotustilojen (embedding dimensions) yli.

Tarkastellaan alla olevaa koodia.

1234567891011121314151617
import numpy as np def get_sinusoidal_positional_encoding(seq_length, embed_dim): position = np.arange(seq_length)[:, np.newaxis] div_term = np.exp( np.arange(0, embed_dim, 2) * -(np.log(10000.0) / embed_dim) ) pe = np.zeros((seq_length, embed_dim)) pe[:, 0::2] = np.sin(position * div_term) pe[:, 1::2] = np.cos(position * div_term) return pe # Example usage: seq_length = 6 embed_dim = 8 encoding = get_sinusoidal_positional_encoding(seq_length, embed_dim) print(encoding)
copy

Koodi sinimuotoisen positionaalikoodauksen tuottamiseen voidaan ymmärtää vaiheittain:

1. Sijaintitaulukon luominen

position = np.arange(seq_length)[:, np.newaxis]
  • Tämä luo sarakevektorin, jossa jokainen rivi edustaa syötteen sijaintia alkaen nollasta.
  • Jos sekvenssissä on kuusi tokenia, taulukko näyttää tältä: [0, 1, 2, 3, 4, 5] sarakkeena.

2. Taajuuden skaalaustermin laskeminen

div_term = np.exp(
    np.arange(0, embed_dim, 2) * -(np.log(10000.0) / embed_dim)
)
  • Tämä laskee skaalauskertoimen jokaiselle parilliselle upotustilalle.
  • Skaalaus varmistaa, että jokaisella ulottuvuudella on eri taajuus, jolloin koodaus voi kuvata sekä lyhyen että pitkän kantaman sijaintikuviot.
  • Luvun 10000.0 käyttö levittää taajuudet, joten sijainnin muutokset vaikuttavat jokaiseen ulottuvuuteen eri tavoin.

3. Positionaalikoodausmatriisin alustaminen

pe = np.zeros((seq_length, embed_dim))
  • Tämä luo nollilla täytetyn matriisin, jossa on yksi rivi jokaista sijaintia ja yksi sarake jokaista upotustilaa varten.

4. Matriisin täyttäminen sini- ja kosiniarvoilla

pe[:, 0::2] = np.sin(position * div_term)
pe[:, 1::2] = np.cos(position * div_term)
  • Parilliset sarakkeet täytetään position * div_term -lausekkeen sinillä.
  • Parittomat sarakkeet täytetään position * div_term -lausekkeen kosinilla.

5. Positionaalikoodauksen palauttaminen

return pe
  • Tuloksena oleva matriisi antaa jokaiselle sekvenssin sijainnille yksilöllisen koodauksen.
  • Tämä koodaus voidaan lisätä sanaupotuksiin, jotta transformer-malli tunnistaa tokenien järjestyksen.
question mark

Mitkä seuraavista väittämistä sinimuotoisesta positionaalisesta koodauksesta pitävät paikkansa?

Valitse kaikki oikeat vastaukset

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 7

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 1. Luku 7
some-alt