Lekce 1 - Neuronové sítě - Úvod
Vítejte v tutoriálu Neuronové sítě – Pokročilé. V průběhu tohoto kurzu se naučíme neuronové sítě od základů až po nejmodernější techniky. Budeme proto používat co nejvíce ukázek na reálných datech a prezentovat výsledky pomocí grafů a dalších technik. Tento kurz neobsahuje pouze popis neuronových sítí, ale také mnoho reálných příkladů k vyzkoušení a nabytí praxe.
Lekce jsou obvykle strukturovány do tří až čtyř částí. Nejprve si nastíníme a popíšeme problém, kterému čelíme. Následně se zamyslíme nad tím, jak tento problém vyřešit. Zhodnotíme výhody a nevýhody možných přístupů. Poté si ukážeme nejlepší řešení a jeho kód a/nebo matematické pozadí. Tento přístup nám pomůže lépe porozumět technice i tomu, proč a kdy ji používáme:

Požadavky
Pro úspěšné absolvování kurzu budeme potřebovat alespoň následující znalosti:
- Programování v Pythonu s objektově orientovaným paradigmatem. Všechny kódy v tomto kurzu jsou v Pythonu a vyskytují se v nich pokročilé techniky, jako jsou třídy, generátory nebo anotace. Tuto problematiku řeší kurz Objektově orientované programování v Pythonu.
- Měli bychom již také znát základní matematické knihovny Pythonu jako
NumPy
aPandas
. Grafy budeme generovat knihovnouMatplotlibib
. Postupně se dostaneme ke knihovnámPytorch
aTensorFlow
, jejichž předchozí znalost není nutná. Nicméně tyto knihovny mají základy a API vNumPy
, kterou budeme v prvních lekcích používat. Detaily nalezneme v Python Numpy Tutorial. - Matematická analýza je další obor, na kterém budeme neuronové sítě stavět (budeme potřebovat hlavně znalost derivace a parciální derivace). Vysvětlíme si myšlenky některých vzorců, u zbytku budou ukázané úpravy jasné.
- Potřebovat budeme také alespoň základní znalost teorie pravděpodobnosti a statistiky. Neuronové sítě jsou postavené na pravděpodobnosti a je nutné znát odpovídající teorii.
Jmenné konvence
Kód 𝑃(𝑋=𝑥) označuje pravděpodobnost, kde proměnná 𝑋 má hodnotu 𝑥. Zápis 𝑃(𝑓(𝑥)=𝑡) označuje pravděpodobnost, že funkce 𝑓 pro vstup 𝑥 vrátí správnou (cílovou) hodnotu 𝑡. Většinu času nás zajímá predikce přes celý datový soubor (soubor datových bodů), proto budeme označovat 𝑥𝑖 jako i-tý datový bod a 𝑡𝑖 je jeho cílová hodnota (hodnota, kterou by měla funkce 𝑓 předpovědět). Pokud to shrneme, většinu času budeme používat 𝑃(𝑓(𝑥𝑖)=𝑡𝑖).
Často budeme mít více bodů 𝑥 uložených v matici. Matice budeme označovat velkými písmeny jako Χ a cílové hodnoty poté jako vektor 𝑡.. Ve výsledku se dostáváme k zápisu 𝑃(𝑓(X)=t) vyjadřujícímu pravděpodobnost, že naše neuronová síť (skrytá ve funkci 𝑓) předpoví správnou hodnotu pro všechny vstupy.
Z hlediska matematické analýzy označíme:
- 𝑓(𝑥) funkci jedné proměnné 𝑥
- 𝑓(𝑥1,𝑥2,…,𝑥𝑛) funkci 𝑛 proměnných pojmenovaných 𝑥1,𝑥2,…,𝑥𝑛
- nebo jednoduše 𝑓(𝑥), kde 𝑥 je vektor parametrů 𝑥=(𝑥1, 𝑥2,....𝑥n).
Dále budeme označovat 𝑓′(𝑥) nebo
𝑓′ jako derivaci funkce podle jejího parametru
𝑥. U funkcí s více parametry označíme: nebo:
jako parciální derivaci funkce
𝑓 podle 𝑝.
Na konec budeme označovat ∇𝑓 jako gradient funkce 𝑓, tj. vektor derivací pro funkci 𝑓 každým jejím parametrem. Formálně pro funkci 𝑓(𝑥1,𝑥2,…,𝑥𝑘) je:

V určitém okamžiku budeme potřebovat derivace vyššího řádu. Označíme proto ∇2𝑓 jako derivaci druhého řádu 𝑓 (takzvaná Hessova matice) nebo obecně ∇𝑘𝑓 jako derivaci k-řádu funkce 𝑓.
V příští lekci, Neuronové sítě - Perceptron, si povíme něco o Perceptronu a ukážeme si některé druhy algoritmů vhodných pro generování a třídění dat.