Strona główna / Rozdział 1 · Jak model czyta i przewiduje
Ostatnia zmiana · 4 min czytania
Wektory i macierze
Każdy token staje się wektorem liczb, który przechodzi przez kilkadziesiąt warstw. Warstwa to głównie mnożenie tego wektora przez duże, stałe macierze wag, dlatego koszt modelu liczy się w parametrach, bajtach i operacjach.
Po ludzkuWyobraź sobie stół mikserski z miliardami suwaków. Trening ustawił suwaki raz, potem nikt ich nie rusza. Każde słowo przechodzi przez ten sam stół i wychodzi trochę zmienione.
Kliknij liczbę w nowym wektorze i zobacz, z jakich mnożeń powstała
Droga tokena przez model
- Embedding to zwykły lookup, a nie mnożenie: numer tokena wybiera wiersz tabeli. W Llama 3 70B tabela ma 128 256 × 8192 liczb, ponad 1 mld parametrów.
- Warstwa ma dwa kroki. Attention miesza informacje między tokenami (zobacz „Attention”). MLP przetwarza każdy token osobno: rozszerza wektor z 8192 do 28 672 liczb, przepuszcza przez nieliniowość (w Llamie SwiGLU) i zwęża z powrotem. Bez nieliniowości kolejne mnożenia dałoby się złożyć w jedną macierz. W Llama 3 70B MLP to ponad 80% parametrów warstwy.
- Każdy krok dodaje swój wynik do wektora, zamiast go zastępować:
x = x + Attn(Norm(x)), potemx = x + MLP(Norm(x)). Ten wektor to residual stream, wspólna szyna, z której warstwy czytają i do której dopisują. Dodawanie daje gradientowi prostą drogę przez dziesiątki warstw, a normalizacja (w Llamie RMSNorm) trzyma skalę liczb w ryzach. - Na końcu wektor ostatniego tokena mnoży się przez macierz 8192 × rozmiar słownika. Wychodzi jeden logit na każdy token ze słownika, a softmax zamienia logity w prawdopodobieństwa (zobacz „Następny token”).
Kliknij pojęcie i zobacz jego najbliższych sąsiadów w przestrzeni wektorowej
Prawdziwe wektory mają od kilkuset do kilkunastu tysięcy wymiarów. Kierunki też coś znaczą: w klasycznym word2vec wektor „król − mężczyzna + kobieta” wypada najbliżej „królowej”, jeśli wykluczy się same słowa wejściowe (inaczej zwykle wygrywa „król”).
Mapa poglądowa: pozycje są ułożone ręcznie, a nie policzone przez model. Słowo „zamek” trafia do tych samych wierszy tabeli embeddingów, czy chodzi o zamek w drzwiach, czy o zamek króla. Znaczenie z kontekstu dokładają dopiero kolejne warstwy. Wektory do wyszukiwania robi osobny model, jeden na cały fragment tekstu (zobacz „Embeddingi i wyszukiwanie wektorowe”).
Gdzie model przechowuje wiedzę
- W środku nie ma bazy faktów ani instrukcji warunkowych, tylko liczby w macierzach. Badania wskazują, że warstwy MLP działają jak pamięć klucz–wartość (Geva i in., 2021): wzorzec na wejściu „zapala” kierunek, który dopisuje do wektora skojarzoną informację.
- Fakt nie leży w jednym miejscu. Badania nad interpretowalnością pokazują, że model upycha więcej cech, niż ma wymiarów, nakładając je na siebie, więc pojedyncza liczba rzadko znaczy jedną rzecz. Dlatego nie da się przejrzeć wiedzy modelu ani niezawodnie poprawić jednego faktu. Nową albo zmienną wiedzę podaje się w kontekście (zobacz „RAG”).
Ile pamięci i obliczeń potrzebuje model
- Pamięć na wagi to parametry × bajty na parametr: model 70B w BF16 zajmuje ok. 140 GB, w 4 bitach niecałe 40 GB (zobacz „Kwantyzacja”).
- Obliczenia: ok. 2 operacje (mnożenie i dodawanie) na parametr na token przy inferencji i ok. 6 przy treningu, bo dochodzi przebieg wstecz. Model 70B to ok. 140 GFLOP na token plus attention, którego koszt rośnie z długością kontekstu i w Llama 3 70B dogania koszt wag przy prompcie o długości ok. 100 tys. tokenów (zobacz „Attention”). W MoE liczą się tylko aktywne parametry (zobacz „Mixture of Experts”).
- Mnożenie macierzy to tysiące niezależnych iloczynów skalarnych, więc idealnie pasuje do GPU. Przy generowaniu jednego tokena karta i tak czeka głównie na odczyt wag z pamięci (zobacz „Czemu GPU się nudzi”).
Sprawdź się
Co dzieje się z tokenem w środku modelu i ile kosztuje jeden token?
Numer tokena wybiera wektor z tabeli embeddingów. Wektor przechodzi przez kilkadziesiąt bloków: w każdym attention miesza informacje z wcześniejszymi tokenami, a MLP przetwarza token osobno. Wynik każdego kroku dodaje się do wektora (residual stream), z normalizacją przed krokiem. Na końcu mnożenie przez macierz słownika daje logity, a softmax rozkład następnego tokena. Przy krótkim kontekście prawie cały koszt to mnożenie przez stałe macierze wag: ok. 2 operacje na parametr na token, więc model 70B to ok. 140 GFLOP na token, a jego wagi w BF16 zajmują ok. 140 GB. Attention dokłada koszt, który rośnie z długością kontekstu i w Llama 3 70B dogania koszt wag przy prompcie o długości ok. 100 tys. tokenów.
In English
The token ID selects a vector from the embedding table. The vector passes through dozens of blocks: in each, attention mixes in information from earlier tokens and an MLP processes the token on its own. Each step’s output is added to the vector (the residual stream), with normalisation before the step. At the end, a multiplication by the vocabulary matrix yields logits, and a softmax gives the next-token distribution. At short context almost all the cost is multiplication by fixed weight matrices: about 2 operations per parameter per token, so a 70B model needs about 140 GFLOP per token and its BF16 weights take about 140 GB. Attention adds a cost that grows with context length and in Llama 3 70B catches up with the weights over a prompt of about 100k tokens.
Pytania pogłębiające (4)
- Ile obliczeń i pamięci kosztuje jeden token?
- Około 2 operacji na aktywny parametr przy inferencji i 6 przy treningu, plus attention, którego koszt rośnie z długością kontekstu. Pamięć to wagi (parametry × bajty) plus KV cache, który rośnie z długością kontekstu (zobacz „Pętla generowania i KV cache”).
- Gdzie fizycznie jest wiedza modelu?
- W wagach, w dużej mierze w warstwach MLP, które działają jak pamięć skojarzeniowa. Attention przenosi informacje między pozycjami. Fakty są rozproszone i nałożone na siebie, dlatego nową wiedzę taniej podać w kontekście niż wpisywać w wagi (zobacz „RAG” i „Fine-tuning i LoRA”).
- Po co połączenia rezydualne i normalizacja?
- Dodawanie wyniku do wejścia daje gradientowi prostą drogę przez dziesiątki warstw, a każda warstwa uczy się tylko poprawki. Normalizacja przed każdym krokiem (dziś zwykle RMSNorm) trzyma skalę aktywacji w ryzach. Bez tego głębokie modele trenują się niestabilnie.
- Czym embedding tokena różni się od embeddingu do wyszukiwania?
- Embedding tokena to wiersz tabeli, bez kontekstu. Model embeddingowy przepuszcza cały fragment przez transformer i zwraca jeden wektor na tekst. Jest trenowany tak, żeby teksty o podobnym znaczeniu leżały blisko siebie (zobacz „Embeddingi i wyszukiwanie wektorowe”).