1. diel - Neurónové siete - Úvod
Vitajte v tutoriále Neurónovej siete – Krok za krokom. Cieľom tohto kurzu je naučiť vás neurónové siete od základov až po najmodernejšie techniky. Na rozdiel od iných zdrojov je mojím cieľom vyjadriť všetko čo najjasnejšie, ale zároveň prezentovať myšlienky, ktoré sú v pozadí. Budem preto používať čo najviac ukážok na reálnych dátach a prezentovať výsledky pomocou grafov a ďalších techník. Tento kurz neobsahuje iba opis neurónových sietí, ale aj mnoho reálnych príkladov, ktoré si môžete sami vyskúšať a zažiť.
Lekcie sú obvykle štruktúrované do troch až štyroch častí. Najprv načrtnem a popíšem problém, ktorému čelíme. Nasleduje diskusia o tom, ako tento problém vyriešiť ao výhodách a nevýhodách prístupov. Potom ukážem najlepšie riešenie a ukážem vám kód a/alebo matematické pozadie. Verím, že tento prístup vám pomôže lepšie porozumieť technike aj tomu, prečo ju používame a kedy ju použiť.
Požiadavky
Napriek tomu, že som chcel tento kurz vytvoriť pre čo najširšie publikum, nedokážem vysvetliť všetko od základnej školy. Aby ste mali plný zážitok z mojich lekcií, sú vyžadované aspoň nasledujúce znalosti:- Programovanie v Pythone s objektovo orientovanou paradigmou. Všetky kódy v tomto kurze sú v Pythone a pre zjednodušenie kódu môžem použiť pokročilé techniky, ako sú triedy, generátory alebo anotácie. Pokiaľ si nie ste istí svojimi znalosťami, prejdite si najskôr kurz Objektovo orientované programovanie v Pythone.
- Mali by ste poznať základné matematické Python knižnice ako NumPy a Pandas. Grafy budem generovať knižnicou Matplotlibib. Postupne sa dostaneme ku knižniciam Pytorch a TensorFlow a nie je vyžadovaná predchádzajúca znalosť. Avšak tieto knižnice majú základy a API v NumPy a ja budem v prvých lekciách NumPy používať. Môžete začať s tutoriálom Python Numpy Tutorial.
- Matematická analýza je ďalší odbor, na ktorom budeme neurónové siete stavať (budeme potrebovať hlavne znalosť derivácie a parciálnej derivácie). Vysvetlím myšlienky niektorých vzorcov, ale pri zvyšku budem predpokladať, že ukázané úpravy budú jasné.
- Vyžaduje sa tiež aspoň základná znalosť teórie pravdepodobnosti a štatistiky. Neurónové siete sú postavené na pravdepodobnosti a mali by ste poznať teóriu, ktorá je za tým.
Menné konvencie
Kód ?(?=?) označuje pravdepodobnosť, kde premenná ? má hodnotu ?. Zápis ?(?(?)=?) označuje pravdepodobnosť, že funkcia ? pre vstup ? vráti správnu (cieľovú) hodnotu ?. Väčšinu času nás zaujíma predikcia cez celý dátový súbor (súbor dátových bodov), preto budem označovať ? ? ako aj -tý dátový bod a ? ? jeho cieľová hodnota (hodnota, ktorú by mala funkcia ? predpovedať). Pokiaľ to zhrnieme, väčšinu času budem používať ?(?(? ?)=? ?).Často budeme mať viac bodov ? uložených v matici. Matice budem označovať veľkými písmenami ako Χ a cieľové hodnoty potom ako vektor ?. Vo výsledku sa dostávame k zápisu ?(?(X)=t) vyjadrujúca pravdepodobnosť, že naša neurónová sieť (skrytá vo funkcii ?) predpovie správnu hodnotu pre všetky vstupy.
Z hľadiska matematickej analýzy označím:
- ?(?) funkciu jednej premennej ?
- ?(? 1,? 2,…,? ?) funkciu ? premenných pomenovaných ? 1,? 2,…,? ?
- alebo jednoducho ?(?), kde ? je vektor parametrov ?=(? 1, ? 2,....? n).
Ďalej budem označovať ?′(?) alebo ?′
ako deriváciu funkcie podľa jej parametra ?. Pri funkciách s
viacerými parametrami označím
alebo
ako parciálnu deriváciu funkcie ? podľa
?.
A konečne budem označovať ∇? ako gradient funkcie ?, tj. vektor derivácií pre funkciu ? každým jej parametrom. Formálne pre funkciu ?(? 1,? 2,…,? ?) je:
V určitom okamihu budeme potrebovať derivácie vyššieho rádu, takže označím ∇ 2 ? ako deriváciu druhého rádu ? (takzvaná Hessova matica) alebo všeobecne ∇ ? ? ako deriváciu k-riadu funkcie ?.
V budúcej lekcii, Neurónové siete - Perceptron , si povieme niečo o Perceptrone a ukážeme si niektoré druhy algoritmov vhodných na generovanie a triedenie dát.