ai.vostman.fi
← Tekoälysanasto

Tekoälyn tietosanakirja

Vastavirta-algoritmi: mitkä painot muuttivat häviötä

Vastavirta-algoritmi (backpropagation) laskee, miten häviö muuttuu sen tuottaneiden parametrien mukana. Se kulkee laskentaa taaksepäin ja soveltaa ketjusääntöä jokaisessa operaatiossa. Tuloksena on gradientti jokaiselle laskentaan osallistuneelle opetettavalle parametrille.

Optimointialgoritmi käyttää gradientteja painojen päivittämiseen. Vastavirta-algoritmi laskee muutoksen suunnan; optimointialgoritmi päättää, miten askel otetaan. Nämä ovat eri operaatioita.

Laskenta eteenpäin tuottaa ennusteet ja häviön. Ketjusääntö kuljettaa gradientit taaksepäin upotusten ja projektion painoihin; optimointialgoritmi käyttää niitä painojen päivittämiseen.

Pieni seuraavan tokenin verkko sisältä nähtynä

Tässä NumPy-esimerkissä tokenin upotusta seuraa projektio sanastoon. Mallissa ei ole attention-mekanismia eikä kontekstin yhdistämistä: kukin syötetoken ennustaa yhtä seuraavaa tokenia. tokens ja targets ovat yhtä pitkiä tunnistetaulukoita. embedding on muotoa vocabulary × width ja output muotoa width × vocabulary.

Laskenta eteenpäin tuottaa pisteet ja todennäköisyydet. Laskenta taaksepäin derivoi keskimääräisen ristientropian (cross-entropy) ja kuljettaa gradientit projektion kautta valittuihin upotusriveihin. Molempia painotaulukoita päivitetään suoraan.

import numpy as np

def train_step(tokens, targets, embedding, output, rate):
    hidden = embedding[tokens]
    logits = hidden @ output
    probabilities = np.exp(logits - logits.max(axis=1, keepdims=True))
    probabilities /= probabilities.sum(axis=1, keepdims=True)

    grad_scores = probabilities.copy()
    grad_scores[np.arange(len(tokens)), targets] -= 1
    grad_scores /= len(tokens)
    grad_output = hidden.T @ grad_scores
    grad_hidden = grad_scores @ output.T

    np.add.at(embedding, tokens, -rate * grad_hidden)
    output -= rate * grad_output

np.add.at on tarpeen, kun sama token esiintyy monta kertaa: yhteiselle upotusriville tulevat vaikutukset täytyy laskea yhteen.

Sama periaate suuremmassa mittakaavassa

Automaattisen derivoinnin kirjastot tallentavat operaatiot ja hoitavat ketjusäännön laskennan. Transformerissa operaatioita on paljon enemmän, mutta koulutuksessa häviön gradientti kulkee edelleen niiden läpi taaksepäin.

Välivaiheiden aktivaatiot tarvitaan derivaattojen laskemiseen. Niiden säilyttäminen tai uudelleenlaskenta on yksi syy siihen, miksi koulutuksen muistitarve eroaa pelkästä mallin ajosta.

Lähteet