Berekeningsgrafen

Meervariabelecalculus vanuit eerste principes

Eén datastructuur organiseert alles uit de afgelopen twee lessen: de berekeningsgraaf. Elke rekenkundige bewerking in een model (optellen, vermenigvuldigen, matmul, activatie) wordt een knoop in een gerichte graaf. Deze graaf is hoe PyTorch, JAX en TensorFlow automatisch gradiënten berekenen.

Trainen doorloopt de graaf in twee vegen. De voorwaartse pas stroomt van links naar rechts en berekent en cachet de waarde van elke knoop. De achterwaartse pas stroomt van rechts naar links en gebruikt de kettingregel om de gradiënt vanaf het verlies terug te duwen naar elke invoer, één knoop tegelijk.

Het idee dat het laat schalen: elke knoop hoeft alleen zijn eigen lokale afgeleide te kennen. Om de gradiënt achterwaarts door een knoop te sturen, vermenigvuldig je de binnenkomende gradiënt (van boven) met de lokale Jacobiaan van de knoop (hoe zijn uitvoer van zijn invoeren afhangt). Geen enkele knoop heeft ooit het globale beeld nodig; lokale regels aan elkaar geketend leveren de exacte totale gradiënt op.

Waar dit voorkomt in MLEen berekeningsgraaf is autograd. Wanneer je een model in PyTorch schrijft, registreert elke bewerking stilletjes een knoop; het aanroepen van loss.backward() loopt de graaf achterstevoren, vermenigvuldigt lokale Jacobianen via de kettingregel en zet ∂loss/∂w op elke parameter. Je schrijft nooit een afgeleide met de hand, en dat ene gemak, afgeleiden exact en gratis berekend, is een groot deel…
▶ Berekeningsgrafen
← Kettingregel: matrixvormKritieke punten in Rⁿ →