NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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í:
22 hlasů
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Aktivity