Přeskočit na obsah
coden

Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí

Aktivační funkce a jejich derivace, mizející a explodující gradient ve dvaceti vrstvách, Xavierova a Heova inicializace, past symetrie, normalizace vstupů a vrstev a pokus s hlubokou sítí na dvou měsících.

13 minut Matěj Žalmánek 2026-10-16

Série Základy AI Díl 63 z 83
  1. Mapa umělé inteligence: co je co a jak to do sebe zapadá
  2. Stručná historie umělé inteligence: od Turinga po jazykové modely
  3. Data, model, trénink, inference: základní pojmy na jednom příkladu
  4. Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
  5. Množiny a relace: stavebnice, ze které se skládají definice v AI
  6. Funkce a zobrazení: proč je každý model v AI funkce
  7. Logika a důkazy: pravidla, podle kterých se v AI uvažuje
  8. Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
  9. Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
  10. Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
  11. Gradientní sestup: jak se model učí
  12. Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
  13. Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
  14. Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
  15. Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
  16. Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
  17. Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
  18. Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
  19. Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
  20. Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
  21. Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
  22. Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
  23. Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
  24. Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
  25. Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
  26. Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
  27. Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
  28. Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
  29. Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
  30. Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
  31. Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
  32. Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
  33. Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
  34. Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
  35. Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
  36. Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
  37. Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
  38. Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
  39. Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
  40. Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
  41. Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
  42. Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
  43. Přeučení a regularizace: proč model, který zná data nazpaměť, selže
  44. Vyhodnocení modelu: křížová validace, F1 a křivka ROC
  45. Shlukování a snížení dimenze: k-means, PCA a t-SNE
  46. Klasifikace a regrese: dvě úlohy učení s učitelem
  47. Lineární regrese: nejmenší čtverce geometricky i maticově
  48. Polynomiální a nelineární regrese: jak přímku ohnout
  49. Logistická regrese: sigmoida, šance a křížová entropie
  50. Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
  51. Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
  52. Ztrátové funkce: co přesně model minimalizuje
  53. Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
  54. Ansámbly: náhodný les a gradient boosting
  55. SVM a jádrový trik: nejširší hranice a jak ji ohnout
  56. Signál a vzorkování: proč platí Nyquistův teorém
  57. Fourierova transformace: rozklad signálu na frekvence
  58. Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
  59. Zvuk a řeč: spektrogram, melová škála a MFCC
  60. Obraz jako signál: pixely, barvy, konvoluce a hrany
  61. Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
  62. Neuronová síť od nuly: zpětné šíření chyby krok za krokem
  63. Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
  64. Konvoluční sítě: jak síť poznává obrázky
  65. Rekurentní sítě: paměť pro posloupnosti a mizející gradient
  66. LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
  67. Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
  68. Embeddingy a word2vec: jak se slovo stane vektorem
  69. Mechanismus pozornosti: jak se model naučí, kam se dívat
  70. Transformery a velké jazykové modely: architektura krok za krokem
  71. Tokenizace: jak se text rozseká na kousky pro model
  72. Předtrénování a škálování: proč větší model a víc dat funguje
  73. Doladění a RLHF: jak se z doplňovače textu stane asistent
  74. Prompty, kontext a RAG: jak modelu dát správné informace
  75. Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
  76. Generativní adversariální sítě (GAN): padělatel proti detektivovi
  77. Difúzní modely: jak se z čistého šumu stane obrázek
  78. Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
  79. Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
  80. Policy gradient a PPO: učení přímo strategie
  81. Jak funguje AI agent: jazykový model ve smyčce s nástroji
  82. Programování s AI agenty: zadání, testy a kontrola
  83. Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat

Celá osnova série 83 z 83 témat hotovo

Co si odnesete
  • Proč v hluboké síti gradient mizí nebo exploduje a co s tím má aktivační funkce.
  • Jak správná inicializace udrží signál a proč nesmí být všechny váhy stejné.
  • Proč se normalizují vstupy i vrstvy uvnitř sítě.

Co se hodí znát předem: Neuronová síť od nuly: zpětné šíření chyby krok za krokem

Zpětné šíření chyby se rozšířilo v roce 1986, a přesto se sítě s víc než dvěma třemi vrstvami dalších dvacet let učit skoro nedařilo. Nebylo to tím, že by chyběla velká myšlenka. Chyběly drobnosti: jakou funkci dát do neuronů, jak nastavit váhy na začátku, jak udržet čísla uvnitř sítě v rozumném rozsahu. Když se je kolem roku 2010 podařilo vyřešit, začaly se najednou učit sítě s desítkami a pak stovkami vrstev. Tenhle díl je o těch drobnostech — a o tom, proč na nich všechno stojí.

Navazuje na díl Neuronová síť od nuly.

1. Aktivační funkce

Definice — běžné aktivační funkce

Aktivační funkce je funkce f : ℝ → ℝ, kterou neuron použije na svůj vážený součet z ∈ ℝ; na vektor z ∈ ℝd ji používáme po složkách, f(z) = (f(z1), …, f(zd)) (viz definici vícevrstvé sítě v dílu Neuronová síť od nuly). Běžné aktivační funkce jsou:

  1. sigmoida σ : ℝ → (0, 1), σ(z) = 1/1 + e−z, s derivací σ′(z) = σ(z)(1 − σ(z)), pro kterou platí 0 < σ′(z) ≤ 1/4 pro všechna z ∈ ℝ (rovnost právě když z = 0);
  2. hyperbolický tangens tanh : ℝ → (−1, 1), tanh z = ez − e−z/ez + e−z, s derivací tanh′ z = 1 − tanh2 z, pro kterou platí 0 < tanh′ z ≤ 1 (rovnost právě když z = 0);
  3. ReLU (rectified linear unit) ReLU : ℝ → [0, ∞), ReLU(z) = max(0, z), s derivací ReLU′(z) = 1 pro z > 0 a ReLU′(z) = 0 pro z < 0; v bodě z = 0 derivace neexistuje a dodefinovává se (u nás i v běžných knihovnách) hodnotou 0;
  4. GELU (Gaussian error linear unit) GELU : ℝ → ℝ, GELU(z) = z · Φ(z), kde Φ je distribuční funkce normálního rozdělení N(0, 1) (přesně v definici GELU níže) — hladká varianta ReLU.
Laicky řečeno

Aktivace je to, co dělá síť nelineární — bez ní by byla celá síť jen jedno násobení maticí, ať by měla vrstev kolik chce. Pro učení je ale důležitější její derivace: ta říká, kolik chybového signálu neuron pošle při zpětném šíření dál. Sigmoida pustí nejvýš čtvrtinu, tanh až všechno, ReLU buď všechno, nebo nic.

−1012 −4−2024 vstup neuronu z (bez jednotky) výstup f(z) (bez jednotky) 00,250,51 −4−2024 vstup neuronu z (bez jednotky) derivace f′(z) (bez jednotky)
Aktivační funkce (vlevo) a jejich derivace (vpravo) sigmoidatanhReLUGELU
Věta — bez aktivace je hluboká síť jen jedna vrstva

Nechť n ∈ ℕ, n ≥ 1, je počet vrstev, d0, …, dn ≥ 1 jsou šířky vrstev a pro ℓ = 1, …, n jsou W(ℓ) ∈ ℝdℓ×dℓ−1 váhy a b(ℓ) ∈ ℝdℓ prahy vrstvy ℓ. Nechť síť nemá aktivaci (f je identita), tj. pro vstup x ∈ ℝd0 je a(0) = x a

a(ℓ) = W(ℓ)a(ℓ−1) + b(ℓ),   ℓ = 1, …, n.

Pak existují W ∈ ℝdn×d0 a b ∈ ℝdn takové, že a(n) = Wx + b pro všechna x ∈ ℝd0; celá síť tedy počítá totéž co jediná vrstva.

Důkaz indukcí podle n. Pro n = 1 stačí W = W(1), b = b(1). Platí-li tvrzení pro n − 1 vrstev s maticí W′ a prahem b′, je

a(n) = W(n)(W′x + b′) + b(n) = (W(n)W′)x + (W(n)b′ + b(n)),

takže stačí W = W(n)W′ a b = W(n)b′ + b(n). Celkem W = W(n)W(n−1) ⋯ W(1): složení afinních zobrazení je afinní. ∎

Teprve nelineární f mezi vrstvami tenhle součin „rozbije“.

Derivace sigmoidy se dá spočítat z její vlastní hodnoty — proto ji síti stačí si pamatovat výstup neuronu z dopředného průchodu:

σ′(z) = σ(z) · (1 − σ(z))

σ′(z)
derivace aktivace — činitel, kterým se při zpětném šíření násobí chybový signál procházející neuronem; o něj tu jde
σ(z)
výstup neuronu — u velmi záporného z je skoro 0, a tak derivaci stáhne k nule: neuron, který „mlčí“, se skoro neučí
1 − σ(z)
kolik zbývá do nasycení na 1 — u velmi kladného z je skoro 0, takže ani „křičící“ neuron signál nepustí
Součin dvou čísel se součtem 1 je největší, když jsou obě 1/2: proto je σ′ nejvýš 0,5 · 0,5 = 0,25, a to jen v bodě z = 0.
Odvození — derivace sigmoidy a tanh

Z σ(z) = (1 + e−z)−1 podle pravidla pro derivaci složené funkce:

σ′(z) = e−z/(1 + e−z)2 = 1/1 + e−z · e−z/1 + e−z = σ(z) · (1 − σ(z)),

protože e−z/1 + e−z = 1 − 1/1 + e−z. Pro tanh vyjde stejným postupem tanh′(z) = 1 − tanh2(z); tanh je jen natažená a posunutá sigmoida, tanh(z) = 2σ(2z) − 1, a odtud i čtyřikrát vyšší strop derivace (dvojka uvnitř a dvojka venku).

Příklad — kolik signálu projde při z = 0, 2 a 4
zσ(z)σ′(z)tanh′(z)ReLU′(z)
00,5000,500 · 0,500 = 0,2501 − 02 = 1,000(nedefinována, bere se 0)
20,8810,881 · 0,119 = 0,1051 − 0,9642 = 0,0711
40,9820,982 · 0,018 = 0,0181 − 0,99932 = 0,00131

Ve sloupci σ′(z) barvy podle vzorce σ′(z) = σ(z) · (1 − σ(z)) výše.

Sigmoida i tanh se pro velké z nasytí a signál skoro zastaví; ReLU pustí pro každé kladné z celý signál. (V bodě 0 ReLU derivaci nemá; knihovny i náš kód tam berou 0.)

Definice — GELU přesně a přibližně

Nechť Z je náhodná veličina se standardním normálním rozdělením N(0, 1) (střední hodnota 0, rozptyl 1). Její distribuční funkce je funkce Φ : ℝ → (0, 1),

Φ(z) = P(Z ≤ z) = 1/√2π ∫−∞z exp(−t2/2) dt = 1/2(1 + erf(z/√2)),

kde erf(u) = 2/√π ∫0u exp(−t2) dt je chybová funkce. GELU je funkce GELU : ℝ → ℝ,

GELU(z) = z · Φ(z).

Neuron tedy svůj vstup z vynásobí pravděpodobností, že standardní normální veličina nepřesáhne z. Hendrycks a Gimpel (2016) uvádějí i rychlejší přiblížení

GELU(z) ≈ 1/2 z (1 + tanh(√2/π · (z + 0,044715 z3))),

které kreslí obrázek. Například GELU(1) = 1 · Φ(1) = 0,8413 (přiblížení dá 0,8412) a GELU(−1) = −0,159: na rozdíl od ReLU propustí i kousek záporných hodnot a nemá v nule zlom.

2. Mizející a explodující gradient

Definice — mizející a explodující gradient

Nechť je dána vícevrstvá síť s n ≥ 2 vrstvami, šířkami d0, …, dn, váhami W(ℓ) ∈ ℝdℓ×dℓ−1 a aktivací f (definice v dílu Neuronová síť od nuly), příklad se vstupem x a ztráta E. Nechť δ(ℓ) = ∂E/∂z(ℓ) ∈ ℝdℓ je chybový signál vrstvy ℓ = 1, …, n a D(ℓ) ∈ ℝdℓ×dℓ diagonální matice s čísly f′(z1(ℓ)), …, f′(zdℓ(ℓ)) na diagonále. Z rekurence zpětného šíření (níže) plyne

δ(1) = D(1)(W(2))T D(2)(W(3))T ⋯ D(n−1)(W(n))T δ(n),

tedy chybový signál první vrstvy vznikne ze signálu poslední vrstvy vynásobením n − 1 činiteli D(ℓ)(W(ℓ+1))T. Velikost signálu měříme eukleidovskou normou ‖·‖ a jeho zesílení poměrem

r = ‖δ(1)‖/‖δ(n)‖   (pro δ(n) ≠ 0).

  1. Gradient mizí, když r ≪ 1, takže váhy prvních vrstev dostávají proti posledním zanedbatelně malé gradienty.
  2. Gradient exploduje, když r ≫ 1, takže krok gradientního sestupu v prvních vrstvách je proti posledním obrovský.

Pevná hranice („≪“) se v literatuře nestanovuje; podstatné je, že r se s počtem vrstev mění exponenciálně. Například platí-li pro všechna ℓ = 1, …, n − 1 odhad ‖D(ℓ)(W(ℓ+1))T‖ ≤ q s konstantou q < 1 (‖·‖ je tu maticová norma indukovaná eukleidovskou), pak r ≤ qn−1, protože norma součinu je nejvýš součin norem. Slovy: je-li typická velikost činitele „derivace krát váhy“ menší než 1, gradient s hloubkou exponenciálně mizí; je-li větší, exploduje.

Laicky řečeno

Tichá pošta přes dvacet lidí: když každý zopakuje jen čtvrtinu toho, co slyšel, na konci nezbude nic — 0,2520 je zhruba jedna biliontina. Když každý přidá, je z toho na konci řev. Váhy prvních vrstev se pak buď vůbec nehnou, nebo se rozletí. Učit se dá jen síť, ve které signál projde oběma směry zhruba stejně silný.

Přesně to říká rekurence zpětného šíření z dílu Neuronová síť od nuly. Chybový signál vrstvy ℓ je δ(ℓ) = ∂E/∂z(ℓ), tedy jak citlivá je chyba na vážené součty té vrstvy; gradient jejích vah je pak ∂E/∂W(ℓ) = δ(ℓ) (a(ℓ−1))T. Pro ℓ = 1, …, n − 1 platí:

δ(ℓ) = f′(z(ℓ)) ⊙ (W(ℓ+1))T δ(ℓ+1)

δ(ℓ)
chybový signál vrstvy ℓ — z něj se počítá gradient vah této vrstvy; když je malý, váhy se nehnou
f′(z(ℓ))
derivace aktivace v každém neuronu (⊙ je násobení po složkách) — neuron propustí jen tolik signálu, kolik je jeho sklon; u sigmoidy nejvýš 0,25
(W(ℓ+1))T
tytéž váhy jako dopředu, jen v opačném směru — každý neuron dostane zpět signál od těch, kterým posílal výstup, v poměru svých vah
δ(ℓ+1)
signál vrstvy o patro výš, už spočtený — proto se počítá od výstupu dozadu a v každé vrstvě se jen přinásobí další dva činitele
Rozvinutím přes všech n vrstev je δ(1) součinem n − 1 dvojic „derivace krát váhy“ — a součin mnoha čísel menších (větších) než 1 jde exponenciálně k nule (do nekonečna).
Příklad — dvacet vrstev po jednom neuronu

Pro řetízek s jedním neuronem ve vrstvě je všechno číslo a signál, který dorazí k první vrstvě, je zjednodušeně signál z výstupu krát dvacet činitelů wℓ · f′(zℓ), po jednom za každou vrstvu. Když je každý z nich roven

  • 0,25 (sigmoida v nejlepším bodě, váha 1): 0,2520 = 9,1 · 10−13,
  • 0,5: 0,520 = 9,5 · 10−7, tedy zhruba miliontina,
  • 1,5: 1,520 ≈ 3 325 — gradient první vrstvy přes tři tisíce krát větší než poslední.

Jen činitel velmi blízký 1 udrží signál celý. Ve skutečné síti se místo čísel násobí matice, ale princip je stejný: rozhoduje typická velikost součinu „váhy krát derivace“.

3. Inicializace vah

Definice — Xavierova a Heova inicializace

Nechť ℓ je vrstva sítě s n = dℓ−1 ≥ 1 vstupy a dℓ ≥ 1 neurony, s vahami W(ℓ) ∈ ℝdℓ×dℓ−1 a prahy b(ℓ) ∈ ℝdℓ. Inicializace s rozptylem v > 0 nastaví před učením

  1. každou váhu Wij(ℓ), i = 1, …, dℓ, j = 1, …, dℓ−1, na hodnotu nezávisle vylosovanou z rozdělení se střední hodnotou 0 a rozptylem v (u nás normálního N(0, v), knihovny používají i rovnoměrné);
  2. prahy na nulu, b(ℓ) = 0.

Rozptyl se volí podle aktivace tak, aby si aktivace vrstvu za vrstvou udržely rozptyl (odvození níže):

  1. Xavierova inicializace (Glorot, Bengio, 2010) pro tanh a sigmoidu: v = 1/n,   tj. směrodatná odchylka √1/n;
  2. Heova inicializace (He a kol., 2015) pro ReLU: v = 2/n,   tj. směrodatná odchylka √2/n.

Dvojka u Heovy inicializace vyrovná to, že ReLU polovinu vstupů vynuluje. Glorot a Bengio v původním článku navrhli obecněji v = 2/dℓ−1 + dℓ; pro vrstvy stejné šířky (dℓ−1 = dℓ), jako jsou naše, je to totéž co 1/n.

Laicky řečeno

Neuron sečte n vstupů. Kdyby každá váha byla kolem 1, součet by byl √nkrát větší než vstupy a za pár vrstev by čísla utekla. Váhy se proto zmenší tak, aby součet vyšel zhruba stejně velký jako vstup. Jedna číselná konstanta na začátku rozhodne, jestli se síť vůbec začne učit.

Odkud se berou 1/n a 2/n

Věta — rozptyl váženého součtu

Nechť n ∈ ℕ, n ≥ 1, a w1, …, wn, a1, …, an jsou reálné náhodné veličiny s konečnými druhými momenty, pro které platí

  1. w1, …, wn jsou navzájem nezávislé a pro každé j = 1, …, n je E[wj] = 0 a Var(wj) = Var(w);
  2. vektor (w1, …, wn) je nezávislý na vektoru (a1, …, an);
  3. E[aj2] = E[a2] pro každé j = 1, …, n.

Označme z = ∑j=1n wj aj. Pak E[z] = 0 a

Var(z) = n · Var(w) · E[a2].

Důkaz. Z předpokladu 2 je E[z] = ∑j E[wj] E[aj] = 0. V součtu E[z2] = ∑j,k E[wjwk] E[ajak] (opět předpoklad 2) jsou pro j ≠ k členy nulové, protože podle předpokladu 1 je E[wjwk] = E[wj] E[wk] = 0, a zbude n členů E[wj2] E[aj2] = Var(w) E[a2] (předpoklady 1 a 3). Tedy Var(z) = E[z2] − E[z]2 = n · Var(w) · E[a2]. ∎

Var(z(ℓ)) = n · Var(w) · E[(a(ℓ−1))2]

n · Var(w)
zesílení vrstvy — n = dℓ−1 vstupů znamená n nezávislých příspěvků, jejichž rozptyly se sčítají; jediná věc, kterou volíme, je Var(w), a volíme ji tak, aby celý činitel vyrovnal ztrátu nebo zisk v aktivaci
E[(a(ℓ−1))2]
síla vstupu — střední kvadrát aktivací předchozí vrstvy; kolik z rozptylu z(ℓ−1) v nich zbylo, rozhoduje aktivace
Aby se velikost nesčítala ani neztrácela vrstvu za vrstvou, musí být Var(z(ℓ)) = Var(z(ℓ−1)).

Zbývá dosadit, co z rozptylu nechá aktivace. Tanh je kolem nuly skoro identita (tanh z ≈ z), takže E[a2] ≈ Var(z) a rovnováha vyjde pro n · Var(w) = 1, tedy Var(w) = 1/n. ReLU nechá z z symetrického kolem nuly jen kladnou polovinu, a proto E[ReLU(z)2] = 1/2 E[z2] = 1/2 Var(z); rovnováha pak chce n · Var(w) · 1/2 = 1, tedy Var(w) = 2/n. Glorot a Bengio (2010) ve skutečnosti navrhli Var(w) = 2/nvst + nvýst, kompromis mezi rovnováhou dopředu (počet vstupů) a dozadu (počet výstupů); pro vrstvy stejné šířky, jako jsou naše, je to totéž co 1/n.

Příklad — vrstvy po 50 neuronech
  • Xavier: směrodatná odchylka vah √1/50 = 0,141; He: √2/50 = 0,200.
  • Tanh s malými vahami (0,05): zesílení 50 · 0,052 = 0,125, takže směrodatná odchylka aktivací klesne v každé vrstvě √0,125 = 0,354krát. Za 19 vrstev z 0,31: 0,31 · 0,35419 ≈ 8 · 10−10. Pokus dal 7 · 10−10 (v průměru 0,350 na vrstvu).
  • Tanh s N(0, 1): zesílení 50 · 1 = 50 — vážené součty mají směrodatnou odchylku kolem √50 ≈ 7 a tanh je na ±1, v nasycení.
  • ReLU s Xavierem: 50 · 1/50 · 1/2 = 1/2, rozptyl se v každé vrstvě půlí a směrodatná odchylka klesá √1/2 = 0,71krát; teorie dává 0,57 · 0,7119 ≈ 0,0008, pokus 0,0004 (v průměru 0,68 na vrstvu — s padesáti neurony a sto vzorky se náhodné odchylky násobí také).
  • ReLU s He: 50 · 2/50 · 1/2 = 1 — rovnováha.

Barvy podle vzorce výše: zesílení n · Var(w); činitel 1/2 u ReLU je podíl rozptylu, který aktivace nechá v E[a2].

for každá vrstva l s n_vst vstupy a n_výst neurony:
    if aktivace je tanh nebo sigmoida:
        s = 1/√n_vst          # Xavier (pro n_vst = n_výst)
    else if aktivace je ReLU:
        s = √(2/n_vst)        # He
    W[l] = s · matice n_výst × n_vst čísel z N(0, 1)
    b[l] = 0                  # prahy mohou začít v nule, symetrii rozbijí váhy

Pokus: dávka náhodných vstupů projde sítí s 20 skrytými vrstvami po 50 neuronech. Sledujeme, jak velké (směrodatná odchylka) jsou aktivace v každé vrstvě a jak velký je gradient v první vrstvě proti poslední:

10010−210−410−610−810−10 15101520 skrytá vrstva (pořadí) sm. odchylka aktivací (log. měřítko)
Velikost aktivací ve 20 vrstvách podle aktivace a inicializace sigmoida, N(0, 1)tanh, příliš malé váhytanh, N(0, 1)tanh, XavierReLU, XavierReLU, He
Aktivace a inicializaceaktivace ve vrstvě 1ve vrstvě 20poměr gradientů 1. vrstva/20. vrstva
sigmoida, N(0, 1)0,430,400,03 (mizí)
tanh, příliš malé váhy (σ = 0,05)0,317 · 10⁻¹⁰—
tanh, N(0, 1)0,930,93127 000 (exploduje)
tanh, Xavier0,610,141,00
ReLU, Xavier0,570,00043,9
ReLU, He0,810,373,9

S příliš malými vahami aktivace v tanh síti zmizí: ve dvacáté vrstvě mají velikost 7 · 10⁻¹⁰ a síť neví nic o vstupu. S vahami N(0, 1) se tanh nasytí — skoro všechny neurony jsou na ±1 — a gradient první vrstvy je 127 000krát větší než poslední. Sigmoida s N(0, 1) má aktivace v pořádku, ale gradient k první vrstvě dorazí 31krát zeslabený. Xavier udrží tanh v rovnováze (poměr gradientů 1,00), u ReLU ale nestačí: každá vrstva rozptyl zhruba způlí a ve dvacáté vrstvě zbude 0,0004. Heova inicializace s dvojkou navíc to opraví — aktivace zůstanou v řádu desetin až do konce.

4. Past symetrie

Proč váhy vůbec losovat? Nešlo by je nastavit všechny na stejné rozumné číslo? Zkusme síť 2-4-1 na XOR se všemi vahami 0,5.

Laicky řečeno

Čtyři skryté neurony začnou stejně, dostanou stejný vstup a stejný chybový signál — a tak se změní stejně. Po 2 000 epochách mají všechny čtyři přesně tytéž váhy (5,571 a 5,571), rozdíl je nula. Čtyři neurony se chovají jako jeden, a jeden neuron XOR nezvládne: pro vstup (1, 1) síť vrací 0,669 místo 0. Náhodná inicializace je tedy nutná už jen proto, aby se neurony od sebe lišily — rozbije symetrii.

Proč přesně se neurony nerozdělí, je vidět z gradientu váhy wij ze vstupu j do skrytého neuronu i. Síť má skryté výstupy hi = σ(∑j wijxj + bi), výstup o = σ(∑i vihi + c) a křížovou entropii jako ztrátu (u ní je chybový signál výstupu prostě o − y):

∂E/∂wij = (o − y) · vi · hi(1 − hi) · xj

∂E/∂wij
o kolik a kterým směrem se váha změní — chceme ukázat, že pro všechna i vyjde stejně
o − y
chyba výstupu — jedna pro celou síť, pro všechny skryté neurony stejná
vi
výstupní váha neuronu i — jakým dílem neuron k chybě přispěl; při stejné inicializaci všude 0,5
hi(1 − hi)
derivace sigmoidy v neuronu i — závisí jen na jeho vážených vstupech, a ty jsou při stejných vahách stejné
xj
vstup j — tentýž pro všechny skryté neurony
Žádný činitel nezávisí na tom, který neuron i to je — pokud se neurony už předtím nelišily.
Věta — stejně inicializované neurony zůstanou stejné

Nechť je dána síť s m ≥ 1 vstupy, jednou skrytou vrstvou s d ≥ 2 sigmoidními neurony a jedním sigmoidním výstupem jako v odstavci výše: pro vstup x ∈ ℝm je hi = σ(∑j=1m wijxj + bi) pro i = 1, …, d a o = σ(∑i=1d vihi + c). Nechť ztráta E je součet křížových entropií přes konečně mnoho trénovacích příkladů a parametry se mění gradientním sestupem s krokem η > 0,

θ ← θ − η ∂E/∂θ   pro každý parametr θ ∈ {wij, bi, vi, c}.

Nechť pro dva skryté neurony i ≠ k platí na začátku

wij = wkj pro všechna j = 1, …, m,   bi = bk,   vi = vk.

Pak tyto rovnosti platí i po každém počtu t ∈ ℕ kroků gradientního sestupu.

Důkaz indukcí podle t. Pro t = 0 platí rovnosti z předpokladu. Jsou-li před krokem váhy neuronů i a k stejné, jsou stejné i hi = hk pro každý vstup, a podle vzorce výše tedy i gradienty ∂E/∂wij = ∂E/∂wkj, ∂E/∂bi = ∂E/∂bk a ∂E/∂vi = (o − y) hi = ∂E/∂vk, sečtené přes všechny příklady. Stejné váhy minus stejný násobek stejných gradientů dají stejné váhy. ∎

Proto v pokusu vyšel rozdíl vah přesně nula, ne jen malý. Když se váhy na začátku liší třeba jen o málo, dostanou neurony různé gradienty a rozdíly mezi nimi se učením obvykle prohloubí.

5. Normalizace vstupů

Stejná potíž s měřítkem jako uvnitř sítě nastává už na vstupu. Lineární regrese se dvěma příznaky, jeden v jednotkách (směrodatná odchylka 1), druhý ve stovkách (směrodatná odchylka 100):

Definice — podmíněnost úlohy

Nechť p ≥ 1 a E : ℝp → ℝ je kvadratická funkce (ztráta), E(w) = wTAw + cTw + e se symetrickou maticí A ∈ ℝp×p, c ∈ ℝp a e ∈ ℝ. Její Hessova matice H = ∇2E = 2A nezávisí na w; nechť je pozitivně definitní, s vlastními čísly λmax = λ1 ≥ λ2 ≥ … ≥ λp = λmin > 0. Číslo podmíněnosti úlohy je

κ = λmax/λmin ≥ 1.

Číslo κ tedy říká, kolikrát je údolí ztráty v nejstrmějším směru zakřivenější než v nejplošším; κ = 1 právě když je zakřivení ve všech směrech stejné. Gradientní sestup s pevným krokem potřebuje řádově tolik kroků, kolik je κ (odvození níže).

Laicky řečeno

Ztráta je údolí. Když jsou příznaky v různých jednotkách, je údolí v jednom směru stokrát užší než ve druhém. Krok musí být malý kvůli úzkému směru, a v širokém se pak postupuje hlemýždím tempem — známe to z dílu o gradientním sestupu. U nás má údolí podmíněnost 8 434 a gradientní sestup potřebuje 14 822 kroků. Po standardizaci obou příznaků je podmíněnost 1,07 a stačí jeden krok.

Definice — standardizace příznaku

Nechť N ≥ 2 a x1, …, xN ∈ ℝ jsou hodnoty jednoho příznaku na trénovacích datech, ne všechny stejné. Označme jejich průměr a směrodatnou odchylku

μ = 1/N ∑k=1N xk,   s = √1/N ∑k=1N (xk − μ)2 > 0.

Standardizace příznaku je funkce ℝ → ℝ,

x ↦ x̃ = x − μ/s.

Standardizované trénovací hodnoty x̃1, …, x̃N mají průměr 0 a směrodatnou odchylku 1. Tytéž μ a s se pak použijí i na nová data. Má-li příklad víc příznaků, standardizuje se každý zvlášť se svým průměrem a směrodatnou odchylkou.

Proč počet kroků roste s podmíněností

Ztráta lineární regrese E(w) = 1/N ∑k=1N (wTxk − yk)2 je kvadratická, s Hessovou maticí 2C, kde C = 1/N ∑k=1N xkxkT (λi níže jsou vlastní čísla C, takže κ = λmax/λmin je stejné jako u 2C). Ve směrech vlastních vektorů C se gradientní sestup rozpadne na nezávislé jednorozměrné úlohy, a pro chybu po k krocích s krokem η = 1/2λmax (největší, který ještě v žádném směru nepřestřelí) platí přesně:

E(wk) − E* = ∑i gi · (1 − λi/λmax)2k

E(wk) − E*
kolik chyby zbývá do optima po k krocích — sestup zastavíme, až klesne pod 1 % počáteční hodnoty
gi
kolik počáteční chyby leží ve směru i — směr, ve kterém skoro nic chybět nebude, nás nezdrží, i kdyby byl pomalý
λi/λmax
zakřivení údolí ve směru i vůči nejstrmějšímu směru — krok musíme nastavit podle nejstrmějšího, a v mělkém směru pak uděláme jen zlomek cesty; nejpomalejší směr má poměr 1/κ
2k
počet kroků, zdvojený — vzdálenost od optima se každým krokem násobí (1 − λi/λmax) a chyba je kvadratická, tedy roste se čtvercem vzdálenosti
Nejstrmější směr zmizí po prvním kroku (činitel 1 − 1 = 0); nejpomalejší ubývá činitelem (1 − 1/κ)2 ≈ 1 − 2/κ, takže potřebný počet kroků roste úměrně κ.
Příklad — odkud je 14 822 kroků
  1. Data: v našem vzorku 200 bodů mají příznaky směrodatné odchylky 1,00 a 91,7. Matice C je skoro diagonální, s vlastními čísly λmax = 8 415 a λmin = 0,998, tedy κ = 8 434 — zhruba (91,7/1,00)2, poměr rozptylů příznaků.
  2. Počáteční chyba (z w = 0) leží z 33,6 % v pomalém směru.
  3. Podmínka zastavení: 0,336 · (1 − 1/8 434)2k ≤ 0,01, tedy k ≥ ln(0,336/0,01)/−2 ln(1 − 1/8 434) = 3,51479/0,000237139 ≈ 14 821,6 (zhruba κ/2 · ln 33,6). Nejmenší celé k je 14 822 — přesně tolik kroků potřeboval pokus.
  4. Po standardizaci je λmax = 1,033, λmin = 0,967; pomalý směr ubude za jeden krok činitelem (1 − 0,967/1,033)2 = 0,004, a protože v něm leželo jen 2,3 % chyby, stačí jeden krok.

Barvy podle vzorce pro E(wk) − E* výše (chyby jsou tu v podílech počáteční chyby).

6. Normalizace uvnitř sítě

Definice — batch normalization a layer normalization

Nechť ε > 0 je malá konstanta. Pro čísla u1, …, uK ∈ ℝ (K ≥ 1) označme jejich průměr a rozptyl

μ = 1/K ∑k=1K uk,   σ2 = 1/K ∑k=1K (uk − μ)2.

  1. Batch normalization (Ioffe, Szegedy, 2015). Nechť m ≥ 1 je velikost dávky a z1, …, zm ∈ ℝ jsou vážené součty jednoho neuronu pro m příkladů dávky; μ a σ2 jsou jejich průměr a rozptyl (K = m, uk = zk). Neuron má naučené parametry γ, β ∈ ℝ. Výstup pro příklad k = 1, …, m je yk = γ · zk − μ/√σ2 + ε + β. Totéž se dělá pro každý neuron vrstvy zvlášť, každý s vlastními γ, β.
  2. Layer normalization (Ba, Kiros, Hinton, 2016). Nechť d ≥ 1 je počet neuronů vrstvy a z1, …, zd ∈ ℝ jsou vážené součty všech neuronů vrstvy pro jeden příklad; μ a σ2 jsou jejich průměr a rozptyl (K = d, ui = zi). Neuron i má naučené parametry γi, βi ∈ ℝ. Výstup neuronu i = 1, …, d je yi = γi · zi − μ/√σ2 + ε + βi. Totéž se dělá pro každý příklad zvlášť.

Obě normalizace tedy srovnají vážené součty na průměr 0 a rozptyl (skoro) 1 a pak přidají naučené měřítko γ a posun β; batch normalization průměruje přes příklady dávky, layer normalization přes neurony vrstvy. Při použití naučené sítě batch normalization místo μ a σ2 dávky dosadí jejich klouzavé průměry z učení (pseudokód níže).

Laicky řečeno

Místo spoléhání na šťastnou inicializaci se čísla po každé vrstvě srovnají na stejnou velikost. Ve stejném pokusu jako výše: tanh s příliš malými vahami, kde aktivace jinak zmizely na 7 · 10⁻¹⁰, má s normalizací vrstev velikost aktivací kolem 0,63 ve všech dvaceti vrstvách. Transformery v jazykových modelech mají layer normalization v každém bloku.

Obě normalizace počítají pro každý vážený součet zi totéž; liší se jen tím, přes co se berou průměr a rozptyl:

yi = γ · zi − μ/√σ2 + ε + β

zi − μ
posun do nuly — μ je průměr přes dávku (batch norm) nebo přes neurony vrstvy (layer norm); tanh a sigmoida jsou nejcitlivější kolem nuly a ReLU tam má zlom
√σ2 + ε
dělení směrodatnou odchylkou — srovná velikost na 1 bez ohledu na to, jak velké váhy byly; malé ε (v PyTorchi výchozí 10−5) chrání před dělením nulou, když jsou všechna z stejná
γ
naučené měřítko — kdyby síti víc vyhovovala jiná velikost, může si ji vrátit; s γ = σ a β = μ by normalizaci dokonce zrušila
β
naučený posun — totéž pro střed; zastoupí práh neuronu, který by se jinak odečtením průměru ztratil
Příklad — normalizace čtyř čísel

Dávka čtyř příkladů dá jednomu neuronu vážené součty z = (1, 2, 3, 6). Průměr μ = 12/4 = 3, rozptyl σ2 = (−2)2 + (−1)2 + 02 + 32/4 = 14/4 = 3,5, směrodatná odchylka √3,5 = 1,871 (ε zanedbáme). Normalizované hodnoty jsou

(−2, −1, 0, 3)/1,871 = (−1,069; −0,535; 0; 1,604)

— průměr 0, rozptyl 1. S počátečními γ = 1 a β = 0 jsou to rovnou výstupy. Barvy podle vzorce výše: zi − μ jsou čísla (1, 2, 3, 6) minus 3.

# batch normalization jednoho neuronu
při učení, pro dávku z_1 … z_m:
    μ  = průměr(z)
    σ² = průměr((z − μ)²)
    y  = γ · (z − μ) / √(σ² + ε) + β
    μ_běh  = 0,9 · μ_běh  + 0,1 · μ       # klouzavé průměry pro pozdější použití
    σ²_běh = 0,9 · σ²_běh + 0,1 · σ²
při použití, pro jediný příklad z:
    y  = γ · (z − μ_běh) / √(σ²_běh + ε) + β
# layer normalization: μ a σ² přes neurony vrstvy jednoho příkladu,
# stejně při učení i při použití, žádné klouzavé průměry

Váhu 0,1 klouzavého průměru má PyTorch jako výchozí. Rozdíl mezi učením a použitím je u batch normalization nutný: jeden příklad dávku nemá, a výsledek nesmí záviset na tom, s čím jiným zrovna přišel.

7. Pokus: hluboká síť na dvou měsících

Dva měsíce z minulého dílu, tentokrát síť se šesti skrytými vrstvami po 12 neuronech, stejný gradientní sestup, čtyři různé kombinace aktivace a inicializace. Ztrátou je křížová entropie: síť vrací pravděpodobnost p, že bod patří do třídy 1, a za každý z N trénovacích bodů se třídou y ∈ {0, 1} zaplatí

E = −1/N ∑k=1N [ yk ln pk + (1 − yk) ln(1 − pk) ]

y ln p
platí jen pro body třídy 1 (pro y = 0 je nulový) — logaritmus pravděpodobnosti, kterou síť dala správné odpovědi; ln p jde k −∞, když je síť sebejistě vedle, takže sebejistý omyl stojí nejvíc
(1 − y) ln(1 − p)
totéž pro body třídy 0, kde je správná odpověď „ne“ s pravděpodobností 1 − p; jedna rovnice tak pokryje obě třídy
Minus na začátku obrací znaménko (logaritmy pravděpodobností jsou záporné) a průměr přes body dělá ztrátu nezávislou na velikosti dat; jednotkou je nat, protože logaritmus je přirozený.
Příklad — co znamenají čísla na svislé ose

Bod třídy 1 a odhad p = 0,9 stojí −ln 0,9 = 0,105; odhad p = 0,1 stojí −ln 0,1 = 2,303. Síť, která o ničem neví a na všechno odpoví p = 0,5, platí za každý bod −ln 0,5 = ln 2 = 0,693 (u bodu třídy 0 stejně −ln(1 − 0,5)) — proto je 0,693 hranice „nic jsem se nenaučil“. Barvy podle vzorce výše: u bodu třídy 1 (y = 1) zbude jen člen y ln p = ln p.

00,20,40,60,8 0200400600 epocha učení (pořadí) křížová entropie (nat)
Učení hluboké sítě 2-[12 × 6]-1 na dvou měsících sigmoida, N(0, 1)tanh, XavierReLU, příliš malé váhyReLU, He

ReLU s Heovou inicializací a tanh s Xavierem srazí ztrátu už během prvních 20 epoch (na 0,351 a 0,121). Obě pak chvíli poskakují — krok učení 0,5 je pro ně skoro moc velký a tanh kolem 100. epochy na chvíli vyskočí až na 0,597 — ale po 200 epochách má ReLU 0,001 a tanh 0,005. Sigmoida s N(0, 1) se prvních sto epoch skoro nehne (z 0,713 na 0,496), protože gradient k prvním vrstvám dorazí zeslabený, a po 200 epochách je teprve na 0,218. ReLU s příliš malými vahami se nenaučí nic — ztráta zůstane na 0,693, tedy ln 2, což je výsledek sítě, která na všechno odpoví „50 %“. Tři úspěšné sítě skončily po 600 epochách na nových bodech kolem 98,5 % — rozdíl nebyl v tom, jestli se naučí, ale jak rychle, a jedna nevhodná konstanta učení zablokovala úplně.

8. Co se používá dnes

  • ReLU a příbuzné. ReLU se prosadila kolem roku 2010 (Vinod Nair a Geoffrey Hinton) a hlavně s AlexNetem v roce 2012. Jazykové modely používají její hladké varianty jako GELU (Dan Hendrycks a Kevin Gimpel, 2016).
  • Inicializace podle aktivace. Knihovny mají jako výchozí inicializaci škálovanou podle počtu vstupů (Keras Xavierovu, PyTorch podobnou rovnoměrnou); Heovu pro ReLU stačí zapnout. Vrstvy se tak nastaví, aby signál prošel.
  • Normalizace. Obrazové sítě používají batch normalization, transformery layer normalization.
  • Reziduální spojení. Další trik, díky kterému se učí sítě se stovkami vrstev: vstup vrstvy se přičte k jejímu výstupu, takže gradient má „dálnici“, po které projde beze ztráty.
Definice — reziduální blok

Nechť d ≥ 1 a F : ℝd → ℝd je diferencovatelná funkce, typicky složení několika obyčejných vrstev, jejichž výstup má stejný rozměr jako vstup. Reziduální blok (He a kol., 2015) je funkce R : ℝd → ℝd,

x ↦ y = R(x) = x + F(x).

Jeho Jacobiho matice (matice parciálních derivací ∂yi/∂xj, i, j = 1, …, d) je

∂y/∂x = I + ∂F/∂x,

kde I ∈ ℝd×d je jednotková matice. Zpětný signál se v bloku nenásobí jen derivací F, ale dostane i nezměněnou kopii přes jednotkovou matici I. I když jsou derivace uvnitř F skoro nulové, jako u nasycené sigmoidy výše, signál projde celý a součin přes desítky bloků nespadne k nule.

9. Shrnutí

  • Derivace aktivace určuje, kolik chybového signálu projde: sigmoida nejvýš 0,25, tanh a ReLU až 1.
  • V hluboké síti se činitele násobí: gradient mizí, nebo exploduje (u tanh s N(0, 1) poměr 127 000).
  • Inicializace podle počtu vstupů udrží signál: Xavier pro tanh (poměr gradientů 1,00), He pro ReLU.
  • Stejné počáteční váhy se nikdy nerozdělí: čtyři skryté neurony zůstaly totožné a XOR se nenaučil.
  • Normalizace vstupů snížila počet kroků z 14 822 na 1, normalizace vrstev udrží aktivace i při špatné inicializaci.
  • Na hluboké síti rozhodla volba o rychlosti: po 200 epochách ReLU s He 0,001, sigmoida 0,218, ReLU s malými vahami se nepohnula.

Chcete si to osahat? Nechte AI agenta postavit síť s dvaceti vrstvami v PyTorchi a vypsat velikost gradientu v každé vrstvě po jednom kroku — jednou se sigmoidou, jednou s ReLU a Heovou inicializací.

Máte na to jiný názor? Napište na support@coden-app.com.

Agent na vašem počítači, ovládaný z telefonu