Grafy obliczeń

Analiza wielowymiarowa od pierwszych zasad

Jedna struktura danych porządkuje wszystko z dwóch poprzednich lekcji: graf obliczeń. Każda operacja arytmetyczna w modelu (dodawanie, mnożenie, mnożenie macierzy, aktywacja) staje się węzłem w grafie skierowanym. To właśnie dzięki temu grafowi PyTorch, JAX i TensorFlow automatycznie obliczają gradienty.

Trening przechodzi przez graf w dwóch przebiegach. Przejście w przód płynie od lewej do prawej, obliczając i zapamiętując wartość każdego węzła. Przejście wstecz płynie od prawej do lewej, używając reguły łańcuchowej do przepychania gradientu od straty z powrotem do każdego wejścia, węzeł po węźle.

Pomysł, który pozwala na tak dobre skalowanie, jest prosty: każdy węzeł musi znać tylko swoją własną lokalną pochodną. Aby wysłać gradient wstecz przez węzeł, mnożysz gradient przychodzący (z góry) przez lokalny jakobian węzła, czyli informację o tym, jak jego wyjście zależy od wejść. Żaden węzeł nie musi znać całego globalnego obrazu; lokalne reguły połączone w łańcuch dają dokładny całkowity gradient.

Gdzie to występuje w MLGraf obliczeń jest autogradem. Gdy piszesz model w PyTorch, każda operacja po cichu zapisuje węzeł; wywołanie loss.backward() przechodzi przez graf wstecz, mnoży lokalne jakobiany przez regułę łańcuchową i odkłada ∂loss/∂w na każdym parametrze. Nie piszesz żadnej pochodnej ręcznie, a ta jedna wygoda — pochodne obliczane dokładnie i praktycznie za darmo — jest dużą częścią tego, dlaczego…
▶ Grafy obliczeń
← Reguła łańcuchowa: Postać macierzowaPunkty krytyczne w Rⁿ →