← herq.net EN
MATERIAŁ EDUKACYJNY
v.2 · 2026
poziom: średniozaawansowany
Anatomia sieci neuronowej

Jak zbudowany jest
model językowy?

Od pojedynczego neuronu, przez wagi i funkcje aktywacji, aż po mechanizm uwagi i dotrenowywanie metodą LoRA. Krótko, z matematyką i interaktywnymi diagramami.

// 01

Pojedynczy neuron - cegiełka wszystkiego

Cała sieć neuronowa składa się z milionów kopii jednego, bardzo prostego elementu. Sztuczny neuron pobiera kilka liczb wejściowych x, mnoży każdą przez przypisaną jej wagę w, sumuje wyniki, dodaje bias b (przesunięcie), a na końcu przepuszcza wynik przez funkcję aktywacji f.

x₁ x₂ x₃ w₁ w₂ w₃ Σ + b f y suma ważona aktywacja
Rys. 1 - Przepływ informacji w pojedynczym neuronie: wejścia → wagi → suma → aktywacja → wyjście.

Matematycznie cały neuron to jedno równanie. Najpierw liczymy sumę ważoną z, a potem przepuszczamy ją przez funkcję:

równanie neuronu
$$ z = \sum_{i=1}^{n} w_i x_i + b \qquad\Longrightarrow\qquad y = f(z) = f\!\left(\mathbf{w}\cdot\mathbf{x} + b\right) $$

Zapis w·x to iloczyn skalarny - to samo, co suma w₁x₁ + w₂x₂ + …, tylko krócej. Waga mówi neuronowi, jak ważne jest dane wejście (duża dodatnia = wzmacnia, ujemna = hamuje), a bias przesuwa próg zadziałania.

Laboratorium · policz neuron sam
1.0
0.5
0.8
-1.2
0.2
// 02

Funkcje aktywacji - źródło nieliniowości

Gdyby neurony tylko sumowały i mnożyły, cała sieć - choćby miała tysiąc warstw - byłaby równoważna jednemu mnożeniu macierzy, czyli linią prostą. Funkcja aktywacji wprowadza nieliniowość, dzięki której sieć potrafi modelować skomplikowane, pofalowane zależności (język, obrazy, logikę).

Interaktywny wykres funkcji
FunkcjaWzórZakresGdzie używana
ReLUmax(0, z)[0, ∞)warstwy ukryte (klasyka, szybka)
Sigmoid1/(1+e⁻ᶻ)(0, 1)prawdopodobieństwo, bramki
tanh(eᶻ−e⁻ᶻ)/(eᶻ+e⁻ᶻ)(−1, 1)sieci rekurencyjne
GELUz·Φ(z)≈[−0.17, ∞)nowoczesne Transformery (GPT, BERT)
Dlaczego to ważneGELU (i podobne, jak SwiGLU) dominują w dzisiejszych LLM-ach, bo są „gładkie" - mają zdefiniowaną pochodną wszędzie, co ułatwia uczenie metodą spadku gradientu. ReLU jest prostsza i tańsza, ale ma „martwy" zakres dla z < 0.
// 03

Od neuronu do warstwy i sieci

Pojedynczy neuron jest słaby. Siłę daje dopiero ułożenie ich w warstwy i połączenie warstw w sieć. Wyjścia jednej warstwy stają się wejściami następnej. Sygnał płynie od lewej (wejście) do prawej (wyjście) - to tzw. propagacja w przód (ang. forward pass).

Rys. 2 - Sieć w pełni połączona (najedź na neuron, by podświetlić połączenia). Każda krawędź to jedna waga.

Zamiast liczyć każdy neuron osobno, całą warstwę zapisujemy jednym mnożeniem macierzy. Jeśli warstwa ma macierz wag W i wektor biasów b, to:

warstwa jako mnożenie macierzy
$$ \mathbf{h} = f\!\left(W\mathbf{x} + \mathbf{b}\right) $$

To dlatego trening LLM-ów odbywa się na kartach graficznych (GPU) - są one zaprojektowane do błyskawicznego mnożenia ogromnych macierzy. Cała „inteligencja" modelu siedzi w liczbach wewnątrz tych macierzy W.

IntuicjaKażda kolejna warstwa buduje coraz bardziej abstrakcyjne pojęcia: pierwsze warstwy łapią proste wzorce (np. końcówki słów), głębsze - składnię, a najgłębsze - znaczenie i kontekst.
// 04

Parametry i wagi - czym jest „7 miliardów"

Kiedy słyszysz „model ma 7B (7 miliardów) parametrów", chodzi dokładnie o liczbę wszystkich wag i biasów w sieci. To są te liczby, które model „uczy się" podczas treningu, stopniowo je korygując, by jego przewidywania były coraz lepsze.

liczba parametrów jednej warstwy liniowej
$$ \#\text{param} = \underbrace{n_{\text{wej}} \times n_{\text{wyj}}}_{\text{wagi } W} \; + \; \underbrace{n_{\text{wyj}}}_{\text{biasy } b} $$

Przykład: warstwa przyjmująca 1000 wejść i dająca 1000 wyjść ma już 1 000 000 + 1000 ≈ milion parametrów. LLM ma setki takich warstw - stąd miliardy.

Trening = szukanie najlepszych liczb

Wagi nie są ustawiane ręcznie. Model startuje z losowymi liczbami i poprawia je w pętli:

1. Predykcja forward pass 2. Błąd loss 3. Gradient backprop 4. Korekta wag w ← w − η·∇ powtórz miliardy razy
Rys. 3 - Pętla uczenia. „η" (eta) to tempo uczenia, „∇" to gradient - kierunek najszybszego spadku błędu.
Kluczowy wzór uczeniaAktualizacja wagi to w ← w − η · ∂L/∂w: każdą wagę przesuwamy odrobinę w stronę, która zmniejsza błąd L. Powtórzone biliony razy daje to model, który „rozumie" język.

Krzywa uczenia - jak strata spada w czasie

Każdy krok treningu odrobinę poprawia wagi i zwykle odrobinę zmniejsza stratę. To, jak szybko (i czy w ogóle) strata maleje, zależy od tempa uczenia η. Pobaw się suwakiem - zobacz trzy reżimy: zbyt wolny, dobry i rozbieżny.

Laboratorium · tempo uczenia a zbieżność
0,150

Ile danych? Prawo skalowania Chinchilli

Mając ustalony budżet obliczeń, ile wybrać parametrów, a ile tokenów treningu? Praca Chinchilla (DeepMind, 2022) pokazała, że optymalnie jest trenować na około 20 tokenach na każdy parametr - wcześniejsze modele bywały niedotrenowane.

Laboratorium · prawo skalowania
1 mld
20
// 05

Tokeny i embeddingi - jak tekst staje się liczbami

Sieć nie rozumie liter. Tekst najpierw dzieli się na tokeny (kawałki słów), a każdy token zamienia na wektor liczb - embedding. To „współrzędne" słowa w wielowymiarowej przestrzeni znaczeń.

"Kot śpi na macie" Kot śpi na macie każdy token → wektor [ 0.21, −0.84, 0.07, … , 0.55 ] token embedding (np. 4096 liczb)
Rys. 4 - Od zdania do wektorów. Słowa o podobnym znaczeniu mają zbliżone embeddingi.

Piękno embeddingów polega na tym, że geometria niesie znaczenie. Słowa „kot" i „pies" leżą blisko siebie; relacje też są wektorami - klasyczny przykład:

arytmetyka znaczeń
$$ \vec{\text{król}} - \vec{\text{mężczyzna}} + \vec{\text{kobieta}} \;\approx\; \vec{\text{królowa}} $$

Zobacz tokenizację na żywo

Wpisz dowolny tekst, a poniżej zobaczysz, jak rozpadłby się na tokeny. Częste słowa zostają w całości, rzadsze i długie dzielą się na kawałki (## oznacza dalszą część słowa). To podział poglądowy - prawdziwe tokenizery (BPE) uczą się swoich sklejeń ze zbioru danych.

Laboratorium · tokenizator subword

Arytmetyka znaczeń - policz analogię

Skoro słowa to wektory, można je dodawać i odejmować. Wybierz trzy słowa i zobacz, do którego słowa najbliżej trafi wynik. (Zabawkowa przestrzeń 2D: oś pozioma ~ płeć, oś pionowa ~ status. Prawdziwe embeddingi mają tysiące wymiarów, a takie analogie bywają zawodne.)

Laboratorium · król − mężczyzna + kobieta
+≈ ?
// 06

Mechanizm uwagi - serce Transformera

To przełom, który umożliwił dzisiejsze LLM-y. Uwaga (ang. attention) pozwala każdemu słowu „rozejrzeć się" po całym zdaniu i zdecydować, które inne słowa są dla niego najważniejsze. W zdaniu „Kot nie zjadł ryby, bo była zepsuta" - uwaga łączy „była" z „rybą", a nie z „kotem".

Trzy role: Query, Key, Value

Z embeddingu każdego tokenu model tworzy trzy wektory, mnożąc go przez trzy wyuczone macierze:

Dopasowanie Query do każdego Key (iloczyn skalarny) daje punktację; po przeskalowaniu i przepuszczeniu przez softmax dostajemy wagi uwagi sumujące się do 1. Wynik to ważona suma wartości V:

scaled dot-product attention
$$ \text{Attention}(Q,K,V) = \text{softmax}\!\left(\frac{Q K^{\top}}{\sqrt{d_k}}\right) V $$

Dzielenie przez √dₖ (pierwiastek z wymiaru) stabilizuje wartości, by softmax nie „nasycał się" przy dużych liczbach. Softmax zamienia surowe punkty na procenty uwagi.

Wizualizacja uwagi · wybierz słowo-pytanie (Query)

↑ Wartości to ilustracja poglądowa. Im ciemniejszy/grubszy słupek, tym więcej „uwagi" wybrane słowo poświęca danemu słowu w zdaniu.

Cała macierz uwagi naraz - heatmapa

Słupki wyżej pokazują jeden wiersz tej macierzy. Tutaj widać ją w całości: każdy wiersz to słowo-pytanie (Query), każda kolumna - słowo-klucz (Key), a jasność komórki mówi, ile uwagi pierwsze poświęca drugiemu. To wizualizacja macierzy softmax(QKᵀ/√d) - tej samej, którą liczyliśmy wyżej.

Heatmapa uwagi · najedź na komórkę

↑ Liczby w komórkach to procent uwagi (każdy wiersz sumuje się do 100%). Zwróć uwagę na jasną komórkę „była/zepsuta → ryby" - dokładnie tę relację łapie mechanizm uwagi.

Wiele głów uwagi (Multi-Head)

Jedna „głowa" uwagi patrzy na jeden typ relacji. Model uruchamia ich kilkadziesiąt równolegle - jedna śledzi gramatykę, inna odniesienia, inna styl - a ich wyniki są łączone. Stąd nazwa multi-head attention.

wejście głowa 1 · składnia głowa 2 · odniesienia głowa 3 · … połącz (concat) wyjście
Rys. 5 - Wiele głów uwagi działa równolegle, a ich wyniki są sklejane i mieszane.
// 07

Blok Transformera - wszystko razem

LLM to stos wielu identycznych bloków Transformera (np. 32, 80, a nawet ponad 100). Każdy blok ma dwie główne części: warstwę uwagi i zwykłą sieć w przód (FFN). Spinają je dwa triki, które umożliwiają trenowanie bardzo głębokich sieci:

połączenie rezydualne wejście (embeddingi) LayerNorm Multi-Head Attention softmax(QKᵀ/√d)·V + LayerNorm Sieć w przód (FFN) Linear → GELU → Linear + wyjście → następny blok
Rys. 6 - Jeden blok Transformera. LLM to dziesiątki takich bloków ułożonych jeden na drugim.

Na samym końcu stosu ostatnia warstwa zamienia wektory z powrotem na prawdopodobieństwa kolejnego tokenu - i to właśnie z nich „losowane" jest następne słowo odpowiedzi.

Jak wybierane jest następne słowo? Temperatura i top-p

Ostatnia warstwa daje rozkład prawdopodobieństwa nad wszystkimi tokenami. To, jak z niego losujemy, ustawiają dwa pokrętła: temperatura (wyostrza lub spłaszcza rozkład) i top-p (odcina ogon mało prawdopodobnych słów). Pobaw się nimi:

Laboratorium · próbkowanie następnego tokenu
0,70
1,00

↑ Szare słupki to pełny rozkład po temperaturze; czerwone to tokeny, które przeżyły odcięcie top-p i z których model faktycznie losuje (✕ = odcięte).

// 08

LoRA - tanie dotrenowywanie wielkich modeli

Pełne dotrenowanie (ang. fine-tuning) modelu 70B oznacza aktualizację wszystkich 70 miliardów parametrów - to wymaga ogromnych kart graficznych i sporo pieniędzy. LoRA (ang. Low-Rank Adaptation) to spryt: zamrażamy oryginalne wagi i uczymy tylko maleńki „dodatek".

Kluczowa obserwacja

Zmiana wag potrzebna do specjalizacji modelu jest „niskiego rzędu" (ang. low-rank) - da się ją zapisać jako iloczyn dwóch cienkich macierzy. Zamiast uczyć całą wielką macierz aktualizacji ΔW (o wymiarach d×d), uczymy tylko dwie chude macierze A i B:

rozkład niskiego rzędu
$$ W' = W_0 + \Delta W = W_0 + \frac{\alpha}{r}\,B A,\qquad B\in\mathbb{R}^{d\times r},\; A\in\mathbb{R}^{r\times d},\; r \ll d $$

Gdzie r to rank (np. 8 lub 16) - wąskie gardło, które decyduje o liczbie nowych parametrów, a α to skala wpływu adaptera. W₀ pozostaje nietknięte.

W₀ d × d (zamrożone) ❄ nie uczymy + B d × r A r × d ▲ tylko to uczymy (r ≪ d) = W′ model wyspecjal. Iloczyn B·A odtwarza pełnowymiarową poprawkę ΔW, ale ma drastycznie mniej parametrów.
Rys. 7 - LoRA dodaje do zamrożonej macierzy W₀ poprawkę zbudowaną z dwóch cienkich macierzy B i A.

Ile parametrów oszczędzamy?

Porównajmy pełną poprawkę z LoRA dla macierzy d = 4096 i rangi r = 8:

PodejścieWzór na liczbę parametrówWynik (d=4096, r=8)
Pełny fine-tuning (ΔW)d × d≈ 16 800 000
LoRA (B + A)d × r + r × d = 2·d·r≈ 65 500
Oszczędnośćd / (2r)~256× mniej
Dlaczego to przełomLoRA pozwala dotrenować wielki model na jednej karcie GPU, a wynikowy adapter waży megabajty zamiast gigabajtów. Można trzymać wiele adapterów (jeden „styl prawniczy", drugi „obsługa klienta") i podpinać je do tego samego bazowego modelu na żądanie.

Przepływ w skrócie

  1. Bierzemy gotowy model bazowy i zamrażamy wszystkie wagi W₀.
  2. Do wybranych warstw (zwykle macierzy Q i V w uwadze) dokładamy parę A, B startującą od zera.
  3. Trenujemy tylko A i B na naszych danych - to ułamek kosztu.
  4. Na koniec wynik B·A można scalić z W₀ (zero narzutu w czasie działania) lub trzymać osobno jako wymienny adapter.
co dzieje się z aktywacją
$$ \mathbf{h} = W_0\mathbf{x} + \frac{\alpha}{r}\,B(A\mathbf{x}) $$

Token x przechodzi przez zamrożoną drogę główną W₀x oraz przez tani „boczny tor" LoRA - a wyniki się sumują. To wszystko.

Pobaw się rangą r

Ranga r to jedyne realne pokrętło LoRA: im mniejsza, tym mniej nowych parametrów (i taniej), ale tym mniej „pojemności" na nową wiedzę. Zobacz, jak r przekłada się na liczbę uczonych parametrów (skala słupków jest logarytmiczna):

Laboratorium · ranga a oszczędność
8