---
title: "Anatomia LLM: neuron i funkcje aktywacji"
date: 2026-06-09
description: "Najmniejsza cegiełka modelu językowego pod lupą: skąd wziął się sztuczny neuron, dlaczego bez funkcji aktywacji cała sieć byłaby bezużyteczna i czym naprawdę różnią się ReLU, GELU i SwiGLU - z wzorami, genezą i konkretami z GPT, LLaMA i Gemmy."
tags: ["anatomia llm", "ai", "llm", "sieci neuronowe", "deep-dive"]
---

## 🚀 Intro

W [przeglądowym wpisie tej serii](/posty/anatomia-llm) rozłożyliśmy model językowy na siedem przystanków - od neuronu po LoRA - tak, żeby całość dało się przejść bez ani jednego wzoru. To był widok z lotu ptaka. Teraz schodzimy na ziemię i zaczynamy najpoważniejszą część podróży: **w głąb mechanizmu**, przystanek po przystanku, tym razem z genezą, pełnymi wzorami i konkretnymi liczbami z prawdziwych modeli.

Zaczynamy od samego dołu - od cegiełki, z której zbudowane jest wszystko inne: pojedynczego sztucznego neuronu i tego drobnego „wygięcia" na jego wyjściu, które nazywamy funkcją aktywacji. To pozornie najnudniejszy element całej układanki. A jednak: bez tego wygięcia największy nawet model zwinąłby się do jednego mnożenia i nie nauczyłby się niczego ciekawego, a cicha ewolucja tych funkcji - od sigmoidu po SwiGLU - okazała się jednym z bohaterów skoku jakości nowoczesnych LLM-ów.

Jest tu jeszcze jedna rzecz warta zapamiętania na samym wejściu. Sztuczny neuron, który zaraz rozłożymy, jest **drastyczną karykaturą** swojego biologicznego pierwowzoru. I mimo to z miliardów takich karykatur wyłania się coś, czego ich wzór w żaden sposób nie zapowiada. To napięcie - prostota części, nieoczywistość całości - będzie nam towarzyszyć przez całą serię.

> 💡 **Jak czytać ten tekst.** Główny wątek jest opisowy i samowystarczalny. Wzory chowam w rozwijanych blokach „dla dociekliwych" - jeśli lubisz matematykę, rozwiń; jeśli nie, pomiń bez straty dla zrozumienia. Wszystkie twierdzenia mają przypisy do prac źródłowych na końcu.


## 📋 TL;DR

- **Sztuczny neuron** liczy sumę ważoną wejść, dorzuca bias i przepuszcza wynik przez funkcję aktywacji. Pomysł ma 80 lat (McCulloch i Pitts, 1943) i jest świadomym, mocnym uproszczeniem biologii.
- **Funkcja aktywacji to jedyne źródło nieliniowości.** Bez niej stos choćby tysiąca warstw jest matematycznie równy jednej warstwie - czyli zwykłej linii.
- **Twierdzenie o uniwersalnej aproksymacji** mówi, że sieć z jedną warstwą ukrytą potrafi przybliżyć dowolną ciągłą funkcję. Ale to twierdzenie o *istnieniu* - nie obiecuje, że taka sieć będzie mała ani że gradient ją znajdzie.
- **ReLU** (zeruj liczby ujemne) wyparła sigmoid, bo nie „nasyca się" i nie zabija gradientu w głębokich sieciach. Jej słabość - „martwe" neurony - załatały warianty.
- **Nowoczesne LLM-y używają gładkich, bramkowanych aktywacji:** GPT - GELU, LLaMA i PaLM - SwiGLU, Gemma - GeGLU. To nie kosmetyka: w testach dały najlepszą jakość.
- Wszystko poniżej możesz **dotknąć** na [stronie interaktywnej](/llm/anatomia#neuron).


## 🧠 Model neuronu: od progu McCullocha-Pittsa do dziś

Historia sztucznego neuronu zaczyna się od pytania, które dziś brzmi zuchwale: czy myślenie da się opisać logiką?

**McCulloch i Pitts (1943).** Pierwszy formalny model sztucznego neuronu to binarna **jednostka progowa**. Sumuje wejścia i „odpala" (wyjście 1), jeśli suma przekracza ustalony próg; w przeciwnym razie milczy (wyjście 0). Neurofizjolog Warren McCulloch i logik Walter Pitts pokazali, że sieci takich jednostek potrafią realizować logikę boolowską, a przy odpowiedniej łączności są obliczeniowo uniwersalne[^mcculloch]. Z tej pary - lekarza i logika - wzięła się idea, która napędza dziś całą branżę.

**Perceptron Rosenblatta (1958).** Frank Rosenblatt poszedł krok dalej i dodał to, czego brakowało: **uczenie**. Jego perceptron to jednowarstwowa sieć jednostek z ważonymi wejściami i progową aktywacją, z jawną regułą dostrajania wag na przykładach[^rosenblatt]. To pierwszy praktycznie zrealizowany model sieci neuronowej - i pierwszy, który „uczył się" z danych zamiast być zaprogramowany ręcznie.

**Zima: ograniczenie XOR (1969).** Entuzjazm szybko ostudzono. W książce *Perceptrons* Marvin Minsky i Seymour Papert udowodnili, że jednowarstwowy perceptron reprezentuje wyłącznie funkcje **liniowo separowalne** i nie potrafi obliczyć nawet tak prostej operacji jak XOR[^minsky]. Wynik - często nadinterpretowany - przyczynił się do „zimy" badań nad sieciami w latach 70. Wyjście z niej dały dopiero sieci **wielowarstwowe** uczone propagacją wsteczną, które to ograniczenie obeszły. (Do warstw i treningu wrócimy w następnym wpisie serii.)

**Współczesny neuron** jest „złagodzoną", płynną wersją tamtej jednostki progowej: zamiast twardego „odpala / milczy" mamy ciągłą funkcję aktywacji. Reszta to dokładnie ten sam pomysł - suma ważona plus bias.

<details>
<summary>📐 Dla dociekliwych: równanie neuronu</summary>

Neuron liczy sumę ważoną wejść $x_i$ z wagami $w_i$, dodaje bias $b$, a wynik $z$ przepuszcza przez funkcję aktywacji $\phi$ (fi):

$$ y = \phi\!\left(\sum_{i} w_i x_i + b\right) = \phi(\mathbf{w}\cdot\mathbf{x} + b) $$

Zapis $\mathbf{w}\cdot\mathbf{x}$ to iloczyn skalarny - skrót na sumę $w_1x_1 + w_2x_2 + \dots$. W modelu McCullocha-Pittsa $\phi$ była skokiem (próg); dziś jest gładką funkcją, którą za chwilę poznamy.

</details>

Zanim pójdziemy dalej, jedno uczciwe zastrzeżenie. Słowo „neuron" sugeruje, że odtwarzamy mózg. Nie odtwarzamy. Sztuczny neuron to **drastyczna idealizacja**[^minsky] i warto wiedzieć, co dokładnie wyrzucono za burtę:

- **Brak impulsów.** Neurony biologiczne komunikują się iglicami napięcia (potencjałami czynnościowymi) - zdarzeniami „wszystko albo nic", kodując informację także w *czasie* i wzorcu wyładowań. Sztuczny neuron ma jedną ciągłą liczbę, interpretowaną najwyżej jako uśredniona częstość.
- **Brak pamięci.** Prawdziwy neuron to układ dynamiczny - jego stan zależy od historii. Standardowy neuron feedforward jest **bezpamięciowy**: wyjście zależy tylko od bieżącego wejścia. Czas dokłada się dopiero architekturą (np. autoregresją w LLM), nie samym neuronem.
- **Liniowa sumacja.** Prawdziwe dendryty wykonują złożoną, nieliniową integrację zależną od miejsca; tu mamy prostą sumę ważoną.
- **Sztywne synapsy.** Wagi są stałe w trakcie jednego przejścia; biologiczne synapsy mają bogatą, zależną od czasu plastyczność.

To nie jest przypis dla pedantów. To pierwszy raz, gdy w tej serii widać przepaść między prostotą cegiełki a złożonością tego, co z niej wyrasta - i powód, dla którego pokora wobec „myślenia" modeli jest na miejscu.


## 〰️ Dlaczego nieliniowość jest konieczna

Tu pojawia się fakt, który decyduje o wszystkim - i który łatwo przeoczyć. Gdyby neuron tylko mnożył i sumował, to złożenie warstw byłoby złożeniem przekształceń liniowych, a **złożenie funkcji liniowych jest znowu funkcją liniową**. Innymi słowy: stos tysiąca warstw bez aktywacji zwija się algebraicznie do jednej warstwy. Cała gigantyczna sieć umiałaby modelować tylko zależności liniowe - czyli prawie nic z tego, co nas interesuje, bo język, obraz i logika liniowe nie są.

Ratunkiem jest właśnie funkcja aktywacji - drobne „wygięcie" wstawione na wyjściu każdego neuronu. To ono wprowadza **nieliniowość**, dzięki której warstwy przestają się skracać, a sieć zyskuje moc modelowania dowolnie pofalowanych zależności.

Jak dużą moc? Zaskakująco dużą - i to udowodniono formalnie. **Twierdzenie o uniwersalnej aproksymacji** (Cybenko, 1989) mówi, że sieć feedforward z **jedną** warstwą ukrytą i ciągłą sigmoidalną nieliniowością potrafi przybliżyć **dowolną** ciągłą funkcję z dowolną dokładnością[^cybenko]. Dwa lata później Hornik uogólnił wynik: decydująca jest sama **wielowarstwowa architektura**, a nie konkretny wybór funkcji aktywacji[^hornik]. To brzmi jak magiczna obietnica - jedna warstwa wystarczy na wszystko.

Tyle że obietnica ma drobny druk, i to taki, który warto rozumieć, bo chroni przed naiwnością:

- **To twierdzenie o *istnieniu*.** Gwarantuje, że odpowiednia sieć *istnieje* - nie mówi, jak duża ma być ani jak ją znaleźć.
- **Szerokość bywa wykładnicza.** Dla niektórych funkcji płytka (jednowarstwowa) sieć musiałaby mieć liczbę neuronów rosnącą wykładniczo z wymiarem wejścia. Sieci **głębokie** reprezentują te same funkcje znacznie taniej - to formalna przewaga głębokości, którą udowodnił Telgarsky[^telgarsky]. Dlatego budujemy modele głębokie, a nie szerokie.
- **Brak gwarancji nauczenia.** Twierdzenie mówi, że *istnieje* zestaw wag - nie obiecuje, że spadek gradientu do niego dojdzie (krajobraz błędu jest niewypukły, pełen minimów lokalnych).

Ta różnica - „rozwiązanie istnieje" kontra „umiemy je znaleźć" - to jeden z najważniejszych motywów całego uczenia maszynowego. Wrócimy do niej, gdy będziemy mówić o treningu.

<details>
<summary>📐 Dla dociekliwych: co dokładnie mówi twierdzenie</summary>

Cybenko pokazał, że skończone kombinacje liniowe złożeń ustalonej funkcji sigmoidalnej $\sigma$ (sigma; z przekształceniami afinicznymi) są **gęste** w przestrzeni funkcji ciągłych na hipersześcianie jednostkowym $[0,1]^n$. Formalnie: dla dowolnej ciągłej $g$ i dowolnie małej tolerancji błędu $\varepsilon>0$ (epsilon) istnieje suma

$$ G(\mathbf{x}) = \sum_{j=1}^{N} \alpha_j\,\sigma\!\left(\mathbf{w}_j\cdot\mathbf{x} + b_j\right), \qquad \text{taka że}\quad |G(\mathbf{x}) - g(\mathbf{x})| < \varepsilon $$

dla wszystkich $\mathbf{x}$ w dziedzinie[^cybenko]. Założenia są istotne: funkcja celu musi być **ciągła**, a dziedzina **zwarta** (domknięta i ograniczona). Twierdzenie nie podaje tempa - ile neuronów $N$ trzeba dla danego $\varepsilon$ - i właśnie tę lukę wypełniają wyniki o przewadze głębokości[^telgarsky].

</details>

👉 **Pobaw się:** na stronie interaktywnej masz [laboratorium neuronu](/llm/anatomia#neuron) - przesuwaj wagi i wejścia i zobacz, jak suma ważona zmienia się na żywo, oraz [wykres funkcji aktywacji](/llm/anatomia#aktywacja), na którym przełączysz kształty omawiane niżej.


## 🔧 Zoo funkcji aktywacji i jego ewolucja

Skoro nieliniowość jest konieczna, pozostaje pytanie: *jakie* wygięcie wybrać? Odpowiedź ewoluowała przez dekady, a każda zmiana rozwiązywała konkretny, namacalny problem poprzedniczki. Prześledźmy tę linię.

### Sigmoid i tanh: elegancja, która dławi gradient

Pierwsze popularne aktywacje były gładkie i „ładne" matematycznie. **Sigmoid** ściska dowolną liczbę do przedziału $(0,1)$, a **tanh** do $(-1,1)$. Problem ujawnia się w głębokich sieciach: dla dużych wartości wejścia obie funkcje **nasycają się** - ich wykres robi się płaski, a nachylenie (pochodna) dąży do zera.

Dlaczego to katastrofa? Bo uczenie polega na przepychaniu sygnału błędu wstecz przez wszystkie warstwy, mnożąc po drodze przez te nachylenia. Gdy każde z nich jest ułamkiem bliskim zera, iloczyn kilkudziesięciu takich ułamków staje się mikroskopijny - to słynny **zanikający gradient** (vanishing gradient). Efekt: wczesne warstwy uczą się ślimaczo albo wcale. To była jedna z głównych ścian, o które rozbijało się głębokie uczenie, zanim spopularyzowano ReLU[^hendrycks].

<details>
<summary>📐 Dla dociekliwych: wzory i pochodne sigmoidu i tanh</summary>

Sigmoid zapisujemy małą grecką literą $\sigma$ (sigma), a tangens hiperboliczny - $\tanh$:

$$ \sigma(x) = \frac{1}{1+e^{-x}}, \qquad \sigma'(x) = \sigma(x)\big(1-\sigma(x)\big) $$
$$ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}, \qquad \tanh'(x) = 1 - \tanh^2(x) $$

Maksimum pochodnej sigmoidu to zaledwie $0{,}25$ (w $x=0$), a tanh - $1$ (też w $x=0$). Dla dużych $|x|$ obie pochodne dążą do zera: stąd zanik gradientu w iloczynie po wielu warstwach. Tanh ma dodatkową zaletę: jest wyśrodkowane wokół zera, co zwykle daje zdrowszą dynamikę uczenia niż sigmoid o zakresie $(0,1)$.

</details>

### ReLU: brutalnie prosta i dlatego skuteczna

Przełom okazał się zaskakująco prymitywny. **ReLU** (Rectified Linear Unit) to po prostu: „zeruj liczby ujemne, dodatnie przepuść bez zmian". Żadnych wykładników, żadnego nasycenia po dodatniej stronie - tam nachylenie wynosi równo 1, więc gradient płynie swobodnie choćby przez setki warstw. Do tego jest błyskawiczna w obliczeniu i tworzy **rzadkie** reprezentacje (część neuronów daje czyste zero), co samo w sobie pomaga.

Ciekawostka: ReLU nie spadła z nieba jako trik inżynierski. Wyłoniła się z teorii - Nair i Hinton wyprowadzili ją, sumując nieskończenie wiele kopii jednostki binarnej z przesuniętymi progami, co daje gładkie przybliżenie zwane softplus[^nair]. Rok później Glorot, Bordes i Bengio pokazali empirycznie, że neurony rektyfikujące dorównują tanh lub go biją, tworząc przy tym pożądaną rzadkość[^glorot].

ReLU ma jednak własną piętę achillesową: **„umierające" neurony** (dying ReLU). Dla wejścia ujemnego pochodna wynosi 0, więc jeśli neuron utknie z ujemną sumą dla wszystkich przykładów, jego gradient jest stale zerowy - neuron przestaje się uczyć i jest praktycznie martwy. Na tę bolączkę powstała cała rodzina łatek.

<details>
<summary>📐 Dla dociekliwych: ReLU i jej warianty przeciw „martwym" neuronom</summary>

$$ \mathrm{ReLU}(x) = \max(0, x), \qquad \mathrm{ReLU}'(x) = \begin{cases}1 & x>0\\ 0 & x<0\end{cases} $$

(w zerze funkcja jest nieróżniczkowalna - w praktyce przyjmuje się pochodną 0 lub 1). Warianty wprowadzają niezerowe nachylenie po stronie ujemnej, sterowane parametrem $\alpha$ (alfa), żeby neuron nigdy całkiem nie „zamarł" - jak **Leaky ReLU**[^maas] ze stałym małym $\alpha\approx 0{,}01$ czy **ELU**:

$$ \mathrm{LeakyReLU}(x) = \begin{cases} x & x>0\\ \alpha x & x\le 0\end{cases} \qquad \mathrm{ELU}(x) = \begin{cases} x & x>0\\ \alpha(e^x - 1) & x\le 0\end{cases} $$

W **PReLU** nachylenie $\alpha$ przestaje być stałą i staje się **parametrem uczonym** - sieć sama dobiera, jak bardzo przepuszczać wartości ujemne. To z PReLU padł w 2015 r. głośny wynik: 4,94% błędu top-5 na ImageNet, pierwszy przekraczający poziom ludzki (5,1%) na tym benchmarku[^he]. **ELU** dodatkowo wypycha średnią aktywacji bliżej zera (efekt podobny do normalizacji), co przyspiesza uczenie[^clevert].

</details>

### GELU, Swish i bramkowane GLU: co naprawdę siedzi w LLM-ach

Tu dochodzimy do funkcji, które napędzają dzisiejsze modele językowe. ReLU ma ostry „łokieć" w zerze - jest niegładka. Nowsze aktywacje wygładzają ten kąt i, co ważniejsze, wprowadzają subtelne **bramkowanie**: zamiast twardo przepuszczać albo zerować wejście, ważą je miękko w zależności od jego wartości.

**GELU** (Gaussian Error Linear Unit) zamiast pytać „czy $x$ jest dodatnie?" pyta „jak bardzo $x$ wyróżnia się na tle szumu?" i przepuszcza je proporcjonalnie[^hendrycks]. To właśnie aktywacja z wnętrza GPT-2 i GPT-3. **Swish** (znany też jako SiLU) to spokrewniony pomysł - gładka interpolacja między linią a ReLU, sterowana jednym parametrem[^ramachandran].

Największy praktyczny skok przyniosły jednak **bramkowane jednostki liniowe** (GLU). Pomysł: rozszczepić sygnał na dwie liniowe projekcje, jedną z nich przepuścić przez aktywację i użyć jej jako „bramki" mnożącej drugą. Z tego rodu wywodzą się **GEGLU** i **SwiGLU** - i to nie ciekawostka, tylko praktyka: w starannych testach (modele dopasowane liczbą parametrów i mocą obliczeniową) warianty GEGLU i SwiGLU dały **najlepszą jakość** spośród wszystkich badanych aktywacji warstwy FFN[^shazeer].

<details>
<summary>📐 Dla dociekliwych: GELU, Swish i rodzina GLU</summary>

GELU waży wejście przez prawdopodobieństwo, że zmienna normalna nie przekroczy $x$ (gdzie $\Phi$, duże „fi", to dystrybuanta rozkładu normalnego)[^hendrycks]:

$$ \mathrm{GELU}(x) = x\,\Phi(x) = x\cdot\tfrac{1}{2}\Big[1+\mathrm{erf}\!\big(x/\sqrt{2}\big)\Big] \approx 0{,}5\,x\Big(1 + \tanh\!\Big[\sqrt{2/\pi}\,\big(x + 0{,}044715\,x^3\big)\Big]\Big) $$

Swish to $x$ przemnożone przez sigmoid, z parametrem $\beta$ (beta) regulującym kształt[^ramachandran]:

$$ \mathrm{Swish}(x) = x\cdot\sigma(\beta x) $$

Dla $\beta=1$ to dokładnie SiLU; gdy $\beta\to\infty$, Swish dąży do ReLU - stąd „gładka interpolacja". Bramkowane warianty mnożą po współrzędnych (symbol $\otimes$) aktywowaną projekcję przez czystą liniową[^shazeer]:

$$ \mathrm{GEGLU}(x) = \mathrm{GELU}(xW)\otimes xV, \qquad \mathrm{SwiGLU}(x) = \mathrm{Swish}(xW)\otimes xV $$

Haczyk: GLU mają **trzy** macierze wag zamiast dwóch, więc żeby utrzymać stałą liczbę parametrów, redukuje się szerokość warstwy ukrytej $d_{ff}$ o czynnik $\tfrac{2}{3}$[^shazeer]. To dlatego w opisach LLaMA pojawia się tajemnicze „$\tfrac{2}{3}\cdot 4d$".

</details>


## 🏭 Co naprawdę siedzi w GPT, LLaMA i Gemmie

Teoria teorią, ale która funkcja wygrała w praniu? Oto twardy fakt z samych prac i kodu źródłowego twórców:

- **GPT-2 / GPT-3 (OpenAI): GELU.** Potwierdzone wprost z kodu GPT-2 - funkcja `gelu` to dokładnie przybliżenie tanh z pracy Hendricksa i Gimpela[^gpt2]. Dla GPT-3 użycie GELU jest przyjmowane jako spójne z GPT-2 (sama praca GPT-3 nie precyzuje tego jawnie[^brown]).
- **PaLM (Google, 2022): SwiGLU** - wybrany, bo „znacząco poprawia jakość względem standardowych ReLU, GELU lub Swish"[^chowdhery].
- **LLaMA (Meta, 2023): SwiGLU** - cytując pracę: „zastępujemy nieliniowość ReLU funkcją SwiGLU (...), używamy wymiaru $\tfrac{2}{3}4d$ zamiast $4d$ jak w PaLM"[^touvron].
- **Gemma (Google DeepMind, 2024): GeGLU** - „standardową nieliniowość ReLU zastępuje funkcja aktywacji GeGLU"[^gemma].

Trend jest czytelny: starsze modele OpenAI stoją na **GELU**, a fala nowoczesnych, otwartych LLM-ów (LLaMA, PaLM) przeszła na **SwiGLU**, podczas gdy Gemma postawiła na **GeGLU**. Wszystkie te wybory są bezpośrednim potomstwem jednej pracy Shazeera z 2020 r.[^shazeer] To dobry przykład na to, jak pojedynczy, pozornie drobny wynik - „mnóż dwie projekcje zamiast jednej" - przesącza się do całej generacji modeli.


## 🎯 Co dalej

Rozebraliśmy najmniejszą cegiełkę do końca: skąd się wzięła (jednostka progowa McCullocha-Pittsa), dlaczego potrzebuje nieliniowości (bo inaczej stos warstw zwija się do jednej linii), co ta nieliniowość obiecuje i czego nie obiecuje (uniwersalna aproksymacja - istnienie, nie wykonalność) oraz które konkretne „wygięcie" wygrało w prawdziwych modelach (gładkie, bramkowane GELU i SwiGLU).

Po drodze zobaczyliśmy też pierwszą szczelinę, w której mieszka tajemnica tej serii: nasz neuron jest karykaturą biologii, a mimo to z jego miliardów kopii wyrasta coś, czego wzór $y=\phi(\mathbf{w}\cdot\mathbf{x}+b)$ nie zapowiada ani słowem. Poznanie cegiełki nie odbiera temu nic z niezwykłości - pokazuje tylko, jak skromny jest budulec.

W następnym przystanku serii bierzemy garść tych neuronów i układamy je w **warstwy i sieć** - a potem zadajemy najważniejsze pytanie: skąd właściwie biorą się te słynne „miliardy parametrów" i jak trening zamienia losowy szum w model, który rozumie język. To tam pojawi się propagacja wsteczna, funkcje straty i prawa skalowania.

Jeśli wolisz teraz **dotknąć** zamiast czytać dalej, [interaktywna strona „Anatomia LLM"](/llm/anatomia#neuron) pozwala poprzesuwać wagi neuronu i przełączać funkcje aktywacji na żywo. A jeśli ciekawi cię, co właściwie *wyłania się* z tej maszynerii, gdy cegiełek są miliardy - [pisałem o tym osobno](/posty/rezonans-czlowiek-llm-kwantowe-lustro).


[^mcculloch]: W. S. McCulloch, W. H. Pitts (1943). *A Logical Calculus of the Ideas Immanent in Nervous Activity*. The Bulletin of Mathematical Biophysics 5(4):115-133. <https://doi.org/10.1007/BF02478259>
[^rosenblatt]: F. Rosenblatt (1958). *The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain*. Psychological Review 65(6):386-408. <https://doi.org/10.1037/h0042519>
[^minsky]: M. Minsky, S. Papert, *Perceptrons* (MIT Press, 1969) - dowód ograniczenia XOR oraz klasyczna charakterystyka sztucznego neuronu jako idealizacji neuronu biologicznego (fakty potwierdzone niezależnie w pracach o uniwersalnej aproksymacji).
[^cybenko]: G. Cybenko (1989). *Approximation by Superpositions of a Sigmoidal Function*. Mathematics of Control, Signals and Systems 2:303-314. <https://doi.org/10.1007/BF02551274>
[^hornik]: K. Hornik (1991). *Approximation Capabilities of Multilayer Feedforward Networks*. Neural Networks 4(2):251-257. <https://doi.org/10.1016/0893-6080(91)90009-T>
[^telgarsky]: M. Telgarsky (2016). *Benefits of Depth in Neural Networks*. COLT 2016, PMLR 49:1517-1539. <https://arxiv.org/abs/1602.04485>
[^hendrycks]: D. Hendrycks, K. Gimpel (2016). *Gaussian Error Linear Units (GELUs)*. arXiv:1606.08415. <https://arxiv.org/abs/1606.08415>
[^nair]: V. Nair, G. E. Hinton (2010). *Rectified Linear Units Improve Restricted Boltzmann Machines*. ICML-10, s. 807-814. <https://www.cs.toronto.edu/~fritz/absps/reluICML.pdf>
[^glorot]: X. Glorot, A. Bordes, Y. Bengio (2011). *Deep Sparse Rectifier Neural Networks*. AISTATS, PMLR 15:315-323. <https://proceedings.mlr.press/v15/glorot11a.html>
[^maas]: A. L. Maas, A. Y. Hannun, A. Y. Ng (2013). *Rectifier Nonlinearities Improve Neural Network Acoustic Models*. ICML Workshop. <https://ai.stanford.edu/~amaas/papers/relu_hybrid_icml2013_final.pdf>
[^he]: K. He, X. Zhang, S. Ren, J. Sun (2015). *Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification*. arXiv:1502.01852. <https://arxiv.org/abs/1502.01852>
[^clevert]: D.-A. Clevert, T. Unterthiner, S. Hochreiter (2015). *Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs)*. arXiv:1511.07289 (ICLR 2016). <https://arxiv.org/abs/1511.07289>
[^ramachandran]: P. Ramachandran, B. Zoph, Q. V. Le (2017). *Searching for Activation Functions* (Swish). arXiv:1710.05941. <https://arxiv.org/abs/1710.05941>
[^shazeer]: N. Shazeer (2020). *GLU Variants Improve Transformer*. arXiv:2002.05202. <https://arxiv.org/abs/2002.05202>
[^gpt2]: OpenAI. Kod źródłowy GPT-2, `src/model.py`, funkcja `gelu`. <https://github.com/openai/gpt-2/blob/master/src/model.py>
[^brown]: T. B. Brown et al. (2020). *Language Models are Few-Shot Learners* (GPT-3). arXiv:2005.14165. <https://arxiv.org/abs/2005.14165>
[^chowdhery]: A. Chowdhery et al. (2022). *PaLM: Scaling Language Modeling with Pathways*. arXiv:2204.02311. <https://arxiv.org/abs/2204.02311>
[^touvron]: H. Touvron et al. (2023). *LLaMA: Open and Efficient Foundation Language Models*. arXiv:2302.13971. <https://arxiv.org/abs/2302.13971>
[^gemma]: Gemma Team, Google DeepMind (2024). *Gemma: Open Models Based on Gemini Research and Technology*. arXiv:2403.08295. <https://arxiv.org/abs/2403.08295>