Normalisointi: hallitse tokenivektorin mittakaavaa
Normalisointi (normalization) muuttaa välikerrosten esitysten mittakaavaa ja joskus myös keskipistettä. Transformerissa se auttaa pitämään syvän kerrosketjun numeerisen toiminnan hallittavana aktivaatioiden kulkiessa monien jäännöspäivitysten läpi.
Kerrosnormalisointi (LayerNorm) vähentää vektorin keskiarvon ja skaalaa keskihajonnalla. RMSNorm skaalaa neliöllisellä keskiarvolla vähentämättä keskiarvoa. Kumpikin voi sisältää opitut piirrekohtaiset skaalausparametrit.
Normalisoi piirteitä, älä viereisiä tokeneita
Tokenivektorien taulukossa normalisointi toimii yleensä viimeisen piirreulottuvuuden suunnassa. Jokaiselle tokenille lasketaan omat tunnusluvut. Se ei keskiarvoista lausetta yhdeksi vektoriksi eikä yhdistä tietoa sijaintien välillä.
import numpy as np
def rms_norm(x, gain, eps=1e-6):
scale = np.sqrt(np.mean(x * x, axis=-1, keepdims=True) + eps)
return x / scale * gain
Tässä x:n viimeinen ulottuvuus sisältää piirteet, gain sisältää yhden arvon kullekin piirteelle ja eps estää nollavektorin aiheuttaman nollalla jaon. Skaala lasketaan nykyisestä aktivaatiosta; kyse ei ole koulutuksessa opittujen tosiasioiden hakutaulukosta.
Vektorin kertominen positiivisella vakiolla häviää RMS-normalisoinnissa likimäärin vakauttavaa epsilon-termiä lukuun ottamatta. Vakion lisääminen ei häviä: RMSNorm säilyttää tarkoituksella erilaisen invarianssin kuin LayerNorm.
Sijoitus muuttaa koulutuksen laskentapolkua
Normalisointi ennen operaatiota tai jäännöslisäyksen jälkeen muuttaa aktivaatioiden ja gradienttien kulkua kerrosketjussa. Nimet pre-norm ja post-norm kuvaavat tätä sijaintia, eivät tekstin tokenisointitapaa.
Normalisointi vakauttaa attention-mekanismin ja FFN:n ympärillä tapahtuvaa laskentaa. Se ei korvaa kummankaan opittua muunnosta.