How 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.
1234567891011121314151617import 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)
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.0kä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.
Oliko kaikki selvää?
Kiitos palautteestasi!
Osio 1. Luku 7
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Osio 1. Luku 7