Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Kuinka kerroksen normalisointi vakauttaa transformereita | Transformer-komponenttien Rakentaminen
Transformerit Luonnollisen Kielen Käsittelyssä

bookKuinka kerroksen normalisointi vakauttaa transformereita

Pyyhkäise näyttääksesi valikon

Nykyaikaiset syväoppimismallit hyödyntävät normalisointitekniikoita, jotka auttavat niitä oppimaan tehokkaasti ja tarkasti. Luonnollisen kielen käsittelyssä (NLP), jossa syötteiden pituus ja rakenne voivat vaihdella, normalisointi on erityisen tärkeää oppimisprosessin vakauttamiseksi. Kaksi yleistä normalisointimenetelmää ovat batch-normalisointi ja layer-normalisointi, mutta ne palvelevat eri tarkoituksia ja soveltuvat erilaisiin aineistoihin.

Batch-normalisointi
expand arrow

Batch-normalisointi laskee kunkin ominaisuuden keskiarvon ja varianssin koko syöte-erän yli. Tämä lähestymistapa toimii hyvin tietokonenäön tehtävissä, joissa jokainen kuva erässä on yleensä saman kokoinen ja rakenteinen. NLP-tehtävissä, erityisesti vaihtelevan pituisilla syötteillä, batch-normalisointi voi kuitenkin aiheuttaa ei-toivottuja riippuvuuksia erän näytteiden välille eikä välttämättä käsittele vaihtelevia sekvenssipituuksia sujuvasti.

Layer-normalisointi
expand arrow

Layer-normalisointi puolestaan normalisoi syöteominaisuudet jokaisen yksittäisen datapisteen (esimerkiksi jokaisen token-upotuksen lauseessa) sisällä riippumatta muista erän datapisteistä. Tämä tekee siitä huomattavasti sopivamman NLP- ja sekvenssimallinnukseen. Vakioimalla neuronin kerroksen yhteenlasketut syötteet layer-normalisointi varmistaa, että jokaisen tokenin esitys on samalla mittakaavalla riippumatta sen sijainnista tai erän koostumuksesta. Tämä auttaa Transformereita oppimaan vakaasti ja esittämään tekstiä tehokkaammin, erityisesti pitkiä tai monimutkaisia lauseita käsiteltäessä.

123456789101112131415161718192021
import numpy as np def layer_norm(x, epsilon=1e-5): """ Applies layer normalization to a 2D numpy array x. Each row is normalized independently. """ mean = np.mean(x, axis=1, keepdims=True) variance = np.var(x, axis=1, keepdims=True) normalized = (x - mean) / np.sqrt(variance + epsilon) # Optional: learnable scale and bias (gamma and beta) gamma = np.ones_like(mean) beta = np.zeros_like(mean) return gamma * normalized + beta # Example: normalize a batch of 3 token embeddings (rows) embeddings = np.array([[2.0, 4.0, 6.0], [1.0, 3.0, 5.0], [0.0, 0.0, 0.0]]) normalized_embeddings = layer_norm(embeddings) print(normalized_embeddings)
copy

Kuvittele, että jokainen syötteen rivi on yksilöllinen token-upotus – kuin tarinan hahmo, jokaisella omat erityispiirteensä. layer_norm-funktio antaa jokaiselle tokenille tasapuolisen mahdollisuuden säätämällä niiden arvot niin, että ne ovat keskitettyjä nollan ympärille ja niillä on sama skaala. Se laskee kunkin rivin keskiarvon ja varianssin, ja muuntaa arvot niin, ettei mikään token korostu liikaa tai jää taustalle. Tämä itsenäinen normalisointi tarkoittaa, että riippumatta sekvenssin pituudesta tai erän koostumuksesta, jokaisen tokenin ominaisuudet ovat tasapainossa ja valmiina mallin tulkittavaksi. Tämä lähestymistapa pitää mallin koulutuksen vakaana ja tehokkaana, erityisesti käsiteltäessä todellisen maailman NLP-datan vaihtelevia pituuksia ja rakenteita.

question mark

Miksi kerrosnormalisointi on suositumpaa kuin eränormalisointi NLP-transformereissa?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 4

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Osio 2. Luku 4
some-alt