Eteenpäinkytketyt verkot: laskentaa tokenin sisällä
Transformerissa eteenpäinkytketty verkko (feed-forward network, FFN) muuntaa yleensä kunkin tokenin vektoria erikseen. Attention-mekanismi yhdistää tietoa sijaintien välillä; FFN soveltaa opittua epälineaarista laskentaa kunkin sijainnin esitykseen.
Saman kerroksen FFN-painoja käytetään jokaiselle tokenille. Yhteiset painot eivät tarkoita samoja tuloksia: laskentaan tulee erilaisia tokeniesityksiä.
Laajenna, portita ja projisoi takaisin
Tavallinen portitettu muunnelma SwiGLU lähettää syötteen kahta projektiota pitkin leveämpään avaruuteen. SiLU muuntaa toisen haaran, joka kerrotaan alkioittain toisella. Kolmas matriisi projisoi tuloksen alkuperäiseen leveyteen.
Tämä NumPy-funktio ottaa tokenirivejä, joiden leveys on d. Portti- ja laajennusmatriisit ovat muotoa d × h ja supistusmatriisi h × d. Vakiotermit on jätetty pois.
import numpy as np
def swiglu(x, gate, up, down):
projected = x @ gate
activated = projected / (1 + np.exp(-projected))
return (activated * (x @ up)) @ down
Väliulottuvuuden leveys antaa lohkolle enemmän yhdisteltäviä epälineaarisia piirteitä. Portitetussa lohkossa on kolme painomatriisia tavallisen laajenna–aktivoi–supista-verkon kahden sijaan. Siksi arkkitehtuureissa säädetään usein piiloleveyttä parametrimäärän pitämiseksi vertailukelpoisena.
Toistuva laskenta on merkittävä osa työtä
Jokainen aktiivinen token käyttää muunnosta jokaisessa sitä soveltavassa kerroksessa. FFN:t muodostavat siksi huomattavan osan monien kielimallien parametreista ja laskennasta, vaikka ne eivät itse vertaa tokenisijainteja.
Asiantuntijamalli voi korvata yhden yhteisen FFN:n valituilla asiantuntijaverkoilla. Se muuttaa tokenille käytettävät parametrit mutta säilyttää eron sijaintien välisen attention-laskennan ja sijaintikohtaisen muunnoksen välillä.