NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.

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:

Neuronové sítě - Neuronové sítě - Pokročilé

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 a Pandas. Grafy budeme generovat knihovnou Matplotlibib. Postupně se dostaneme ke knihovnám Pytorch a TensorFlow, jejichž předchozí znalost není nutná. Nicméně tyto knihovny mají základy a API v NumPy, 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: vzorec1 - Neuronové sítě - Pokročilé nebo: vzorec2 - Neuronové sítě - Pokročilé 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:

vzorec3 - Neuronové sítě - Pokročilé

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.


 

Všechny články v sekci
Neuronové sítě - Pokročilé
Přeskočit článek
(nedoporučujeme)
Neuronové sítě - Perceptron
Článek pro vás napsal Patrik Valkovič
Avatar
Uživatelské hodnocení:
19 hlasů
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Aktivity