Faktoryzacja Wspólnej Rozkładu, Dokładnie
Załóżmy, że chcesz modelować prawdopodobieństwo całej sekwencji tokenów x_1, x_2, ..., x_n — zdanie, linia kodu, fraza muzyczna. Modelowanie tego wspólnego rozkładu p(x_1, ..., x_n) bezpośrednio wydaje się niemożliwe: liczba możliwych sekwencji rośnie wykładniczo wraz z długością, więc nie ma sposobu na po prostu zapytanie o każdy wynik. Zasada łańcucha prawdopodobieństwa ratuje nas i nie kosztuje to w dokładności. Mówi ona, że każdy wspólny rozkład można dokładnie napisać jako iloczyn rozkładów warunkowych: p(x_1, x_2, ..., x_n) = produkt_{t=1}^{n} p(x_t | x_1, ..., x_{t-1}). Innymi słowy, prawdopodobieństwo całej sekwencji jest równe prawdopodobieństwu pierwszego tokena, pomnożone przez prawdopodobieństwo drugiego tokena pod warunkiem pierwszego, pomnożone przez prawdopodobieństwo trzeciego pod warunkiem pierwszych dwóch i tak dalej. Nie jest to przybliżenie ani uproszczenie założeń — wynika bezpośrednio z definicji prawdopodobieństwa warunkowego, stosowanej wielokrotnie. To, co nam daje, jest ogromne: zamiast jednego niemożliwego do rozwiązania obiektu (wspólny rozkład wszystkich sekwencji), musimy modelować tylko jeden znacznie prostszy obiekt, p(x_t | x_1, ..., x_{t-1}), rozkład na kolejny token pod warunkiem wszystkiego, co poprzednio pojawiło się. Model, który dobrze rozwiązuje ten powtarzalny podproblem, automatycznie staje się modelem całego wspólnego rozkładu.
Trenowanie Sieci do Przewidywania Następnego Tokena
Model autoregresyjny to po prostu sieć neuronowa wytrenowana w celu przybliżenia p(x_t | x_1, ..., x_{t-1}) z parametrami theta, zapisane jako p_theta(x_t | x_<t). Wczesne wersje wykorzystywały sieci neuronowe rekurencyjne (RNN), które czytały tokeny po kolei i kompresowały wszystko, co do tej pory widziało się w wektor stanu ukrytego, aktualizując ten podsumowanie na każdym kroku. Współczesne systemy zdecydowanie przeważają nad przygodnymi transformatorami, które przetwarzają całą sekwencję równolegle za pomocą uwagi własnej, ale każda pozycja ogranicza się do zwracania uwagi tylko na siebie i wcześniejsze pozycje. Obie architektury są trenowane w ten sam sposób: przy dużej ilości rzeczywistych sekwencji, cel treningowy polega na zmaksymalizowaniu prawdopodobieństwa logarytmicznego przypisanego przez model do rzeczywistego następnego tokena w każdej pozycji, zsumowanego w całej sekwencji: L(theta) = sum_{t=1}^{n} log p_theta(x_t | x_1, ..., x_{t-1}). Alternatywnie, trening minimalizuje negatywne prawdopodobieństwo logarytmiczne, które jest dokładnie stratą entropii krzyżowej znaną z klasyfikacji, zastosowaną w każdej pojedynczej pozycji w każdej sekwencji jednocześnie. Ponieważ twierdzenie o łańcuchu gwarantuje, że ten cel na token poziomie jest matematycznie równoważny modelowaniu całej wspólnej dystrybucji, model, który niezawodnie radzi sobie z przewidywaniem następnego tokena w ogromnych ilościach różnorodnego tekstu, formalnie uczy się skompresowanego modelu języka.
Maskowanie Przyczynowe: Bez Spoglądania w Przyszłość
Transformery przetwarzają całą sekwencję naraz, zamiast token po tokenie, co jest fantastyczne dla szybkości uczenia się, ale wprowadza subtelne zagrożenie: uwaga własna naturalnie pozwala każdej pozycji na patrzenie na każdą inną pozycję, w tym te, które występują później. Jeśli to zostanie niekontrolowane, sieć mogłaby „rozwiązać” przewidywanie następnego tokena, po prostu kopiując odpowiedź z przyszłej pozycji, którą już widzi — skrót, który daje prawie doskonałą stratę uczenia się, ale całkowicie bezużyteczny model w czasie generowania, ponieważ przyszłe tokeny oczywiście nie istnieją, gdy faktycznie piszesz tekst. Maskowanie przyczynowe to rozwiązuje to, wymuszając na mechanizmie uwagi w pozycji t, aby rozważał tylko pozycje 1 do t, zwykle implementowane poprzez dodawanie nieskończoności ujemnej do wyników uwagi dla wszystkich przyszłych pozycji przed softmaxem, tak że ich waga uwagi kolapsuje do zera. Ta pojedyncza restrykcja przekształca w zasadzie transformator o charakterze dwukierunkowym w prawdziwie autoregresyjny, gwarantując, że p_theta(x_t | x_1, ..., x_{t-1}) jest obliczane wyłącznie na podstawie informacji, które byłyby dostępne podczas generowania. Jest to mała zasada architektoniczna z ogromnym skutkiem: to właśnie ona utrzymuje spójność matematyczną między przewidywaniem następnego tokena w czasie uczenia się a generowaniem w czasie wnioskowania.
Generowanie: Próbkowanie Jednego Tokena, Wprowadzanie Go Ponownie
Po wytrenowaniu model przestaje widzieć poprawne kontynuacje — generowanie musi budować sekwencję od zera, krok po kroku, co nadaje nazwę „autoregresyjny” – model regresuje na własnych poprzednich wyjściach. Rozpoczynając od pewnego zapytania x_1, ..., x_k, proces powtarza prostą pętlę: oblicz p_theta(x_{t} | x_1, ..., x_{t-1}) dla kolejnej pozycji, wybierz (lub dokonaj wyboru w sposób gnuślny) token x_t z tego rozkładu, dołącz go do sekwencji i wprowadź wydłużoną sekwencję z powrotem do modelu, aby obliczyć rozkład dla x_{t+1}. Dlatego generowanie jest w naturalnym sensie sekwencyjne i stosunkowo wolne w porównaniu z treningiem: każdy nowy token wymaga świeżej propagacji z uwzględnieniem wszystkiego, co zostało już wygenerowane. Strategie próbkowania różnią się — gnuślne dekodowanie zawsze wybiera pojedynczy najbardziej prawdopodobny token, a próbkowanie z temperaturą, top-k i jądrowe (top-p) wprowadza kontrolowaną losowość, aby model nie produkował dokładnie tego samego, nudnego i powtarzalnego kontynuacji za każdym razem. Niezależnie od reguły próbkowania, prawdopodobieństwo, z którego próbuje się pobierać w każdym kroku, jest dokładnie p(x_t | x<t) zidentyfikowane przez zasadę łańcucha jako jedyną rzecz, której model musiał kiedykolwiek nauczyć się.
Dlaczego ta prosta idea skaluje się do modeli o rozmiarze GPT
Co czyni rozkład na zasadę łańcuchową tak potężnym w praktyce, to fakt, że przekształca niełatwy problem modelowania w jednolity, niewyczerpalnie powtarzalny: niezależnie od tego, jak długie staje się sekwencja, model musi odpowiadać jedynie na to samo pytanie – „biorąc pod uwagę wszystko do tej pory, co następuje dalej?” Ta jednorodność oznacza, że ta sama architektura i receptur treningowa skalują się niemal bez wysiłku od krótkich zdań do dokumentów o rozpiętości tysięcy tokenów, a także od małych sieci do modeli z setkami miliardów parametrów, po prostu dodając więcej warstw, więcej głowic uwagi i więcej danych treningowych. Wyjaśnia to również, dlaczego przewidywanie kolejnego tokena – cel, który brzmi niemal zbyt prosto, aby mieć znaczenie – okazuje się wymuszać na modelu nieświadome uczenie się gramatyki, skojarzeń faktograficznych, wzorców rozumowania i stylu: prawidłowe oszacowanie p(x_t | x_<t) ogólnie rzecz biorąc, w szerokim i zróżnicowanym korpusie, wymaga budowy bogatych wewnętrznych reprezentacji znaczenia, a nie tylko statystyk powierzchniowych. GPT i jego następcy są, pod względem matematycznym, dokładnie tym: spowodowany maską Transformator wytrenowany do maksymalizacji sumy_t log p_theta(x_t | x_<t), co jest rozkładem na zasadę łańcuchową przekształconym w projekt architektoniczny.
Często zadawane pytania
Czy reguła łańcuchowa jest przybliżeniem?
Nie. p(x_1, ..., x_n) = produkt_{t=1}^{n} p(x_t | x_1, ..., x_{t-1}) jest dokładną tożsamością matematyczną, która wynika z definicji prawdopodobieństwa warunkowego i jest prawdziwa dla dowolnej dystrybucji wspólnej dla dowolnej sekwencji. Przybliżenie w praktyce pochodzi wyłącznie od tego, jak dobrze sieć neuronowa p_theta przybliża każdą prawdziwą dystrybucję warunkową p(x_t | x
Dlaczego nie przewidywać wszystkich tokenów naraz zamiast po jednym?
Przewidywanie każdego tokenu jednocześnie (jak to robią niektóre modele nieautoregresyjne) omija wąskie gardło sekwencyjne podczas generowania, ale jest to znacznie trudniejszy problem uczenia się, ponieważ tokeny zależą od siebie w skomplikowany sposób, a pojedyncze równoległe przewidywanie ma trudności z uchwyceniem tych zależności. Reguła łańcuchowa omija ten problem, dzieląc dystrybucję wspólną na sekwencję znacznie prostszych, dobrze zdefiniowanych prognoz warunkowych, kosztem konieczności wielokrotnych sekwencyjnych przechodzeń w celu wygenerowania.
Co dokładnie zapobiega maskowaniu przyczynowemu?
Zapobiega to uwzględnianiu przez obliczenia uwagi pozycji informacji z dowolnego tokenu, który występuje po nim w sekwencji. Bez tej maski Transformer wytrenowany do przewidywania kolejnych tokenów mógłby trywialnie zwracać uwagę na ten sam token, który ma przewidzieć, ponieważ ten token jest już obecny wejściowym podczas treningu, co czyniłoby stratę treningową bezsensowną i sprawiało, że model byłby bezużyteczny do rzeczywistego generowania.
Czy RNN i Transformery używają innego celu matematycznego?
Nie, dzielą ten sam dokładny cel uczenia się, maksymalizację sumy log p_theta(x_t | x
Dlaczego generowanie wydaje się wolniejsze niż trening?
Podczas treningu cała sekwencja docelowa jest już znana, więc spowodowane maskowaniem Transformer może obliczyć straty dla wszystkich pozycji w jednym równoległym przejściu. Podczas generowania każdy token zależy od tych wygenerowanych wcześniej, więc model musi uruchomić świeże przechodzenie dla każdego nowego tokena, co jest inherentnie sekwencyjnym procesem, który techniki takie jak buforowanie kluczy-wartości przyspieszają, ale nie mogą go w pełni usunąć.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Autoregressive Models: Generating Sequences One Token at a Time via the Chain Rule i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację Autoregressive Models: Generating Sequences One Token at a Time via the Chain Rule