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.